source: trunk/src/lua/lua_values.cc @ 466

Last change on this file since 466 was 454, checked in by epyon, 10 years ago
  • math library work
  • glm only referenced in math/common.hh
  • still a lot work to do, but its WURF
File size: 4.2 KB
Line 
1// Copyright (C) 2012-2015 ChaosForge Ltd
2// http://chaosforge.org/
3//
4// This file is part of Nova libraries.
5// For conditions of distribution and use, see copying.txt file in root folder.
6
7#include "nv/lua/lua_values.hh"
8
9#include "nv/lua/lua_raw.hh"
10
11using nv::lua::linteger;
12using nv::lua::lnumber;
13using nv::lua::lunsigned;
14
15int nv::lua::detail::upvalue_index( int i )
16{
17        return lua_upvalueindex(i);
18}
19
20bool nv::lua::detail::is_userdata( lua_State *L, int index, const char* metatable )
21{
22        return luaL_testudata( L, index, metatable ) != 0;
23}
24
25void* nv::lua::detail::raw_check_userdata( lua_State *L, int index, const char* metatable )
26{
27        return luaL_testudata( L, index, metatable );
28}
29
30void* nv::lua::detail::raw_allocate_userdata( lua_State *L, size_t size, const char* metatable )
31{
32        void* result = lua_newuserdata(L, size);
33        luaL_setmetatable( L, metatable );
34        return result;
35}
36
37void nv::lua::detail::pop_and_discard( lua_State *L, int count )
38{
39        lua_pop( L, count );
40}
41
42void nv::lua::detail::push_nil( lua_State *L )
43{
44        lua_pushnil( L );
45}
46
47void nv::lua::detail::push_unsigned( lua_State *L, lunsigned v )
48{
49        lua_pushunsigned( L, v );
50}
51
52void nv::lua::detail::push_integer ( lua_State *L, linteger v )
53{
54        lua_pushinteger( L, v );
55}
56
57void nv::lua::detail::push_number  ( lua_State *L, lnumber v )
58{
59        lua_pushnumber( L, v );
60}
61
62void nv::lua::detail::push_bool    ( lua_State *L, bool v )
63{
64        lua_pushboolean( L, v );
65}
66
67void nv::lua::detail::push_string_view( lua_State *L, string_view s )
68{
69        lua_pushlstring( L, s.data(), s.size() );
70}
71
72void nv::lua::detail::push_pointer ( lua_State *L, void* p )
73{
74        lua_pushlightuserdata( L, p );
75}
76
77void nv::lua::detail::push_ref_object ( lua_State *L, ref object )
78{
79        lua_rawgeti( L, LUA_REGISTRYINDEX, object.get() );
80}
81
82
83lunsigned   nv::lua::detail::to_unsigned( lua_State *L, int index )
84{
85        return lua_tounsigned( L, index );
86}
87
88linteger    nv::lua::detail::to_integer ( lua_State *L, int index )
89{
90        return lua_tointeger( L, index );
91}
92
93lnumber     nv::lua::detail::to_number  ( lua_State *L, int index )
94{
95        return lua_tonumber( L, index );
96}
97
98bool        nv::lua::detail::to_bool    ( lua_State *L, int index )
99{
100        return lua_toboolean( L, index ) != 0;
101}
102
103nv::string_view nv::lua::detail::to_string_view( lua_State *L, int index )
104{
105        size_t length = 0;
106        const char* result = lua_tolstring( L, index, &length );
107        return string_view( result, length );
108}
109
110void*       nv::lua::detail::to_pointer ( lua_State *L, int index )
111{
112        return lua_touserdata( L, index );
113}
114
115void* nv::lua::detail::to_ref_object  ( lua_State *L, int index )
116{
117        void* o = nullptr;
118        if ( lua_istable( L , index ) )
119        {
120                lua_pushstring( L, "__ptr" );
121                lua_rawget( L, index );
122                if ( lua_isuserdata( L, -1 ) )
123                {
124                        o = lua_touserdata( L, -1 );
125                }
126                lua_pop( L, 1 );
127        }
128        return o;
129}
130
131lunsigned   nv::lua::detail::to_unsigned( lua_State *L, int index, lunsigned def )
132{
133        return ( lua_type( L, index ) == LUA_TNUMBER ? lua_tounsigned( L, index ) : def );
134}
135
136linteger    nv::lua::detail::to_integer ( lua_State *L, int index, linteger def )
137{
138        return ( lua_type( L, index ) == LUA_TNUMBER ? lua_tointeger( L, index ) : def );
139}
140
141lnumber     nv::lua::detail::to_number  ( lua_State *L, int index, lnumber def )
142{
143        return ( lua_type( L, index ) == LUA_TNUMBER ? lua_tonumber( L, index ) : def );
144}
145
146bool        nv::lua::detail::to_bool    ( lua_State *L, int index, bool def )
147{
148        return ( lua_type( L, index ) == LUA_TBOOLEAN ? lua_toboolean( L, index ) != 0 : def );
149}
150
151nv::string_view nv::lua::detail::to_string_view( lua_State *L, int index, string_view def )
152{
153        return ( lua_type( L, index ) == LUA_TSTRING ? nlua_tostringview( L, index ) : def );
154}
155
156void*       nv::lua::detail::to_pointer ( lua_State *L, int index, void* def )
157{
158        return ( lua_type( L, index ) == LUA_TUSERDATA ? lua_touserdata( L, index ) : def );
159}
160
161void* nv::lua::detail::to_ref_object( lua_State *L, int index, void* def )
162{
163        void* o = def;
164        if ( lua_istable( L , index ) )
165        {
166                lua_pushliteral( L, "__ptr" );
167                lua_rawget( L, index );
168                if ( lua_isuserdata( L, -1 ) )
169                {
170                        o = lua_touserdata( L, -1 );
171                }
172                lua_pop( L, 1 );
173        }
174        return o;
175}
Note: See TracBrowser for help on using the repository browser.