Lua中C API栈操作
2020-12-13 03:43
标签:style blog color 使用 数据 cti 向栈中压入数据: 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 比如可以定义 所以完全是可以利用lua_type来自行定义对栈中元素的验证的。 获取栈中元素的类型的字符串表示: lua_typename(lua_State*, int )这里的int值是通过lua_type()获取到的值 其实这些都可以通过lua_type(lua_State*)来进行实现 这样就可以实现你自己的栈元素类型的字符串显示了 获取指定位置的元素可以使用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栈操作,搜素材,soscw.com Lua中C API栈操作 标签:style blog color 使用 数据 cti 原文地址:http://www.cnblogs.com/coder-zhang/p/3816638.html bool lua_is_number (lua_State* L, int index) {
return lua_type(L, index) == LUA_TNUMBER ? true : false;
}
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;
}