Ignore:
Timestamp:
06/19/14 02:22:56 (11 years ago)
Author:
epyon
Message:
  • lua::ref lightweight wrapper class
  • allows distinction from int for templates
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lua/lua_state.cc

    r263 r265  
    328328}
    329329
    330 lua::reference lua::state::register_object( void* o, const char* lua_name )
    331 {
    332         if ( o == nullptr ) return ref_none;
     330lua::ref lua::state::register_object( void* o, const char* lua_name )
     331{
     332        if ( o == nullptr ) return lua::ref( lua::ref::none );
    333333        stack_guard guard( this );
    334334        lua_getglobal( m_state, lua_name );
     
    338338        }
    339339        deep_pointer_copy( -1, o );
    340         return luaL_ref( m_state, LUA_REGISTRYINDEX );
    341 }
    342 
    343 lua::reference lua::state::register_proto( const char* id, const char* storage )
     340        return lua::ref( luaL_ref( m_state, LUA_REGISTRYINDEX ) );
     341}
     342
     343lua::ref lua::state::register_proto( const char* id, const char* storage )
    344344{
    345345        stack_guard guard( this );
     
    354354                NV_THROW( runtime_error, std::string( id ) + " not found in " + std::string( storage ) + " storage!" );
    355355        }
    356         return luaL_ref( m_state, LUA_REGISTRYINDEX );
     356        return lua::ref( luaL_ref( m_state, LUA_REGISTRYINDEX ) );
    357357}
    358358
     
    369369}
    370370
    371 void lua::state::unregister_object( reference object_index )
    372 {
    373         if ( object_index == ref_nil ) return;
     371void lua::state::unregister_object( ref object_index )
     372{
     373        if ( !object_index.is_valid() ) return;
    374374        stack_guard guard( this );
    375         lua_rawgeti( m_state, LUA_REGISTRYINDEX, object_index );
     375        lua_rawgeti( m_state, LUA_REGISTRYINDEX, object_index.get() );
    376376        lua_pushstring( m_state, "__ptr" );
    377377        lua_pushboolean( m_state, false );
    378378        lua_rawset( m_state, -3 );
    379379        lua_pop( m_state, 1 );
    380         luaL_unref( m_state, LUA_REGISTRYINDEX, object_index );
     380        luaL_unref( m_state, LUA_REGISTRYINDEX, object_index.get() );
    381381}
    382382
     
    419419}
    420420
    421 void nv::lua::state::store_metadata( reference object_index, const std::string& metaname, void* pointer )
    422 {
    423         if ( object_index == ref_nil ) return;
    424         lua_rawgeti( m_state, LUA_REGISTRYINDEX, object_index );
     421void nv::lua::state::store_metadata( ref object_index, const std::string& metaname, void* pointer )
     422{
     423        if ( !object_index.is_valid() ) return;
     424        lua_rawgeti( m_state, LUA_REGISTRYINDEX, object_index.get() );
    425425        lua_pushstring( m_state, metaname.c_str() );
    426426        lua_pushlightuserdata( m_state, pointer );
Note: See TracChangeset for help on using the changeset viewer.