コード例 #1
0
//----------------------------------------------------------------//
void MOAILuaRef::MakeWeak () {

    if ( this->mWeak ) return;
    if ( this->mRef == LUA_NOREF ) return;

    this->mWeak = true;

    if ( MOAILuaRuntime::IsValid ()) {

        MOAILuaRuntime& luaRuntime = MOAILuaRuntime::Get ();
        MOAILuaStateHandle state = luaRuntime.State ();

        luaRuntime.mStrongRefTable.PushRef ( state, this->mRef );
        luaRuntime.mStrongRefTable.Unref ( state, this->mRef );

        this->mRef = luaRuntime.mWeakRefTable.Ref ( state, -1 );
        state.Pop ( 1 );
    }
}
コード例 #2
0
//----------------------------------------------------------------//
void MOAISerializer::WriteTableInits ( USStream& stream ) {

	if ( !this->mTableMap.size ()) return;

	stream.Print ( "\t--Initializing Tables\n" );
	stream.Print ( "\tlocal table\n\n" );

	MOAILuaStateHandle state = MOAILuaRuntime::Get ().State ();

	TableMapIt tableIt = this->mTableMap.begin ();
	for ( ; tableIt != this->mTableMap.end (); ++tableIt ) {
		
		uintptr tableID = tableIt->first;
		stream.Print ( "\ttable = objects [ 0x%08X ]\n", tableID );
		
		MOAILuaRef& tableRef = tableIt->second;
		state.Push ( tableRef );
		this->WriteTableInitializer ( stream, state, -1, "table" );
		state.Pop ( 1 );
		
		stream.Print ( "\n" );
	}
}