본문 바로가기

프로그래밍/API

luaL_renewtable() - 테이블 복제

가끔 lua 스크립터를 사용할때 table을 복제할 필요가 있다.

이때 사용하면 좋은 방법을 소개한다.

// ti: 복제한 table이 위치한 stack 위치
int luaL_renewtable( lua_State *L, int ti)
{
 lua_newtable( L); {
  int ni = lua_gettop( L);


  for ( lua_pushnil( L); lua_next( L, ti); lua_pop( L, 1))
  {
   lua_pushvalue( L, -2); { /* key */
    switch (lua_type( L, -2))
    {
     default        : lua_pushvalue( L, -2); break; /* value */
     case LUA_TTABLE: luaL_renewtable( L, lua_gettop(L) - 1);
    }
   } lua_rawset( L, ni);
  }
 } return 1;
}


을 사용해 table을 복제할수 있다. 해당 table에 저장된 모든 데이터가 복제 된다.
단, userdata는 포인터만 복제되므로 userdata에 연결된 데이터는 공유됨을 잊지말라~