Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/network/src/tolua/tolua_to.c @ 1494

Last change on this file since 1494 was 1494, checked in by rgrieder, 16 years ago
  • set the svn:eol-style property to all files so, that where ever you check out, you'll get the right line endings (had to change every file with mixed endings to windows in order to set the property)
  • Property svn:eol-style set to native
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.