码迷,mamicode.com
首页 > 其他好文 > 详细

cocos lua 绑定感悟---各种表

时间:2015-08-19 20:28:39      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:

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。


版权声明:本文为博主原创文章,未经博主允许不得转载。

cocos lua 绑定感悟---各种表

标签:

原文地址:http://blog.csdn.net/mydreamremindme/article/details/47785193

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!