1:tolua_super
tolua_super存在于注册表中,其中记录了各种类型的父类,key是类型的table,value是也是个<v_key,v_value>的表,v_key是父类的名字,value是1。在判断类型的时候,这个非常有用。
2:tolua_ubox
在注册表中和每种类型的表中都存在这样一张表,注册表是在 toluafix_open 中初始化的,而每种类型的tolua_ubox表示在该注册该类型的时候初始化的,请参考setbox函数,它要么是父类的tolua_ubox表,要么是重新创建一个新的弱值表,其中记录了ptr-->userdata,每当生成一个C++对象的时候,会生成一个lua层面的userdata,当下次压入时且类型是当前类型的子类,那么会去更新userdata的metatable为子类表
3:TOLUA_REFID_PTR_MAPPING,TOLUA_REFID_TYPE_MAPPING,TOLUA_VALUE_ROOT
这三个总是同时进行更新的,refid_ptr_map是id-->ptr的映射表,refid_type_map是id-->type的映射表,value_root_map是一个userdata-->ptr的映射表。在C++对象生成的时候,会对这三个表进行插入操作,当移除C++对象的时候会对这三个表进行删除操作。 这三个 表不是弱表
4:userdata
userdata是lua层面上的C++对象,它其实是个指针,指向的是真正C++对象的地址。userdata是在生成C++对象的时候压入到lua栈中的,详细 参考:tolua_pushusertype_internal,并且会把这个C++对象类型的表设置为userdata的元表,这个其实很有用。在判断lua传递数据到C++的userdata类型的时候,可以通过它的metatable,再根据metatable去注册表中拿到type,type就是它注册的C++类型。详细请参考
tolua_push.tolua_pushusertype_internal。
版权声明:本文为博主原创文章,未经博主允许不得转载。