/*
** state manipulation
*/
LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud);//创建lua虚拟机
LUA_API void (lua_close) (lua_State *L); //销毁指定 Lua 状态机中的所有对象
/**
lua_newthread
创建一个新线程,并将其压入堆栈,并返回维护这个线程的 lua_State 指针。这个函数返回的新状态机共享原有状态机中的所有对象(比如一些 table),但是它有独立的执行堆栈。
没有显式的函数可以用来关闭或销毁掉一个线程。线程跟其它 Lua 对象一样是垃圾收集的条目之一。
*/
LUA_API lua_State *(lua_newthread) (lua_State *L);
/**
lua_tocfunction
lua_CFunction lua_tocfunction (lua_State *L, int index);
把给定索引处的 Lua 值转换为一个 C 函数。这个值必须是一个 C 函数;如果不是就返回 NULL 。
*/
LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); /**
lua_Number
typedef double lua_Number;
Lua 中数字的类型。确省是 double ,但是你可以在 luaconf.h 中修改它。 通过修改配置文件你可以改变 Lua 让它操作其它数字类型(例如:float 或是 long )。
*/
LUA_API const lua_Number *(lua_version) (lua_State *L);
/*
** basic stack manipulation 虚拟栈基本操作
*/
LUA_API int (lua_absindex) (lua_State *L, int idx);
LUA_API int (lua_gettop) (lua_State *L); //获取栈中元素个数
LUA_API void (lua_settop) (lua_State *L, int idx); //重置栈顶指针指向idx的位置
LUA_API void (lua_pushvalue) (lua_State *L, int idx);//复制idx位置元素并压入到栈顶
LUA_API void (lua_rotate) (lua_State *L, int idx, int n);
LUA_API void (lua_copy) (lua_State *L, int fromidx, int toidx);
LUA_API int (lua_checkstack) (lua_State *L, int n);//
LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n);
/***
** access functions (stack -> C) 虚拟栈数据传递到C++中
*/
/**
int lua_is... (lua_State *L, int index):检查一个元素能否被转换成指定的类型。
*/
LUA_API int (lua_isnumber) (lua_State *L, int idx);
LUA_API int (lua_isstring) (lua_State *L, int idx);
LUA_API int (lua_iscfunction) (lua_State *L, int idx);
LUA_API int (lua_isinteger) (lua_State *L, int idx);
LUA_API int (lua_isuserdata) (lua_State *L, int idx);
LUA_API int (lua_type) (lua_State *L, int idx); //返回栈中元素的类型; LUA_API const char *(lua_typename) (lua_State *L, int tp);//返回type对应的名字字符串,第二个参数为lua_type返回的类型
/**
int lua_to... (lua_State *L, int index):类型转换函数
*/
LUA_API lua_Number (lua_tonumberx) (lua_State *L, int idx, int *isnum);//将给定索引处的Lua值转换为C类型lua_Number(参见lua_Number)。Lua值必须是数字或可转换为数字的字符串(参见§3.4.3);否则,lua_tonumberx返回0。
LUA_API lua_Integer (lua_tointegerx) (lua_State *L, int idx, int *isnum);
LUA_API int (lua_toboolean) (lua_State *L, int idx);
LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len);
/***
lua_rawlen
/返回给定索引处值的固有“长度”: 对于字符串,它指字符串的长度;
//对于表: 它指不触发元方法的情况下取长度操作'#'应得到的值;
//对于用户数据: 它指为该用户数据分配的内存块的大小;
//对于其它值: 它为0.
*/
LUA_API size_t (lua_rawlen) (lua_State *L, int idx);
LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx);
LUA_API void *(lua_touserdata) (lua_State *L, int idx);
LUA_API lua_State *(lua_tothread) (lua_State *L, int idx);
LUA_API const void *(lua_topointer) (lua_State *L, int idx);
LUA_API void (lua_arith) (lua_State *L, int op); //对堆栈顶部的两个值(如果是负数,则为一个)执行算术或逐位操作,其中顶部的值是第二个操作数,弹出这些值,并推送操作的结果。该函数遵循相应的Lua操作符的语义(即,它可以调用元方法)。
LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2);//如果在索引的两个值,则返回1 index1和 index2是原始地等于(即,不调用__eq元方法)。否则返回0.如果任何索引无效,则返回0
LUA_API int (lua_compare) (lua_State *L, int idx1, int idx2, int op); //比较两个Lua值。如果索引处的值index1满足op 与索引处的值进行比较时返回1 index2,则遵循相应Lua运算符的语义(即,它可以调用metamethods)。否则返回0.如果任何索引无效,则返回0。
/***
** push functions (C -> stack) C++数据传递到虚拟栈中
*/
LUA_API void (lua_pushnil) (lua_State *L); //将nil值推入堆栈。
LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n);
LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n);
LUA_API const char *(lua_pushlstring) (lua_State *L, const char *s, size_t len);
LUA_API const char *(lua_pushstring) (lua_State *L, const char *s);
LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt,
va_list argp);
LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...);
LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n);
LUA_API void (lua_pushboolean) (lua_State *L, int b);
LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p);
LUA_API int (lua_pushthread) (lua_State *L);
/**
** get functions (Lua -> stack) ) Lua数据传递到虚拟栈中
*/
LUA_API int (lua_getglobal) (lua_State *L, const char *name);
LUA_API int (lua_gettable) (lua_State *L, int idx);
/** int t = lua_getfield(L, 2/*index*/, "type"/*key*/); //取出t.type 的值,并放到栈顶!!*/
LUA_API int (lua_getfield) (lua_State *L, int idx, const char *k);
LUA_API int (lua_geti) (lua_State *L, int idx, lua_Integer n);
LUA_API int (lua_rawget) (lua_State *L, int idx);
LUA_API int (lua_rawgeti) (lua_State *L, int idx, lua_Integer n);
LUA_API int (lua_rawgetp) (lua_State *L, int idx, const void *p);
LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec);
LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz);
LUA_API int (lua_getmetatable) (lua_State *L, int objindex);
LUA_API int (lua_getuservalue) (lua_State *L, int idx);
/*
** set functions (stack -> Lua 虚拟栈数据传递到Lua空间中
*/
LUA_API void (lua_setglobal) (lua_State *L, const char *name);
LUA_API void (lua_settable) (lua_State *L, int idx);
LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k);
LUA_API void (lua_seti) (lua_State *L, int idx, lua_Integer n);
LUA_API void (lua_rawset) (lua_State *L, int idx);
LUA_API void (lua_rawseti) (lua_State *L, int idx, lua_Integer n);
LUA_API void (lua_rawsetp) (lua_State *L, int idx, const void *p);
LUA_API int (lua_setmetatable) (lua_State *L, int objindex);
LUA_API void (lua_setuservalue) (lua_State *L, int idx); /*
** 'load' and 'call' functions (load and run Lua code)
*/
/***
void lua_call (lua_State *L, int nargs, int nresults);
要调用一个函数,必须使用以下协议:首先,要调用的函数被推入堆栈;然后,按直接顺序推送函数的参数;也就是说,首先推第一个参数。最后调用lua_call;nargs是您推入堆栈的参数的数量。当函数被调用时,所有参数和函数值都会从堆栈中弹出。函数返回时,将函数结果推入堆栈。结果的数量调整为nresults,除非nresults是LUA_MULTRET。在这种情况下,函数的所有结果都被推送;Lua负责将返回的值放入堆栈空间,但它并不确保堆栈中有任何额外的空间。函数结果按直接顺序推入堆栈(首先推入第一个结果),这样在调用之后,最后一个结果就位于堆栈的顶部。
lua_callk 与 lua_call相同 lua_callk允许 yield
*/
LUA_API void (lua_callk) (lua_State *L, int nargs, int nresults,lua_KContext ctx, lua_KFunction k);
LUA_API int (lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,lua_KContext ctx, lua_KFunction k); //与上面相同 多了一个错误处理
/**** lua_load 在不运行Lua块的情况下加载Lua块。如果没有错误,lua_load将编译后的块作为Lua函数推送到堆栈的顶部。否则,它将推送一条错误消息。*/
LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, const char *chunkname, const char *mode);
/**
lua_dump 将函数转储为二进制块。接收堆栈顶部的Lua函数,并生成一个二进制块,如果再次加载该块,将生成一个与转储的函数等价的函数。当生成块的一部分时,lua_dump使用给定的数据调用函数writer(参见lua_Writer)来编写它们。
如果strip为真,则二进制表示可能不包含关于函数的所有调试信息,以节省空间。返回的值是上次调用写入器返回的错误代码;0表示没有错误。
此函数不会从堆栈中弹出Lua函数。*/
LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data, int strip); /* coroutine functions 协同程序*/
/**
当C函数调用lua_yieldk时,正在运行的协同程序暂停执行,对启动该协同程序的lua_resume的调用返回。参数nresults是将作为结果传递给lua_resume的堆栈中的值的数量。
当再次恢复协调程序时,Lua调用给定的延续函数k来继续执行生成的C函数(参见§4.7)。这个延续函数从前一个函数接收相同的堆栈,删除n个结果并由传递给lua_resume的参数替换。此外,延续函数接收传递给lua_yield dk的值ctx。
通常,这个函数不会返回;当协程最终恢复时,它将继续执行continuation函数。但是,有一种特殊的情况,就是从行或count钩子中调用这个函数(参见§4.9)。在这种情况下,应该调用lua_yield dk,而不使用延续(可能以lua_yield的形式),也不使用结果,并且钩子应该在调用之后立即返回。Lua将让步,当协程再次恢复时,它将继续执行触发钩子的(Lua)函数的正常执行。
如果这个函数是从一个没有延续函数的挂起C调用的线程中调用的,或者是从一个没有在resume中运行的线程(例如,主线程)中调用的,那么它可能会引发一个错误。*/
LUA_API int (lua_yieldk) (lua_State *L, int nresults, lua_KContext ctx, lua_KFunction k);
LUA_API int (lua_resume) (lua_State *L, lua_State *from, int narg);
LUA_API int (lua_status) (lua_State *L);
LUA_API int (lua_isyieldable) (lua_State *L);
LUA_API int (lua_gc) (lua_State *L, int what, int data); /*
** miscellaneous functions 杂项
*/
LUA_API int (lua_error) (lua_State *L);//生成Lua错误。错误消息(实际上可以是任何类型的Lua值)必须位于堆栈顶部。这个函数执行跳远,因此永远不会返回。
LUA_API int (lua_next) (lua_State *L, int idx);//pairs遍历table时用来取下一个内容的函数.
LUA_API void (lua_concat) (lua_State *L, int n); // 将堆栈顶部的n个值连接起来,弹出它们,并将结果留在顶部
LUA_API void (lua_len) (lua_State *L, int idx);
LUA_API size_t (lua_stringtonumber) (lua_State *L, const char *s);
LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud);
LUA_API void (lua_setallocf) (lua_State *L, lua_Alloc f, void *ud); /**** debug hook功能
Lua5.1开始 提供了较为完善的debug库函数,其中的sethook可以让用户自己设置hook函数来监控程序的某些运行行为,这包括:调用 函数,从函数返回和将要运行新的一行代码,每当这些事件(event)发生时hook函数都会被调用。
*/ typedef struct lua_Debug lua_Debug; /* activation record */
/* Functions to be called by the debugger in specific events */
typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
LUA_API int (lua_getstack) (lua_State *L, int level, lua_Debug *ar);
LUA_API int (lua_getinfo) (lua_State *L, const char *what, lua_Debug *ar);
LUA_API const char *(lua_getlocal) (lua_State *L, const lua_Debug *ar, int n);
LUA_API const char *(lua_setlocal) (lua_State *L, const lua_Debug *ar, int n);
LUA_API const char *(lua_getupvalue) (lua_State *L, int funcindex, int n);
LUA_API const char *(lua_setupvalue) (lua_State *L, int funcindex, int n); LUA_API void *(lua_upvalueid) (lua_State *L, int fidx, int n);
LUA_API void (lua_upvaluejoin) (lua_State *L, int fidx1, int n1,
int fidx2, int n2); LUA_API void (lua_sethook) (lua_State *L, lua_Hook func, int mask, int count);
LUA_API lua_Hook (lua_gethook) (lua_State *L);
LUA_API int (lua_gethookmask) (lua_State *L);
LUA_API int (lua_gethookcount) (lua_State *L);
struct lua_Debug {
int event;
const char *name; /* (n) */
const char *namewhat; /* (n) 'global', 'local', 'field', 'method' */
const char *what; /* (S) 'Lua', 'C', 'main', 'tail' */
const char *source; /* (S) */
int currentline; /* (l) */
int linedefined; /* (S) */
int lastlinedefined; /* (S) */
unsigned char nups; /* (u) number of upvalues */
unsigned char nparams;/* (u) number of parameters */
char isvararg; /* (u) */
char istailcall; /* (t) */
char short_src[LUA_IDSIZE]; /* (S) */
/* private part */
struct CallInfo *i_ci; /* active function */
};

简单的总结一下

lua 提供的函数分为几类

1) 虚拟机对象管理类

2)lua脚本 C++ 虚拟机中  数据传递 转换 比较类

3)虚拟机视角集合维护 及 处理方法

4)线程维护函数

5)钩子 及监控 函数

lua 5.3 英文手册 自己收集整理版的更多相关文章

  1. lua 5.3 英文手册 google机器翻译版

    LUA Lua 5.3参考手册作者:Roberto Ierusalimschy,Luiz Henrique de Figueiredo,Waldemar Celes 版权所有©2015-2018 Lu ...

  2. Markdown 语法手册 (完整整理版)

    http://blog.csdn.net/witnessai1/article/details/52551362

  3. 最常用的PHP正则表达式收集整理

    最常用的PHP正则表达式收集整理 提交 我的评论 加载中 已评论 最常用的PHP正则表达式收集整理 2015-03-20 PHP100中文网 PHP100中文网 PHP100中文网 微信号 功能介绍 ...

  4. [转帖]PKI技术原理(收集 整理 归纳)

    PKI技术原理(收集 整理 归纳) https://blog.51cto.com/3layer/20430 总结归纳的 灰常好.. 7layer关注8人评论39427人阅读2007-03-14 11: ...

  5. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

    [原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http: ...

  6. Lua 5.1 参考手册

    Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes 云风 译 www.codingno ...

  7. 超常用的PHP正则表达式收集整理

    以下就是对超常用的PHP正则表达式进行的收集整理,为了方便大家更快更好的掌握php正则表达式. 一.表单验证匹配验证账号,字母开头,允许 5-16 字节,允许字母数字下划线:^[a-zA-Z][a-z ...

  8. amoeba-mysql配置安装(收集整理)

    本文收集整理自: Amoeba搞定mysql主从读写分离 http://blog.chinaunix.net/uid-20639775-id-154600.html Amoeba非常好用的mysql集 ...

  9. JavaScript 正则表达收集整理

    JavaScript 正则表达收集整理 //可为空 /^\s*$/ //密码验证,必须且只含有数字和字母,可以拥有英文符号,6-17位 /(?=.{,})(?=.*\d)(?=.*[a-z])[\x2 ...

随机推荐

  1. [iOS]UIScrollView左右拨动,第二页宽度只有一半问题

    用UIScrollView动态加入新View,而这个View是Xib方式创建,如果设置view的frame,这个view的宽度却只有设置的一半,很奇怪.于是我只设置view的frame的x值,不设置整 ...

  2. [iOS]UIScrollView嵌套内容在左右拨动的时候自动被顶上问题

    遇到的问题是这样的: 适配6+没问题,但是5s就出问题.我UIScrollView嵌套了左侧UIScrollView,右侧UITableView,左右拨动切换,结果5s下拨动之后两边的View都会自动 ...

  3. solr的简单部署:在tomcat中启动slor

    1,首先要下载solr 途径1: 官网网址: http://lucene.apache.org/ 与Lucene的官网是一个 途径2: 下载历史版本的网址: http://archive.apache ...

  4. nodejs中yield的用法?

    nodejs中yield的用法? https://www.zhihu.com/question/32752866?sort=created

  5. zoj1001-A + B Problem

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1 A + B Problem Time Limit: 2 Seconds     ...

  6. Stars URAL - 1028

    就是给你一些星星的坐标,然后求出每个星星的左下角有多少颗星星 题目保证按照Y坐标的顺序给出每个星星的坐标,那么我们就可以说,当输入某个星星的坐标时,此时有多少个星星的横坐标小于它,它左下角就有多少星星 ...

  7. C语言中static修饰符的意义

    在C语言中,static通常有2种含义:1)定义变量的生命周期:2)定义变量或者函数的作用域. 变量的生命周期是指,相对于程序运行的进程生命周期,变量存在的时间段.变量的生命周期由变量的存储类型(位置 ...

  8. 从计算框架MapReduce看Hadoop1.0和2.0的区别

    一.1.0版本 主要由两部分组成:编程模型和运行时环境. 编程模型为用户提供易用的编程接口,用户只需编写串行程序实现函数来实现一个分布式程序,其他如节点间的通信.节点失效,数据切分等,则由运行时环境完 ...

  9. C++ 重载操作符- 02 重载输入输出操作符

    重载输入输出操作符 本篇博客主要介绍两个操作符重载.一个是 <<(输出操作符).一个是 >> (输入操作符) 现在就使用实例来学习:如何重载输入和输出操作符. #include ...

  10. C# WebService中任务处理线程创建子线程后

    protected void WriteLog(string message) { lock (lockObject) { var file = System.IO.File.AppendText(& ...