- Timestamp:
- 08/19/13 07:42:00 (12 years ago)
- Location:
- trunk/src/lua
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lua/lua_area.cc
r206 r207 11 11 #include "nv/random.hh" 12 12 13 static const char* NLUA_AREA_METATABLE = "area"; 14 15 bool nlua_is_area( lua_State* L, int index ) 16 { 17 return luaL_testudata( L, index, NLUA_AREA_METATABLE ) != 0; 18 } 19 20 nv::rectangle nlua_to_area( lua_State* L, int index ) 21 { 22 return *(nv::rectangle*)luaL_checkudata( L, index, NLUA_AREA_METATABLE ); 23 } 24 25 nv::rectangle* nlua_to_parea( lua_State* L, int index ) 26 { 27 return (nv::rectangle*)luaL_checkudata( L, index, NLUA_AREA_METATABLE ); 28 } 29 30 void nlua_push_area( lua_State* L, const nv::rectangle& v ) 31 { 32 new (lua_newuserdata(L, sizeof(nv::rectangle))) nv::rectangle(v); 33 luaL_setmetatable( L, NLUA_AREA_METATABLE ); 34 } 13 const char* nv::lua::detail::AREA_METATABLE = "area"; 14 15 using nv::lua::detail::is_coord; 16 using nv::lua::detail::to_coord; 17 using nv::lua::detail::to_pcoord; 18 using nv::lua::detail::push_coord; 19 20 using nv::lua::detail::is_area; 21 using nv::lua::detail::to_area; 22 using nv::lua::detail::to_parea; 23 using nv::lua::detail::push_area; 35 24 36 25 static void nlua_area_construct( lua_State* L, int sidx ) 37 26 { 38 if ( nlua_is_coord( L, sidx ) )39 { 40 if ( nlua_is_coord( L, sidx+1 ) )27 if ( is_coord( L, sidx ) ) 28 { 29 if ( is_coord( L, sidx+1 ) ) 41 30 { 42 nv::rectangle a( nlua_to_coord( L, sidx ), nlua_to_coord( L, sidx+1 ) );43 nlua_push_area( L, a );31 nv::rectangle a( to_coord( L, sidx ), to_coord( L, sidx+1 ) ); 32 push_area( L, a ); 44 33 return; 45 34 } … … 51 40 nv::ivec2( lua_tointeger( L, sidx+2 ), lua_tointeger( L, sidx+3 ) ) 52 41 ); 53 nlua_push_area( L, a );42 push_area( L, a ); 54 43 } 55 44 … … 69 58 static int nlua_area_eq( lua_State* L ) 70 59 { 71 lua_pushboolean( L, nlua_to_area( L, 1 ) == nlua_to_area( L, 2 ) );60 lua_pushboolean( L, to_area( L, 1 ) == to_area( L, 2 ) ); 72 61 return 1; 73 62 } … … 75 64 static int nlua_area_get( lua_State* L ) 76 65 { 77 nv::rectangle r( nlua_to_area( L, 1 ) );78 nlua_push_coord( L, r.ul );79 nlua_push_coord( L, r.lr );66 nv::rectangle r( to_area( L, 1 ) ); 67 push_coord( L, r.ul ); 68 push_coord( L, r.lr ); 80 69 return 2; 81 70 } … … 83 72 static int nlua_area_clone( lua_State* L ) 84 73 { 85 nlua_push_area( L, *nlua_to_parea( L, 1 ) );74 push_area( L, *to_parea( L, 1 ) ); 86 75 return 1; 87 76 } … … 89 78 static int nlua_area_index( lua_State* L ) 90 79 { 91 nv::rectangle* a = nlua_to_parea( L, 1 );80 nv::rectangle* a = to_parea( L, 1 ); 92 81 std::size_t l; 93 82 const char* index = lua_tolstring( L, 2, &l ); 94 83 if ( l == 1 && index[0] == 'a' ) 95 84 { 96 nlua_push_coord( L, a->ul );85 push_coord( L, a->ul ); 97 86 } 98 87 else if ( l == 1 && index[0] == 'b' ) 99 88 { 100 nlua_push_coord( L, a->lr );89 push_coord( L, a->lr ); 101 90 } 102 91 else … … 111 100 static int nlua_area_newindex( lua_State* L ) 112 101 { 113 nv::rectangle* a = nlua_to_parea( L, 1 );102 nv::rectangle* a = to_parea( L, 1 ); 114 103 std::size_t l; 115 104 const char* index = lua_tolstring( L, 2, &l ); 116 nv::ivec2 value( nlua_to_coord( L, 3 ) );105 nv::ivec2 value( to_coord( L, 3 ) ); 117 106 if ( l == 1 && index[0] == 'a' ) 118 107 { … … 128 117 static int lua_area_coords_closure( lua_State* L ) 129 118 { 130 nv::rectangle* a( nlua_to_parea( L, lua_upvalueindex(1) ) );131 nv::ivec2* c( nlua_to_pcoord( L, lua_upvalueindex(2) ) );119 nv::rectangle* a( to_parea( L, lua_upvalueindex(1) ) ); 120 nv::ivec2* c( to_pcoord( L, lua_upvalueindex(2) ) ); 132 121 133 122 c->x++; … … 144 133 } 145 134 146 nlua_push_coord( L, *c );135 push_coord( L, *c ); 147 136 return 1; 148 137 } … … 150 139 static int nlua_area_coords( lua_State* L ) 151 140 { 152 nv::rectangle* a( nlua_to_parea( L, 1 ) );141 nv::rectangle* a( to_parea( L, 1 ) ); 153 142 nv::ivec2 c( a->ul ); 154 143 c.x--; 155 nlua_push_coord( L, c );144 push_coord( L, c ); 156 145 lua_pushcclosure( L, lua_area_coords_closure, 2 ); 157 146 return 1; … … 160 149 static int nlua_area_edges_closure( lua_State* L ) 161 150 { 162 nv::rectangle* a( nlua_to_parea( L, lua_upvalueindex(1) ) );163 nv::ivec2* c( nlua_to_pcoord( L, lua_upvalueindex(2) ) );151 nv::rectangle* a( to_parea( L, lua_upvalueindex(1) ) ); 152 nv::ivec2* c( to_pcoord( L, lua_upvalueindex(2) ) ); 164 153 165 154 c->x++; … … 178 167 179 168 180 nlua_push_coord( L, *c );169 push_coord( L, *c ); 181 170 return 1; 182 171 } … … 184 173 static int nlua_area_edges( lua_State* L ) 185 174 { 186 nv::rectangle* a( nlua_to_parea( L, 1 ) );175 nv::rectangle* a( to_parea( L, 1 ) ); 187 176 nv::ivec2 c( a->ul ); 188 177 c.x--; 189 nlua_push_coord( L, c );178 push_coord( L, c ); 190 179 lua_pushcclosure( L, nlua_area_edges_closure, 2 ); 191 180 return 1; … … 203 192 static int nlua_area_corners( lua_State* L ) 204 193 { 205 nv::rectangle* a = nlua_to_parea( L, 1 );194 nv::rectangle* a = to_parea( L, 1 ); 206 195 207 196 lua_createtable(L, 4, 0); 208 nlua_push_coord( L, a->ul );197 push_coord( L, a->ul ); 209 198 lua_rawseti( L, -2, 1 ); 210 nlua_push_coord( L, a->ur() );199 push_coord( L, a->ur() ); 211 200 lua_rawseti( L, -2, 2 ); 212 nlua_push_coord( L, a->ll() );201 push_coord( L, a->ll() ); 213 202 lua_rawseti( L, -2, 3 ); 214 nlua_push_coord( L, a->lr );203 push_coord( L, a->lr ); 215 204 lua_rawseti( L, -2, 4 ); 216 205 … … 222 211 static int nlua_area_shrink( lua_State* L ) 223 212 { 224 nv::rectangle* a = nlua_to_parea( L, 1 );213 nv::rectangle* a = to_parea( L, 1 ); 225 214 a->shrink( static_cast< int >( lua_tointeger( L, 2 ) ) ); 226 215 return 0; … … 229 218 static int nlua_area_shrinked( lua_State* L ) 230 219 { 231 nv::rectangle* a = nlua_to_parea( L, 1 );232 nlua_push_area( L, a->shrinked( static_cast< int >( lua_tointeger( L, 2 ) ) ) );220 nv::rectangle* a = to_parea( L, 1 ); 221 push_area( L, a->shrinked( static_cast< int >( lua_tointeger( L, 2 ) ) ) ); 233 222 return 1; 234 223 } … … 236 225 static int nlua_area_expand( lua_State* L ) 237 226 { 238 nv::rectangle* a = nlua_to_parea( L, 1 );227 nv::rectangle* a = to_parea( L, 1 ); 239 228 a->expand( static_cast< int >( lua_tointeger( L, 2 ) ) ); 240 229 return 0; … … 243 232 static int nlua_area_expanded( lua_State* L ) 244 233 { 245 nv::rectangle* a = nlua_to_parea( L, 1 );246 nlua_push_area( L, a->expanded( static_cast< int >( lua_tointeger( L, 2 ) ) ) );234 nv::rectangle* a = to_parea( L, 1 ); 235 push_area( L, a->expanded( static_cast< int >( lua_tointeger( L, 2 ) ) ) ); 247 236 return 1; 248 237 } … … 250 239 static int nlua_area_clamp( lua_State* L ) 251 240 { 252 nv::rectangle* a1 = nlua_to_parea( L, 1 );253 nv::rectangle* a2 = nlua_to_parea( L, 2 );241 nv::rectangle* a1 = to_parea( L, 1 ); 242 nv::rectangle* a2 = to_parea( L, 2 ); 254 243 a1->clamp_to( *a2 ); 255 244 return 0; … … 258 247 static int nlua_area_clamped( lua_State* L ) 259 248 { 260 nv::rectangle a1 = nlua_to_area( L, 1 );261 nv::rectangle* a2 = nlua_to_parea( L, 2 );249 nv::rectangle a1 = to_area( L, 1 ); 250 nv::rectangle* a2 = to_parea( L, 2 ); 262 251 a1.clamp_to( *a2 ); 263 nlua_push_area( L, a1 );252 push_area( L, a1 ); 264 253 return 1; 265 254 } … … 267 256 static int nlua_area_clamp_coord( lua_State* L ) 268 257 { 269 nv::rectangle* a = nlua_to_parea( L, 1 );270 nv::ivec2* c = nlua_to_pcoord( L, 2 );258 nv::rectangle* a = to_parea( L, 1 ); 259 nv::ivec2* c = to_pcoord( L, 2 ); 271 260 *c = glm::clamp( *c, a->ul, a->lr ); 272 261 return 0; … … 275 264 static int nlua_area_clamped_coord( lua_State* L ) 276 265 { 277 nv::rectangle* a = nlua_to_parea( L, 1 );278 nv::ivec2* c = nlua_to_pcoord( L, 2 );279 nlua_push_coord( L, glm::clamp( *c, a->ul, a->lr ) );266 nv::rectangle* a = to_parea( L, 1 ); 267 nv::ivec2* c = to_pcoord( L, 2 ); 268 push_coord( L, glm::clamp( *c, a->ul, a->lr ) ); 280 269 return 0; 281 270 } … … 283 272 static int nlua_area_fix( lua_State* L ) 284 273 { 285 nv::rectangle* a = nlua_to_parea( L, 1 );274 nv::rectangle* a = to_parea( L, 1 ); 286 275 if ( a->ul.x > a->lr.x ) a->ul.x = a->lr.x; 287 276 if ( a->ul.y > a->lr.y ) a->ul.y = a->lr.y; … … 291 280 static int nlua_area_proper( lua_State* L ) 292 281 { 293 nv::rectangle* a = nlua_to_parea( L, 1 );282 nv::rectangle* a = to_parea( L, 1 ); 294 283 lua_pushboolean( L, a->ul.x <= a->lr.x && a->ul.y <= a->lr.y ); 295 284 return 1; … … 298 287 static int nlua_area_dim( lua_State* L ) 299 288 { 300 nv::rectangle* a = nlua_to_parea( L, 1 );301 nlua_push_coord( L, a->ul - a->lr + nv::ivec2(1,1) );289 nv::rectangle* a = to_parea( L, 1 ); 290 push_coord( L, a->ul - a->lr + nv::ivec2(1,1) ); 302 291 return 1; 303 292 } … … 305 294 static int nlua_area_size( lua_State* L ) 306 295 { 307 nv::rectangle* a = nlua_to_parea( L, 1 );296 nv::rectangle* a = to_parea( L, 1 ); 308 297 lua_pushinteger( L, a->get_enclosed_area() ); 309 298 return 1; … … 312 301 static int nlua_area_contains( lua_State* L ) 313 302 { 314 lua_pushboolean( L, nlua_to_parea( L, 1 )->contains( nlua_to_coord( L, 2 ) ) );303 lua_pushboolean( L, to_parea( L, 1 )->contains( to_coord( L, 2 ) ) ); 315 304 return 1; 316 305 } … … 318 307 static int nlua_area_is_edge( lua_State* L ) 319 308 { 320 nv::rectangle a = nlua_to_area( L, 1 );321 nv::ivec2 c = nlua_to_coord( L, 2 );309 nv::rectangle a = to_area( L, 1 ); 310 nv::ivec2 c = to_coord( L, 2 ); 322 311 lua_pushboolean( L, a.contains( c ) && ( c.x == a.ul.x || c.x == a.lr.x || c.y == a.ul.y || c.y == a.lr.y ) ); 323 312 return 1; … … 326 315 static int nlua_area_around( lua_State* L ) 327 316 { 328 nv::ivec2 c = nlua_to_coord( L, 1 );317 nv::ivec2 c = to_coord( L, 1 ); 329 318 int amount = static_cast< int >( lua_tointeger( L, 1 ) ); 330 319 nv::ivec2 shift( amount, amount ); 331 nlua_push_area( L, nv::rectangle( c - shift, c + shift ) );320 push_area( L, nv::rectangle( c - shift, c + shift ) ); 332 321 return 1; 333 322 } … … 335 324 static int nlua_area_tostring( lua_State* L ) 336 325 { 337 nv::rectangle a = nlua_to_area( L, 1 );326 nv::rectangle a = to_area( L, 1 ); 338 327 std::string s = "("; 339 328 s += nv::to_string(a.ul.x); … … 351 340 static int nlua_area_random_edge_coord( lua_State* L ) 352 341 { 353 nv::rectangle area = nlua_to_area( L, 1 );342 nv::rectangle area = to_area( L, 1 ); 354 343 nv::ivec2 a = area.ul; 355 344 nv::ivec2 b = area.lr; … … 368 357 result = ( roll < ys ) ? nv::ivec2( a.x, a.y + roll + 1 ) : nv::ivec2( b.x, a.y + roll - ys + 1); 369 358 } 370 nlua_push_coord( L, result );359 push_coord( L, result ); 371 360 return 1; 372 361 } … … 374 363 static int nlua_area_random_inner_edge_coord( lua_State* L ) 375 364 { 376 nv::rectangle area = nlua_to_area( L, 1 );365 nv::rectangle area = to_area( L, 1 ); 377 366 nv::ivec2 a = area.ul; 378 367 nv::ivec2 b = area.lr; … … 391 380 result = ( roll < ys ) ? nv::ivec2( a.x, a.y + roll + 1 ) : nv::ivec2( b.x, a.y + roll - ys + 1); 392 381 } 393 nlua_push_coord( L, result );382 push_coord( L, result ); 394 383 return 1; 395 384 } … … 397 386 static int nlua_area_random_coord( lua_State* L ) 398 387 { 399 nv::rectangle area = nlua_to_area( L, 1 );400 nlua_push_coord( L, nv::random::get().range( area.ul, area.lr ) );388 nv::rectangle area = to_area( L, 1 ); 389 push_coord( L, nv::random::get().range( area.ul, area.lr ) ); 401 390 return 1; 402 391 } … … 404 393 static int nlua_area_random_subarea( lua_State* L ) 405 394 { 406 nv::rectangle area = nlua_to_area( L, 1 );407 nv::ivec2 dim = nlua_to_coord( L, 2 );395 nv::rectangle area = to_area( L, 1 ); 396 nv::ivec2 dim = to_coord( L, 2 ); 408 397 nv::ivec2 start = nv::random::get().range( area.ul, area.lr - dim ); 409 nlua_push_area( L, nv::rectangle( start, start + dim ) );398 push_area( L, nv::rectangle( start, start + dim ) ); 410 399 return 1; 411 400 } … … 466 455 }; 467 456 468 luaL_newmetatable( L, NLUA_AREA_METATABLE );457 luaL_newmetatable( L, nv::lua::detail::AREA_METATABLE ); 469 458 nlua_register( L, nlua_area_m, -1 ); 470 459 lua_createtable( L, 0, 0 ); … … 481 470 } 482 471 483 void n lua_register_area( lua_State* L )472 void nv::lua::register_area( lua_State* L ) 484 473 { 485 474 int stack = lua_gettop( L ); -
trunk/src/lua/lua_aux.cc
r204 r207 138 138 }; 139 139 140 void n lua_register_aux( lua_State* L )140 void nv::lua::register_aux( lua_State* L ) 141 141 { 142 142 nlua_register( L, "table", nluaaux_table_aux_f ); -
trunk/src/lua/lua_glm.cc
r177 r207 13 13 static size_t nlua_swizzel_lookup[256]; 14 14 15 using nv::lua::detail::is_vec; 16 using nv::lua::detail::to_vec; 17 using nv::lua::detail::to_pvec; 18 using nv::lua::detail::push_vec; 19 15 20 inline bool nlua_is_swizzel( const unsigned char* str, size_t max ) 16 21 { … … 42 47 static inline T construct( lua_State* L, int index ) { 43 48 if ( lua_type( L, index ) == LUA_TUSERDATA ) 44 return nlua_to_vec<T>( L, index );49 return to_vec<T>( L, index ); 45 50 else 46 51 return T( lua_tonumber( L, index ), lua_tonumber( L, index + 1 ) ); … … 54 59 if ( lua_type( L, index ) == LUA_TUSERDATA ) 55 60 { 56 if ( nlua_is_vec<T>( L, index ) )57 return nlua_to_vec<T>( L, index );61 if ( is_vec<T>( L, index ) ) 62 return to_vec<T>( L, index ); 58 63 else 59 return T( nlua_to_vec<vec2>( L, index ), lua_tonumber( L, index + 1 ) );64 return T( to_vec<vec2>( L, index ), lua_tonumber( L, index + 1 ) ); 60 65 } 61 66 else 62 67 { 63 68 if ( lua_type( L, index+1 ) == LUA_TUSERDATA ) 64 return T( lua_tonumber( L, index ), nlua_to_vec<vec2>( L, index+1 ) );69 return T( lua_tonumber( L, index ), to_vec<vec2>( L, index+1 ) ); 65 70 else 66 71 return T( lua_tonumber( L, index ), lua_tonumber( L, index + 1 ), lua_tonumber( L, index + 2 ) ); … … 76 81 if ( lua_type( L, index ) == LUA_TUSERDATA ) 77 82 { 78 if ( nlua_is_vec<T>( L, index ) )79 return nlua_to_vec<T>( L, index );83 if ( is_vec<T>( L, index ) ) 84 return to_vec<T>( L, index ); 80 85 else 81 86 { 82 if ( nlua_is_vec<vec3>( L, index ) )83 return T( nlua_to_vec<vec3>( L, index ), lua_tonumber( L, index + 1 ) );87 if ( is_vec<vec3>( L, index ) ) 88 return T( to_vec<vec3>( L, index ), lua_tonumber( L, index + 1 ) ); 84 89 else 85 90 { 86 91 if ( lua_type( L, index+1 ) == LUA_TUSERDATA ) 87 return T( nlua_to_vec<vec2>( L, index ), nlua_to_vec<vec2>( L, index + 1 ) );92 return T( to_vec<vec2>( L, index ), to_vec<vec2>( L, index + 1 ) ); 88 93 else 89 return T( nlua_to_vec<vec2>( L, index ), lua_tonumber( L, index + 1 ), lua_tonumber( L, index + 2 ) );94 return T( to_vec<vec2>( L, index ), lua_tonumber( L, index + 1 ), lua_tonumber( L, index + 2 ) ); 90 95 } 91 96 } … … 95 100 if ( lua_type( L, index+1 ) == LUA_TUSERDATA ) 96 101 { 97 if ( nlua_is_vec<vec3>( L, index+1 ) )98 return T( lua_tonumber( L, index ), nlua_to_vec<vec3>( L, index+1 ) );102 if ( is_vec<vec3>( L, index+1 ) ) 103 return T( lua_tonumber( L, index ), to_vec<vec3>( L, index+1 ) ); 99 104 else 100 return T( lua_tonumber( L, index ), nlua_to_vec<vec2>( L, index+1 ), lua_tonumber( L, index + 2 ) );105 return T( lua_tonumber( L, index ), to_vec<vec2>( L, index+1 ), lua_tonumber( L, index + 2 ) ); 101 106 } 102 107 else 103 108 { 104 109 if ( lua_type( L, index+2 ) == LUA_TUSERDATA ) 105 return T( lua_tonumber( L, index ), lua_tonumber( L, index + 1 ), nlua_to_vec<vec2>( L, index+2 ) );110 return T( lua_tonumber( L, index ), lua_tonumber( L, index + 1 ), to_vec<vec2>( L, index+2 ) ); 106 111 else 107 112 return T( lua_tonumber( L, index ), lua_tonumber( L, index + 1 ), lua_tonumber( L, index + 2 ), lua_tonumber( L, index + 3 ) ); … … 114 119 int nlua_vec_new( lua_State* L ) 115 120 { 116 nlua_push_vec<T>( L, nlua_vec_constructor<T,sizeof( T ) / sizeof( typename T::value_type )>::construct( L, 1 ) );121 push_vec<T>( L, nlua_vec_constructor<T,sizeof( T ) / sizeof( typename T::value_type )>::construct( L, 1 ) ); 117 122 return 1; 118 123 } … … 121 126 int nlua_vec_random( lua_State* L ) 122 127 { 123 nlua_push_vec<T>( L, nv::random::get().range( nlua_to_vec<T>( L, 1 ), nlua_to_vec<T>( L, 2 ) ) );128 push_vec<T>( L, nv::random::get().range( to_vec<T>( L, 1 ), to_vec<T>( L, 2 ) ) ); 124 129 return 1; 125 130 } … … 128 133 int nlua_vec_clone( lua_State* L ) 129 134 { 130 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) );135 push_vec<T>( L, to_vec<T>( L, 1 ) ); 131 136 return 1; 132 137 } … … 135 140 int nlua_vec_call( lua_State* L ) 136 141 { 137 nlua_push_vec<T>( L, nlua_vec_constructor<T,sizeof( T ) / sizeof( typename T::value_type )>::construct( L, 2 ) );142 push_vec<T>( L, nlua_vec_constructor<T,sizeof( T ) / sizeof( typename T::value_type )>::construct( L, 2 ) ); 138 143 return 1; 139 144 } … … 142 147 static int nlua_vec_unm( lua_State* L ) 143 148 { 144 nlua_push_vec<T>( L, -nlua_to_vec<T>( L, 1 ) );149 push_vec<T>( L, -to_vec<T>( L, 1 ) ); 145 150 return 1; 146 151 } … … 150 155 { 151 156 if ( lua_type( L, 1 ) == LUA_TNUMBER ) 152 nlua_push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) + nlua_to_vec<T>( L, 2 ) );157 push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) + to_vec<T>( L, 2 ) ); 153 158 else 154 159 if ( lua_type( L, 2 ) == LUA_TNUMBER ) 155 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) + (typename T::value_type)(lua_tonumber( L, 2 )) );156 else 157 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) + nlua_to_vec<T>( L, 2 ) );160 push_vec<T>( L, to_vec<T>( L, 1 ) + (typename T::value_type)(lua_tonumber( L, 2 )) ); 161 else 162 push_vec<T>( L, to_vec<T>( L, 1 ) + to_vec<T>( L, 2 ) ); 158 163 return 1; 159 164 } … … 163 168 { 164 169 if ( lua_type( L, 1 ) == LUA_TNUMBER ) 165 nlua_push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) - nlua_to_vec<T>( L, 2 ) );170 push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) - to_vec<T>( L, 2 ) ); 166 171 else 167 172 if ( lua_type( L, 2 ) == LUA_TNUMBER ) 168 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) - (typename T::value_type)(lua_tonumber( L, 2 )) );169 else 170 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) - nlua_to_vec<T>( L, 2 ) );173 push_vec<T>( L, to_vec<T>( L, 1 ) - (typename T::value_type)(lua_tonumber( L, 2 )) ); 174 else 175 push_vec<T>( L, to_vec<T>( L, 1 ) - to_vec<T>( L, 2 ) ); 171 176 return 1; 172 177 } … … 176 181 { 177 182 if ( lua_type( L, 1 ) == LUA_TNUMBER ) 178 nlua_push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) * nlua_to_vec<T>( L, 2 ) );183 push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) * to_vec<T>( L, 2 ) ); 179 184 else 180 185 if ( lua_type( L, 2 ) == LUA_TNUMBER ) 181 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) * (typename T::value_type)(lua_tonumber( L, 2 )) );182 else 183 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) * nlua_to_vec<T>( L, 2 ) );186 push_vec<T>( L, to_vec<T>( L, 1 ) * (typename T::value_type)(lua_tonumber( L, 2 )) ); 187 else 188 push_vec<T>( L, to_vec<T>( L, 1 ) * to_vec<T>( L, 2 ) ); 184 189 return 1; 185 190 } … … 189 194 { 190 195 if ( lua_type( L, 1 ) == LUA_TNUMBER ) 191 nlua_push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) / nlua_to_vec<T>( L, 2 ) );196 push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) / to_vec<T>( L, 2 ) ); 192 197 else 193 198 if ( lua_type( L, 2 ) == LUA_TNUMBER ) 194 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) / (typename T::value_type)(lua_tonumber( L, 2 )) );195 else 196 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) / nlua_to_vec<T>( L, 2 ) );199 push_vec<T>( L, to_vec<T>( L, 1 ) / (typename T::value_type)(lua_tonumber( L, 2 )) ); 200 else 201 push_vec<T>( L, to_vec<T>( L, 1 ) / to_vec<T>( L, 2 ) ); 197 202 return 1; 198 203 } … … 201 206 int nlua_vec_eq( lua_State* L ) 202 207 { 203 lua_pushboolean( L, nlua_to_vec<T>( L, 1 ) == nlua_to_vec<T>( L, 2 ) );208 lua_pushboolean( L, to_vec<T>( L, 1 ) == to_vec<T>( L, 2 ) ); 204 209 return 1; 205 210 } … … 208 213 int nlua_vec_get( lua_State* L ) 209 214 { 210 T v = nlua_to_vec<T>( L, 1 );215 T v = to_vec<T>( L, 1 ); 211 216 for ( size_t i = 0; i < v.length(); ++i ) 212 217 { … … 219 224 int nlua_vec_index( lua_State* L ) 220 225 { 221 T* v = nlua_to_pvec<T>( L, 1 );226 T* v = to_pvec<T>( L, 1 ); 222 227 size_t len = 0; 223 228 size_t vlen = v->length(); … … 237 242 { 238 243 switch (len) { 239 case 2 : nlua_push_vec( L, glm::detail::tvec2<typename T::value_type>( (*v)[nlua_swizzel_lookup[key[0]]], (*v)[nlua_swizzel_lookup[key[1]]] ) ); return 1;240 case 3 : nlua_push_vec( L, glm::detail::tvec3<typename T::value_type>( (*v)[nlua_swizzel_lookup[key[0]]], (*v)[nlua_swizzel_lookup[key[1]]], (*v)[nlua_swizzel_lookup[key[2]]] ) ); return 1;241 case 4 : nlua_push_vec( L, glm::detail::tvec4<typename T::value_type>( (*v)[nlua_swizzel_lookup[key[0]]], (*v)[nlua_swizzel_lookup[key[1]]], (*v)[nlua_swizzel_lookup[key[2]]], (*v)[nlua_swizzel_lookup[key[3]]] ) ); return 1;244 case 2 : push_vec( L, glm::detail::tvec2<typename T::value_type>( (*v)[nlua_swizzel_lookup[key[0]]], (*v)[nlua_swizzel_lookup[key[1]]] ) ); return 1; 245 case 3 : push_vec( L, glm::detail::tvec3<typename T::value_type>( (*v)[nlua_swizzel_lookup[key[0]]], (*v)[nlua_swizzel_lookup[key[1]]], (*v)[nlua_swizzel_lookup[key[2]]] ) ); return 1; 246 case 4 : push_vec( L, glm::detail::tvec4<typename T::value_type>( (*v)[nlua_swizzel_lookup[key[0]]], (*v)[nlua_swizzel_lookup[key[1]]], (*v)[nlua_swizzel_lookup[key[2]]], (*v)[nlua_swizzel_lookup[key[3]]] ) ); return 1; 242 247 default: break; 243 248 } … … 257 262 typedef glm::detail::tvec4<typename T::value_type> vec4; 258 263 259 T* v = nlua_to_pvec<T>( L, 1 );264 T* v = to_pvec<T>( L, 1 ); 260 265 size_t len = 0; 261 266 size_t vlen = v->length(); … … 274 279 { 275 280 switch (len) { 276 case 2 : { vec2 v2 = nlua_to_vec<vec2>(L,3); for (size_t i = 0; i<len; ++i) (*v)[nlua_swizzel_lookup[key[i]]] = v2[i]; } return 0;277 case 3 : { vec3 v3 = nlua_to_vec<vec3>(L,3); for (size_t i = 0; i<len; ++i) (*v)[nlua_swizzel_lookup[key[i]]] = v3[i]; } return 0;278 case 4 : { vec4 v4 = nlua_to_vec<vec4>(L,3); for (size_t i = 0; i<len; ++i) (*v)[nlua_swizzel_lookup[key[i]]] = v4[i]; } return 0;281 case 2 : { vec2 v2 = to_vec<vec2>(L,3); for (size_t i = 0; i<len; ++i) (*v)[nlua_swizzel_lookup[key[i]]] = v2[i]; } return 0; 282 case 3 : { vec3 v3 = to_vec<vec3>(L,3); for (size_t i = 0; i<len; ++i) (*v)[nlua_swizzel_lookup[key[i]]] = v3[i]; } return 0; 283 case 4 : { vec4 v4 = to_vec<vec4>(L,3); for (size_t i = 0; i<len; ++i) (*v)[nlua_swizzel_lookup[key[i]]] = v4[i]; } return 0; 279 284 default: break; 280 285 } … … 286 291 static int nlua_vec_tostring( lua_State* L ) 287 292 { 288 T v = nlua_to_vec<T>( L, 1 );293 T v = to_vec<T>( L, 1 ); 289 294 std::string s = "("; 290 295 for ( size_t i = 0; i < v.length(); ++i ) … … 332 337 }; 333 338 334 luaL_newmetatable( L, n lua_metatable_name<T>() );339 luaL_newmetatable( L, nv::lua::detail::glm_metatable_name<T>() ); 335 340 nlua_register( L, nlua_vec_m, -1 ); 336 341 lua_createtable( L, 0, 0 ); … … 345 350 lua_setmetatable( L, -2 ); 346 351 347 n lua_push_vec( L, T() );352 nv::lua::detail::push_vec( L, T() ); 348 353 lua_setfield( L, -2, "ZERO" ); 349 n lua_push_vec( L, nlua_vec_constructor<T,sizeof( T ) / sizeof( typename T::value_type )>::unit() );354 nv::lua::detail::push_vec( L, nlua_vec_constructor<T,sizeof( T ) / sizeof( typename T::value_type )>::unit() ); 350 355 lua_setfield( L, -2, "UNIT" ); 351 356 return 1; 352 357 } 353 358 354 void n lua_register_glm( lua_State* L )359 void nv::lua::register_glm( lua_State* L ) 355 360 { 356 361 for (size_t i = 0; i < 256; ++i ) nlua_swizzel_lookup[i] = 255; -
trunk/src/lua/lua_map_area.cc
r206 r207 47 47 // } 48 48 49 bool n lua_is_map_area( lua_State* L, int index )49 bool nv::lua::detail::is_map_area( lua_State* L, int index ) 50 50 { 51 51 return luaL_testudata( L, index, NLUA_MAP_AREA_METATABLE ) != 0; 52 52 } 53 53 54 nv::map_area* n lua_to_map_area( lua_State* L, int index )54 nv::map_area* nv::lua::detail::to_map_area( lua_State* L, int index ) 55 55 { 56 56 if ( lua_type( L, index ) == LUA_TTABLE ) … … 75 75 } 76 76 77 void nlua_push_map_area( lua_State* L, nv::map_area* c ) 77 using nv::lua::detail::is_map_area; 78 using nv::lua::detail::to_map_area; 79 using nv::lua::detail::push_map_area; 80 81 using nv::lua::detail::is_coord; 82 using nv::lua::detail::to_coord; 83 using nv::lua::detail::to_pcoord; 84 using nv::lua::detail::push_coord; 85 86 using nv::lua::detail::is_area; 87 using nv::lua::detail::to_area; 88 using nv::lua::detail::to_parea; 89 using nv::lua::detail::push_area; 90 91 void nv::lua::detail::push_map_area( lua_State* L, nv::map_area* c ) 78 92 { 79 93 nv::map_area** pm = (nv::map_area**) (lua_newuserdata(L, sizeof(nv::map_area*))); … … 91 105 static int nlua_map_area_gc( lua_State* L ) 92 106 { 93 nv::map_area* ma = nlua_to_map_area( L, 1 );107 nv::map_area* ma = to_map_area( L, 1 ); 94 108 if ( ma != nullptr ) 95 109 { … … 101 115 static int nlua_map_area_get_area( lua_State* L ) 102 116 { 103 nv::map_area* ma = nlua_to_map_area( L, 1 );117 nv::map_area* ma = to_map_area( L, 1 ); 104 118 nv::rectangle r = ma->get_rectangle(); 105 119 r.lr.x -= 1; 106 120 r.lr.y -= 1; 107 nlua_push_area( L, r );121 push_area( L, r ); 108 122 return 1; 109 123 } … … 111 125 static int nlua_map_area_get_shift( lua_State* L ) 112 126 { 113 nv::map_area* ma = nlua_to_map_area( L, 1 );114 nlua_push_coord( L, ma->get_shift() );127 nv::map_area* ma = to_map_area( L, 1 ); 128 push_coord( L, ma->get_shift() ); 115 129 return 1; 116 130 } … … 118 132 static int nlua_map_area_get_size( lua_State* L ) 119 133 { 120 nv::map_area* ma = nlua_to_map_area( L, 1 );121 nlua_push_coord( L, ma->get_size() );134 nv::map_area* ma = to_map_area( L, 1 ); 135 push_coord( L, ma->get_size() ); 122 136 return 1; 123 137 } … … 125 139 static int nlua_map_area_get_cell( lua_State* L ) 126 140 { 127 nv::map_area* ma = nlua_to_map_area( L, 1 );128 lua_pushstring( L, ma->id_to_string( ma->get_cell( nlua_to_coord( L, 2 ) ) ).c_str() );141 nv::map_area* ma = to_map_area( L, 1 ); 142 lua_pushstring( L, ma->id_to_string( ma->get_cell( to_coord( L, 2 ) ) ).c_str() ); 129 143 return 1; 130 144 } … … 132 146 static int nlua_map_area_set_cell( lua_State* L ) 133 147 { 134 nv::map_area* ma = nlua_to_map_area( L, 1 );135 ma->set_cell( nlua_to_coord( L, 2 ), nlua_to_cell_id( L, 3, ma ) );148 nv::map_area* ma = to_map_area( L, 1 ); 149 ma->set_cell( to_coord( L, 2 ), nlua_to_cell_id( L, 3, ma ) ); 136 150 return 0; 137 151 } … … 139 153 static int nlua_map_area_raw_get_cell( lua_State* L ) 140 154 { 141 nv::map_area* ma = nlua_to_map_area( L, 1 );142 lua_pushunsigned( L, ma->get_cell( nlua_to_coord( L, 2 ) ) );155 nv::map_area* ma = to_map_area( L, 1 ); 156 lua_pushunsigned( L, ma->get_cell( to_coord( L, 2 ) ) ); 143 157 return 1; 144 158 } … … 146 160 static int nlua_map_area_raw_set_cell( lua_State* L ) 147 161 { 148 nv::map_area* ma = nlua_to_map_area( L, 1 );149 ma->set_cell( nlua_to_coord( L, 2 ), lua_tounsigned( L, 3 ) );162 nv::map_area* ma = to_map_area( L, 1 ); 163 ma->set_cell( to_coord( L, 2 ), lua_tounsigned( L, 3 ) ); 150 164 return 0; 151 165 } … … 153 167 static int nlua_map_area_index( lua_State* L ) 154 168 { 155 nv::map_area* ma = nlua_to_map_area( L, 1 );169 nv::map_area* ma = to_map_area( L, 1 ); 156 170 if ( lua_type( L, 1 ) == LUA_TSTRING ) 157 171 { … … 162 176 else 163 177 { 164 lua_pushunsigned( L, ma->get_cell( nlua_to_coord( L, 2 ) ) );178 lua_pushunsigned( L, ma->get_cell( to_coord( L, 2 ) ) ); 165 179 } 166 180 return 1; … … 169 183 static int nlua_map_area_newindex( lua_State* L ) 170 184 { 171 nv::map_area* ma = nlua_to_map_area( L, 1 );172 ma->set_cell( nlua_to_coord( L, 2 ), lua_tounsigned( L, 3 ) );185 nv::map_area* ma = to_map_area( L, 1 ); 186 ma->set_cell( to_coord( L, 2 ), lua_tounsigned( L, 3 ) ); 173 187 return 0; 174 188 } … … 176 190 static int nlua_map_area_new_sub_area( lua_State* L ) 177 191 { 178 nv::map_area* ma = nlua_to_map_area( L, 1 );179 nlua_push_map_area( L, ma->create_sub_area( nlua_to_area( L, 2 ) ) );192 nv::map_area* ma = to_map_area( L, 1 ); 193 push_map_area( L, ma->create_sub_area( to_area( L, 2 ) ) ); 180 194 return 1; 181 195 } … … 212 226 } 213 227 214 void n lua_register_map_area_interface( lua_State* L, int index )228 void nv::lua::register_map_area_interface( lua_State* L, int index ) 215 229 { 216 230 nlua_register( L, nlua_map_area_f, index ); 217 231 } 218 232 219 void n lua_register_map_area( lua_State* L )233 void nv::lua::register_map_area( lua_State* L ) 220 234 { 221 235 luaopen_map_area(L); -
trunk/src/lua/lua_state.cc
r206 r207 142 142 } 143 143 144 bool lua::state::push( const std::string& path, bool global )145 {146 size_t point = path.find('.');147 148 if (point == std::string::npos)149 {150 if (global)151 {152 lua_getglobal( m_state, path.c_str() );153 }154 else155 {156 lua_getfield( m_state, -1, path.c_str() );157 }158 return !lua_isnil( m_state, -1 );159 }160 161 size_t idx = 0;162 size_t start = 0;163 164 while( point != std::string::npos )165 {166 if (idx == 0)167 {168 if (global)169 {170 lua_getglobal( m_state, path.substr(start,point-start).c_str() );171 }172 else173 {174 lua_getfield( m_state, -1, path.substr(start,point-start).c_str() );175 }176 }177 else178 {179 if ( lua_istable( m_state, -1 ) )180 {181 lua_pushstring( m_state, path.substr(start,point-start).c_str() );182 lua_gettable( m_state, -2 );183 lua_insert( m_state, -2 );184 lua_pop( m_state, 1 );185 }186 else187 {188 lua_pop(m_state, 1);189 lua_pushnil(m_state);190 return false;191 }192 }193 start = point+1;194 point = path.find( '.', start );195 }196 return true;197 }198 199 200 144 int lua::state::get_stack_size() 201 145 { -
trunk/src/lua/lua_values.cc
r206 r207 104 104 } 105 105 106 bool nv::lua::detail::is_userdata( lua_State *L, int index, const char* metatable ) 107 { 108 return luaL_testudata( L, index, metatable ) != 0; 109 } 110 111 void* nv::lua::detail::check_userdata( lua_State *L, int index, const char* metatable ) 112 { 113 return luaL_checkudata( L, index, metatable ); 114 } 115 116 void* nv::lua::detail::allocate_userdata( lua_State *L, size_t size, const char* metatable ) 117 { 118 void* result = lua_newuserdata(L, size); 119 luaL_setmetatable( L, metatable ); 120 return result; 121 } 122 123 void nv::lua::detail::pop_and_discard( lua_State *L, int count ) 124 { 125 lua_pop( L, count ); 126 } 127
Note: See TracChangeset
for help on using the changeset viewer.