/*
** 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. CMDB-客户端

    配置文件的设置 大体思路: 1,通过开始文件将用户配置信息的文件放置到环境变量中. 2,在lib文件中的config文件中,从环境变量中获取到用户的配置,通过importlib模块导入用户配置文件,通 ...

  2. 利用Fiddler对Android模拟器网络请求进行抓包

    安装使用Fiddler 下载安装Fiddler的方法这里就略过了,一路Next就行了.装好之后运行软件,正常情况这个时候我们已经可以对电脑的网络请求进行抓包了.Fiddler默认的代理地址是127.0 ...

  3. Python入门之 字符串操作,占位符,比较大小 等

    Python  字符串 常用的操作 切片 左包括右不包括的原则 ________________ 比较字符串大小 eg: cmp("a",'b')   -1第一个比第二个小  0 ...

  4. 【原】Mac下统计任意文件夹中代码行数的工

    [链接][原]Mac下统计任意文件夹中代码行数的工http://www.cnblogs.com/wengzilin/p/4580646.html

  5. PHP异常处理详解

      PHP异常处理详解 异常处理(又称为错误处理)功能提供了处理程序运行时出现的错误或异常情况的方法. 异常处理通常是防止未知错误产生所采取的处理措施.异常处理的好处是你不用再绞尽脑汁去考虑各种错误, ...

  6. 如何安装Zend Studio 以及汉化和基本准备工作

    昨天从早上一直弄到晚上10点,可累死我了,网上的资料都是掺次不齐,所以我写一篇系统点的文章来告诉大家怎么做. 1.如果你想进行一套PHP系统的开发,肯定是要有“尚方宝剑”的,这个尚方宝剑就是PHP工具 ...

  7. Linux系统profile、bashrc、bash_profile等环境设置文件的使用

    一.前言 关于bash的环境设置文件,分为系统设置和个人设置,一般来说建议用户直接修改个人的设置. 本文测试环境为:centos6.5. 二.系统设置值 1. /etc/sysconfig/i18n ...

  8. leetcode BFS解题思路

    Word Ladder 思路一:单向bfs, 使用visited数组记录哪些已经访问过了, 访问过的就不允许再次入队, 同时这里想到的是使用26个英文字母,枚举可能的取值, 类似brute force ...

  9. transform详解

    1.简介 该算法用于实行容器元素的变换操作.有如下两个使用原型,一个将迭代器区间[first,last)中元素,执行一元函数对象op操作,交换后的结果放在[result,result+(last-fi ...

  10. Mosquitto 单向SSL配置

    Mosquitto 单向SSL配置 摘自:https://blog.csdn.net/a_bcd_123/article/details/70167833 2017年04月14日 06:56:06 s ...