当前位置: 首页>>代码示例>>C++>>正文


C++ HandleTable::remove方法代码示例

本文整理汇总了C++中HandleTable::remove方法的典型用法代码示例。如果您正苦于以下问题:C++ HandleTable::remove方法的具体用法?C++ HandleTable::remove怎么用?C++ HandleTable::remove使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在HandleTable的用法示例。


在下文中一共展示了HandleTable::remove方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: Table

dmz::Handle *
dmz::lua_create_handle (lua_State *L, const Handle Value) {

   LUA_START_VALIDATE (L);

   Handle *result = 0;

   if (Value) {

      HandleTable *ht (get_handle_table (L));
      lua_pushlightuserdata (L, (void *)&LuaHandleTableKey);
      lua_rawget (L, LUA_REGISTRYINDEX);
      const int Table (lua_gettop (L));

      if (lua_istable (L, Table) && ht) {

         int *indexPtr = ht->lookup (Value);

         if (indexPtr) {

            lua_rawgeti (L, Table, *indexPtr);
            result = (Handle *)lua_touserdata (L, -1);
            if (!result) { lua_pop (L, 1); }
            else if (*result != Value) {

               lua_pop (L, 1); // pop invalid Handle;
               result = 0;
            }
         }

         if (!result) {

            if (indexPtr && ht->remove (Value)) { delete indexPtr; indexPtr = 0; }

            result = (Handle *)lua_newuserdata (L, sizeof (Handle));

            if (result) {

               lua_pushvalue (L, -1);
               int index = luaL_ref (L, Table);

               indexPtr = new int (index);

               if (!ht->store (Value, indexPtr)) { delete indexPtr; indexPtr = 0; }

               *result = Value;

               luaL_getmetatable (L, HandleName);
               lua_setmetatable (L, -2);
            }
         }
      }

      lua_remove (L, Table); // Remove Table;
   }

   if (!result) { lua_pushnil (L); }

   LUA_END_VALIDATE (L, 1);

   return result;
}
开发者ID:Andais,项目名称:dmz,代码行数:62,代码来源:dmzLuaKernelHandle.cpp


注:本文中的HandleTable::remove方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。