20 lua_pushlstring(l, value.c_str(), value.size());
23 inline void pi_lua_generic_pull(lua_State *l,
int index,
bool &out) { out = lua_toboolean(l, index); }
24 inline void pi_lua_generic_pull(lua_State *l,
int index,
int &out) { out = luaL_checkinteger(l, index); }
25 inline void pi_lua_generic_pull(lua_State *l,
int index,
unsigned int &out) { out = luaL_checkunsigned(l, index); }
26 inline void pi_lua_generic_pull(lua_State *l,
int index,
float &out) { out = luaL_checknumber(l, index); }
27 inline void pi_lua_generic_pull(lua_State *l,
int index,
double &out) { out = luaL_checknumber(l, index); }
28 inline void pi_lua_generic_pull(lua_State *l,
int index,
const char *&out) { out = luaL_checkstring(l, index); }
32 const char *buf = luaL_checklstring(l, index, &len);
33 std::string(buf, len).swap(out);
36 template <
typename Type>
37 inline void LuaPush(lua_State *l, Type value)
42 template <
typename Type>
43 inline typename std::remove_reference<Type>::type
LuaPull(lua_State *l,
int index)
45 typename std::decay<Type>::type value;
51 template <
typename Type>
52 inline Type
LuaPull(lua_State *l,
int index, Type defaultVal)
54 Type value = defaultVal;
55 if (lua_gettop(l) >= index && !lua_isnil(l, index))
62 if (lua_type(l, index) == LUA_TBOOLEAN) {
63 out = lua_toboolean(l, index);
70 if (lua_type(l, index) == LUA_TNUMBER) {
71 out = lua_tointeger(l, index);
78 if (lua_type(l, index) == LUA_TNUMBER) {
79 out = lua_tonumber(l, index);
86 if (lua_type(l, index) == LUA_TNUMBER) {
87 out = lua_tonumber(l, index);
94 if (lua_type(l, index) == LUA_TSTRING) {
95 out = lua_tostring(l, index);
102 if (lua_type(l, index) == LUA_TSTRING) {
104 const char *buf = lua_tolstring(l, index, &len);
105 std::string(buf, len).swap(out);
110 template <
typename... Types>
113 #if defined(_MSC_VER)
114 template <
typename Arg1>
120 template <
typename Arg1,
typename Arg2>
127 template <
typename Arg1,
typename Arg2,
typename Arg3>
135 template <
typename Arg1,
typename Arg2,
typename Arg3,
typename Arg4>
144 template <
typename Head,
typename... Tail>
157 #if defined(_MSC_VER)
158 template <
typename Arg1,
typename Arg2>
161 beg = lua_absindex(l, beg);
166 return std::make_tuple(arg1, arg2);
168 template <
typename Arg1,
typename Arg2,
typename Arg3>
171 beg = lua_absindex(l, beg);
178 return std::make_tuple(arg1, arg2, arg3);
180 template <
typename Arg1,
typename Arg2,
typename Arg3,
typename Arg4>
183 beg = lua_absindex(l, beg);
192 return std::make_tuple(arg1, arg2, arg3, arg4);
197 template <
int _bogus,
typename Head,
typename... Tail>
200 beg = lua_absindex(l, beg);
204 std::tuple<Head> first(hd);
205 return std::tuple_cat(first, rest);
208 template <
int _bogus>
211 return std::tuple<>();
214 template <
typename... Types>
void LuaPush(lua_State *l, Type value)
Definition: LuaPushPull.h:37
std::tuple< Head, Tail... > __helper_pi_lua_multiple_pull(lua_State *l, int beg)
Definition: LuaPushPull.h:198
bool pi_lua_strict_pull(lua_State *l, int index, bool &out)
Definition: LuaPushPull.h:60
std::tuple< Types... > pi_lua_multiple_pull(lua_State *l, int beg)
Definition: LuaPushPull.h:215
std::remove_reference< Type >::type LuaPull(lua_State *l, int index)
Definition: LuaPushPull.h:43
void pi_lua_multiple_push(lua_State *l, Types... args)
void pi_lua_generic_push(lua_State *l, bool value)
Definition: LuaPushPull.h:13
void pi_lua_generic_pull(lua_State *l, int index, bool &out)
Definition: LuaPushPull.h:23