first commit
This commit is contained in:
commit
f02530e13e
2 changed files with 267 additions and 0 deletions
174
tinybindings.cpp
Normal file
174
tinybindings.cpp
Normal file
|
|
@ -0,0 +1,174 @@
|
|||
#include <tiny/tdf.h>
|
||||
#include <lua5.1/lua.h>
|
||||
#include <lua5.1/lualib.h>
|
||||
#include <lua5.1/lauxlib.h>
|
||||
|
||||
#define TDFLUASTART (lua_State*L) { tiny::TDF_FILE*file=(tiny::TDF_FILE*)lua_touserdata(L,1); std::vector<std::string>path;\
|
||||
int n=lua_gettop(L); for(int i=2;i<=n;i++){ path.push_back(luaL_checkstring(L,i)); }try{
|
||||
|
||||
#define TDFLUAEND }catch(tiny::TDF_ERR&e){lua_pushnil(L);lua_pushstring(L,e.what());return 2;}return 1;}
|
||||
|
||||
|
||||
#define TDFLUASETSTART (lua_State*L) { tiny::TDF_FILE*file=(tiny::TDF_FILE*)lua_touserdata(L,1); std::vector<std::string>path;\
|
||||
int n=lua_gettop(L);for(int i=2;i<n;i++){ path.push_back(luaL_checkstring(L,i)); }try{
|
||||
|
||||
#define TDFLUASETEND return 0; }catch(tiny::TDF_ERR&e){lua_pushstring(L,e.what());lua_error(L);return 0; }}
|
||||
|
||||
|
||||
static int luatdfread(lua_State*L){
|
||||
const char*filepath=luaL_checkstring(L,1);
|
||||
tiny::TDF_FILE*file=new tiny::TDF_FILE();
|
||||
file->filepath=(char*)filepath;
|
||||
try{
|
||||
file->read();
|
||||
lua_pushlightuserdata(L,file);
|
||||
return 1;
|
||||
}catch(tiny::TDF_ERR&e){
|
||||
lua_pushnil(L);
|
||||
lua_pushstring(L,e.what());
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
static int luatdfsave(lua_State*L){
|
||||
tiny::TDF_FILE*file=(tiny::TDF_FILE*)lua_touserdata(L,1);
|
||||
file->save();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int luatdfclose(lua_State*L){
|
||||
tiny::TDF_FILE*file=(tiny::TDF_FILE*)lua_touserdata(L,1);
|
||||
file->close();
|
||||
delete file;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//get
|
||||
|
||||
|
||||
static int luatdfgetint
|
||||
TDFLUASTART int val=file->getint(path); lua_pushinteger(L,val); TDFLUAEND
|
||||
|
||||
static int luatdfgetfloat
|
||||
TDFLUASTART float val=file->getfloat(path); lua_pushnumber(L,val); TDFLUAEND
|
||||
|
||||
static int luatdfgetstring
|
||||
TDFLUASTART std::string val=file->getstring(path); lua_pushstring(L,val.c_str()); TDFLUAEND
|
||||
|
||||
static int luatdfgetbool
|
||||
TDFLUASTART bool val=file->getbool(path); lua_pushboolean(L,val); TDFLUAEND
|
||||
|
||||
static int luatdfgetchar
|
||||
TDFLUASTART char val=file->getchar(path); char str[2]={val,0}; lua_pushstring(L,str); TDFLUAEND
|
||||
|
||||
static int luatdfgetpointer
|
||||
TDFLUASTART std::vector<std::string>val=file->getpointer(path); lua_newtable(L); for(size_t i=0;i<val.size();i++){ lua_pushstring(L,val[i].c_str()); lua_rawseti(L,-2,i+1);} TDFLUAEND
|
||||
|
||||
static int luatdfgetclass
|
||||
TDFLUASTART boost::unordered_map<std::string,tiny::TDF_DATA>*val=file->getclass(path); lua_pushlightuserdata(L,val); TDFLUAEND
|
||||
|
||||
|
||||
//set
|
||||
|
||||
|
||||
static int luatdfsetint
|
||||
TDFLUASETSTART int val=luaL_checkinteger(L,n); file->setint(path,val); TDFLUASETEND
|
||||
|
||||
static int luatdfsetfloat
|
||||
TDFLUASETSTART float val=luaL_checknumber(L,n); file->setfloat(path,val); TDFLUASETEND
|
||||
|
||||
static int luatdfsetstring
|
||||
TDFLUASETSTART const char*val=luaL_checkstring(L,n); file->setstring(path,val); TDFLUASETEND
|
||||
|
||||
static int luatdfsetblock
|
||||
TDFLUASETSTART const char*val=luaL_checkstring(L,n); file->setblock(path,val); TDFLUASETEND
|
||||
|
||||
static int luatdfsetbool
|
||||
TDFLUASETSTART bool val=lua_toboolean(L,n); file->setbool(path,val); TDFLUASETEND
|
||||
|
||||
static int luatdfsetchar
|
||||
TDFLUASETSTART const char*str=luaL_checkstring(L,n); file->setchar(path,str[0]); TDFLUASETEND
|
||||
|
||||
|
||||
|
||||
static int luatdfdefined(lua_State*L){
|
||||
tiny::TDF_FILE*file=(tiny::TDF_FILE*)lua_touserdata(L,1);
|
||||
std::vector<std::string>path;
|
||||
int n=lua_gettop(L);
|
||||
for(int i=2;i<=n;i++){
|
||||
path.push_back(luaL_checkstring(L,i));
|
||||
}
|
||||
bool val=file->defined(path);
|
||||
lua_pushboolean(L,val);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
static int luatdfsetpointer(lua_State*L){
|
||||
tiny::TDF_FILE*file=(tiny::TDF_FILE*)lua_touserdata(L,1);
|
||||
std::vector<std::string>path;
|
||||
int n=lua_gettop(L);
|
||||
for(int i=2;i<n;i++){
|
||||
path.push_back(luaL_checkstring(L,i));
|
||||
}
|
||||
luaL_checktype(L,n,LUA_TTABLE);
|
||||
std::vector<std::string>val;
|
||||
int len=lua_objlen(L,n);
|
||||
for(int i=1;i<=len;i++){
|
||||
lua_rawgeti(L,n,i);
|
||||
val.push_back(luaL_checkstring(L,-1));
|
||||
lua_pop(L,1);
|
||||
}
|
||||
try{
|
||||
file->setpointer(path,val);
|
||||
return 0;
|
||||
}catch(tiny::TDF_ERR&e){
|
||||
lua_pushstring(L,e.what());
|
||||
lua_error(L);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int luatdfdefine(lua_State*L){
|
||||
tiny::TDF_FILE*file=(tiny::TDF_FILE*)lua_touserdata(L,1);
|
||||
luaL_checktype(L,2,LUA_TTABLE);
|
||||
const char*name=luaL_checkstring(L,3);
|
||||
std::vector<std::string>defines;
|
||||
int len=lua_objlen(L,2);
|
||||
for(int i=1;i<=len;i++){
|
||||
lua_rawgeti(L,2,i);
|
||||
defines.push_back(luaL_checkstring(L,-1));
|
||||
lua_pop(L,1);
|
||||
}
|
||||
file->define(defines,(char*)name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const luaL_Reg tdflib[]={
|
||||
{"read",luatdfread},
|
||||
{"close",luatdfclose},
|
||||
{"getint",luatdfgetint},
|
||||
{"getfloat",luatdfgetfloat},
|
||||
{"getstring",luatdfgetstring},
|
||||
{"getbool",luatdfgetbool},
|
||||
{"getchar",luatdfgetchar},
|
||||
{"getpointer",luatdfgetpointer},
|
||||
{"getclass",luatdfgetclass},
|
||||
{"defined",luatdfdefined},
|
||||
{"setint",luatdfsetint},
|
||||
{"setfloat",luatdfsetfloat},
|
||||
{"setstring",luatdfsetstring},
|
||||
{"setblock",luatdfsetblock},
|
||||
{"setbool",luatdfsetbool},
|
||||
{"setchar",luatdfsetchar},
|
||||
{"setpointer",luatdfsetpointer},
|
||||
{"define",luatdfdefine},
|
||||
{"save",luatdfsave},
|
||||
{NULL,NULL}
|
||||
};
|
||||
|
||||
extern "C" int luaopentdf(lua_State*L){
|
||||
luaL_register(L,"tdf",tdflib);
|
||||
return 1;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue