Lua中C API栈操作
向栈中压入数据:
lua_pushnil(lua_State*);
lua_pushboolean(lua_State*, bool);
lua_pushnumber(lua_State*, lua_Number);
lua_pushinteger(lua_State*, lua_Integer)
lua_pushlstring(lua_State*, const char*, size_t);
lua_pushstring(lua_State*, const char*);
获取栈中元素的类型
lua_type(lua_State* L, int index);
类型包括 LUA_TNIL, LUA_TBOOLEAN, LUA_TNUMBER, LUA_TSTRING, LUA_TTABLE, LUA_TFUNCTION, LUA_TUSERDATA
验证栈中的元素类型;
lua_is*(lua_State* L, int index)
其实有了lua_type()完全可以自己写类型验证的 每必要使用lua提供的API
比如可以定义
bool lua_is_number (lua_State* L, int index) {
return lua_type(L, index) == LUA_TNUMBER ? true : false;
}
所以完全是可以利用lua_type来自行定义对栈中元素的验证的。
获取栈中元素的类型的字符串表示:
lua_typename(lua_State*, int )这里的int值是通过lua_type()获取到的值
其实这些都可以通过lua_type(lua_State*)来进行实现
const char* lua_type_str(int lua_type) {
static char type[LUA_TYPE_LEN_MAX];
switch (lua_type) {
case LUA_TNIL:
strcpy(type, "nil");
break; case LUA_TBOOLEAN:
strcpy(type, "boolean");
break; case LUA_TNUMBER:
strcpy(type, "number");
break; case LUA_TSTRING:
strcpy(type, "string");
break; case LUA_TTABLE:
strcpy(type, "table");
break; case LUA_TTHREAD:
strcpy(type, "thread");
break; case LUA_TFUNCTION:
strcpy(type, "function");
break; case LUA_TUSERDATA:
strcpy(type, "userdata");
break; default:
strcpy(type, "unknown");
break;
}
return type;
}
这样就可以实现你自己的栈元素类型的字符串显示了
获取指定位置的元素可以使用lua_to*(lua_State*, int )
int lua_toboolean(lua_State*, int);
lua_Number lua_tonumber(lua_State*, int);
lua_Integer lua_tointeger(lua_State*, int );
const char* lua_tolstring(lua_State*, int, size_t length);
lua_gettop(lua_State*) 得到栈中元素的个数
lua_settop(lua_State*, int index)
设置栈中元素的个数,如果设置的值比当前栈中元素的个数多,则将多出的那部分全部丢弃,如果设置的值比当前栈中元素个数多,则将新加的值全部设置为nil.
lua_pushvalue(lua_State*, int index) 将index位置的值的副本压入栈顶
lua_remove(lua_State* L, int index)将指定位置的元素删除,并且其上的所有元素下移
lua_insert(lua_State*, int index) 将指定位置之上的元素上移,空出该位置,并将栈顶元素移到此处
lua_replace(lua_State*, int index)将栈顶元素弹出,并将其设置到指定的索引上。
lua_pop是以一个宏的形式进行定义的
#define lua_pop(L, n) lua_settop(L, -(n) - 1);
比如弹出栈顶的元素则可以使用 lua_pop(L, 1)
Lua中C API栈操作的更多相关文章
- 基于nginx+lua+redis高性能api应用实践
基于nginx+lua+redis高性能api应用实践 前言 比较传统的服务端程序(PHP.FAST CGI等),大多都是通过每产生一个请求,都会有一个进程与之相对应,请求处理完毕后相关进程自动释放. ...
- Lua 中的string库(字符串函数库)总结
(字符串函数库)总结 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-11-20我要评论 这篇文章主要介绍了Lua中的string库(字符串函数库)总结,本文讲解了string库 ...
- Lua中的一些库(1)
[数学库] 数学库(math)由一组标准的数学函数构成.这里主要介绍几个常用的函数,其它的大家可以自行百度解决. 三角函数(sin,cos,tan……)所有的三角函数都使用弧度单位,可以用函数deg( ...
- Lua中的字符串函数库
字符串库中的一些函数是非常简单的: string.len(s) 返回字符串s的长度:string.rep(s, n) 返回重复n次字符串s的串:你使用string.rep( ...
- 引用kernel32.dll中的API来进行串口通讯
串口通讯可以引出kernel32.dll中的API来操作,相关源码如下:using System;using System.Runtime.InteropServices; namespace Tel ...
- lua中得栈
如果你看了LUA的文档,那么就应该很清楚LUA与C交互数据时都是用到LUA中所谓的stack.那么当我调用lua_open函数之后栈是什么样的呢?空的(luaopen_base等会往栈上加进一些东西) ...
- c调用 lua 栈操作
转自https://www.cnblogs.com/ringofthec/archive/2010/10/22/lua.html 打算记录一些lua_api, 可能会觉得lua文档中已经说的很清楚了, ...
- Lua的栈及基本栈操作
Lua的栈及基本栈操作 https://blog.csdn.net/mydriverc2/article/details/51134737 https://blog.csdn.net/mydriver ...
- Lua和C++交互 学习记录之二:栈操作
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
随机推荐
- k3 cloud工程量清单调整后工程量为零行设置为黄色
#引入clr运行库 import clr #添加对cloud插件开发的常用组件的引用 clr.AddReference('Kingdee.BOS') clr.AddReference('Kingdee ...
- wepy的第一个demo
一.在node中安装相应的模块文件,查看文档 二.案例 json部分 { "usingComponents": { "van-button": ".. ...
- 关于使用itext转Html为pdf添加css样式的问题
使用的jar文件 xmlworker-5.5.11.jar itextpdf-5.5.11.jar 下载地址:https://pan.baidu.com/s/1i5AIBvZ 以下为测试代码 pack ...
- 【错误】Publishing to Tomcat'has encountered a problem
tomcat 启动工程时候出现 Publishing to Tomcat'has encountered a problem错误 解决方案 之后重启tomcat 就可以正常启动了
- idea旗舰版续命
首先鼓励大家使用正版!我一直用的是免费的社区版,但发现有一些功能被阉割了,比如weblogbic就不支持,无奈现在的项目要用到这个,只能去下载旗舰版. 旗舰版需要付费,作为程序员的我为了一个临时的项目 ...
- 基础入门Bootstrap
一.CSS样式 1.图片 2.布局.排版(之全局显示) 3.容器-网格-栅格系统 搭建的格式如下 <!DOCTYPE html> <html> <head> < ...
- Java List 类型转换
java的类型转换让人忍不住在开始编码前骂一声 FUCK! 1 子类转父类 up List<SubClass> subs = ...; List<? extends BaseCl ...
- 多组件共享-vuex
1.解决多个组件共享同一状态数据问题1)多个视图共享同一状态2)来自不同视图的触发事件需要变更同一状态文档API:https://vuex.vuejs.org/zh/api/ 2.组件与store连接 ...
- 传统IO拷贝与零拷贝技术比较
1. 传统IO 由上面图知,传统io需要经过4次copy, 3次状态切换 第一次: 从硬盘 经过 DMA 拷贝 到 kernel buffer (内核buferr) 第二次: 从kernel buff ...
- 变量类型,-数据类型(值类型,引用类型)uint 不有存负数,int,可以存负数,
俩种命名方法 1.Pascal 命名法,第一个字母大写其它字母小写Userid 2.Camel命名法,所有单第一方写大写,其它小写,骆峰命名法,userId 程序中元素的命名规范项目名:公司名.项目名 ...