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 ...
随机推荐
- Robot Framework 源码阅读 day1 __main__.py
robot文件夹下的__main__.py函数 是使用module运行时的入口函数: import sys # Allows running as a script. __name__ check n ...
- 2019-8-14-win10-使用-SMB-v1
title author date CreateTime categories win10 使用 SMB v1 lindexi 2019-08-14 08:55:55 +0800 2018-2-13 ...
- Codeforces Round #425 (Div. 2) - D
题目链接:http://codeforces.com/contest/832/problem/D 题意:给定一棵n个点的树,然后给你q个询问,每个询问为三元组(a,b,c),问你从这三个点中选取一个作 ...
- Kettle日志级别
Kettle的日志级别LogLevel分为以下几个: Nothing 没有日志 不显示任何输出 Error 错误日志 仅仅显示错误信息 Minimal 最小日志 使用最小的日志 Basic 基本日志 ...
- Android 播放器开发
GSY https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/USE.md 阿里云播放器 https://helpcdn.aliyun.co ...
- hdu 2815 : Mod Tree 【扩展BSGS】
题目链接 直接用模板好了.实在不行,反正有队友啊~~~~ #include<bits/stdc++.h> using namespace std; typedef long long LL ...
- service pom
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> &l ...
- php strlen()函数 语法
php strlen()函数 语法 作用:返回字符串的长度.大理石平台价格 语法:strlen(string) 参数: 参数 描述 string 必需.规定要检查的字符串. 说明:返回字符串的 ...
- tensorflow2 矩阵乘法问题
tensorflow2再做矩阵相乘的时候如果维度有None,则矩阵相乘结果不对. 也不知道为什么,只能用矩阵对应元素相乘在相加的形式来实现矩阵相乘,这个困扰了我好几天,所以记下来. inputs_ti ...
- Incorporating ASP.NET MVC and SQL Server Reporting Services, Part 2
In the last issue, I introduced you to the basics of incorporating SQL Server Reporting Services int ...