Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/cmake/src/tolua/tolua_to.c @ 1122

Last change on this file since 1122 was 1122, checked in by rgrieder, 17 years ago

merged trunk into cmake branch

File size: 3.0 KB
Line 
1/* tolua: funcitons to convert to C types
2** Support code for Lua bindings.
3** Written by Waldemar Celes
4** TeCGraf/PUC-Rio
5** Apr 2003
6** $Id: $
7*/
8
9/* This code is free software; you can redistribute it and/or modify it.
10** The software provided hereunder is on an "as is" basis, and
11** the author has no obligation to provide maintenance, support, updates,
12** enhancements, or modifications.
13*/
14
15#include "tolua++.h"
16
17#include <string.h>
18#include <stdlib.h>
19
20TOLUA_API double tolua_tonumber (lua_State* L, int narg, double def)
21{
22 return lua_gettop(L)<abs(narg) ? def : lua_tonumber(L,narg);
23}
24
25TOLUA_API const char* tolua_tostring (lua_State* L, int narg, const char* def)
26{
27 return lua_gettop(L)<abs(narg) ? def : lua_tostring(L,narg);
28}
29
30TOLUA_API void* tolua_touserdata (lua_State* L, int narg, void* def)
31{
32       
33        /* return lua_gettop(L)<abs(narg) ? def : lua_touserdata(L,narg); */
34
35        if (lua_gettop(L)<abs(narg)) {
36                return def;
37        };
38         
39        if (lua_islightuserdata(L, narg)) {
40       
41                return lua_touserdata(L,narg);
42        };
43       
44        return tolua_tousertype(L, narg, def);
45}
46
47extern int push_table_instance(lua_State* L, int lo);
48
49TOLUA_API void* tolua_tousertype (lua_State* L, int narg, void* def)
50{
51 if (lua_gettop(L)<abs(narg))
52  return def;
53 else
54 {
55  void* u;
56  if (!lua_isuserdata(L, narg)) {
57          if (!push_table_instance(L, narg)) return NULL;
58  };
59  u = lua_touserdata(L,narg);
60  return (u==NULL) ? NULL : *((void**)u); /* nil represents NULL */
61 }
62}
63
64TOLUA_API int tolua_tovalue (lua_State* L, int narg, int def)
65{
66 return lua_gettop(L)<abs(narg) ? def : narg;
67}
68
69TOLUA_API int tolua_toboolean (lua_State* L, int narg, int def)
70{
71 return lua_gettop(L)<abs(narg) ?  def : lua_toboolean(L,narg);
72}
73
74TOLUA_API double tolua_tofieldnumber (lua_State* L, int lo, int index, double def)
75{
76 double v;
77 lua_pushnumber(L,index);
78 lua_gettable(L,lo);
79 v = lua_isnil(L,-1) ? def : lua_tonumber(L,-1);
80 lua_pop(L,1);
81 return v;
82}
83
84TOLUA_API const char* tolua_tofieldstring
85(lua_State* L, int lo, int index, const char* def)
86{
87 const char* v;
88 lua_pushnumber(L,index);
89 lua_gettable(L,lo);
90 v = lua_isnil(L,-1) ? def : lua_tostring(L,-1);
91 lua_pop(L,1);
92 return v;
93}
94
95TOLUA_API void* tolua_tofielduserdata (lua_State* L, int lo, int index, void* def)
96{
97 void* v;
98 lua_pushnumber(L,index);
99 lua_gettable(L,lo);
100 v = lua_isnil(L,-1) ? def : lua_touserdata(L,-1);
101 lua_pop(L,1);
102 return v;
103}
104
105TOLUA_API void* tolua_tofieldusertype (lua_State* L, int lo, int index, void* def)
106{
107 void* v;
108 lua_pushnumber(L,index);
109 lua_gettable(L,lo);
110 v = lua_isnil(L,-1) ? def : (*(void **)(lua_touserdata(L, -1))); /* lua_unboxpointer(L,-1); */
111 lua_pop(L,1);
112 return v;
113}
114
115TOLUA_API int tolua_tofieldvalue (lua_State* L, int lo, int index, int def)
116{
117 int v;
118 lua_pushnumber(L,index);
119 lua_gettable(L,lo);
120 v = lua_isnil(L,-1) ? def : lo;
121 lua_pop(L,1);
122 return v;
123}
124
125TOLUA_API int tolua_getfieldboolean (lua_State* L, int lo, int index, int def)
126{
127 int v;
128 lua_pushnumber(L,index);
129 lua_gettable(L,lo);
130 v = lua_isnil(L,-1) ? 0 : lua_toboolean(L,-1);
131 lua_pop(L,1);
132 return v;
133}
Note: See TracBrowser for help on using the repository browser.