Hexococos2dx 3.0 ---- uthash 2014-12-12
资料
cocos2dx 里面有很多东西是直接从github上搞过来的,这个自然也是。
为了更好的理解Scheduler,我还是仔细看看uthash的实现吧!
http://troydhanson.github.io/uthash/
https://github.com/troydhanson/uthash
路径
1 | 2d/support/data-support/uthash.h |
用法
现在的话,先是了解如何使用。
1 | #include <stdio.h> /* gets */ |
这个uthash User Guide的一个例子,说明了插入查找删除应该如何如何。
宏列表
便捷宏
这个便捷宏
其实是对通用宏的再次封装。所以要求就来了:
UT_hash_handle
在自定义结构体中的名字必须是hh
- 键的类型只能是
int
,char[]
和void*(指针)
宏 | 参数 |
---|---|
HASH_ADD_INT | (head, keyfield_name, item_ptr) |
HASH_REPLACE_INT | (head, keyfiled_name, item_ptr, replaced_item_ptr) |
HASH_FIND_INT | (head, key_ptr, item_ptr) |
HASH_ADD_STR | (head, keyfield_name, item_ptr) |
HASH_REPLACE_STR | (head, keyfield_name, item_ptr, replaced_item_ptr) |
HASH_FIND_STR | (head, key_ptr, item_ptr) |
HASH_ADD_PTR | (head, keyfield_name, item_ptr) |
HASH_REPLACE_PTR | (head, keyfield_name, item_ptr, replaced_item_ptr) |
HASH_FIND_PTR | (head, key_ptr, item_ptr) |
HASH_DEL | (head, item_ptr) |
HASH_SORT | (head, cmp) |
HASH_COUNT | (head) |
通用宏
这些通用宏
只建议在需要制定非int
,char[]
的键值的时候使用。
宏 | 参数 |
---|---|
HASH_ADD | (hh_name, head, keyfield_name, key_len, item_ptr) |
HASH_ADD_KEYPTR | (hh_name, head, key_ptr, key_len, item_ptr) |
HASH_REPLACE | (hh_name, head, keyfield_name, key_len, item_ptr, replaced_item_ptr) |
HASH_FIND | (hh_name, head, key_ptr, key_len, item_ptr) |
HASH_DELETE | (hh_name, head, item_ptr) |
HASH_SRT | (hh_name, head, cmp) |
HASH_CNT | (hh_name, head) |
HASH_CLEAR | (hh_name, head) |
HASH_SELECT | (dst_hh_name, dst_head, src_hh_name, src_head, condition) |
HASH_ITER | (hh_name, head, item_ptr, tmp_item_ptr) |
HASH_OVERHEAD | (hh_name, head) |
参数说明
hh_name
在结构体中UT_hash_handle
的结构体成员名字。若使用便捷宏
默认是hh
head
结构体头指针变量名
keyfield_name
在结构体中的键的实体名
key_len
键的长度,若键值是int
,则为sizeof(int)
,若为str
,则为strlen(str)
key_ptr
在HASH_FIND中,这是待查找的实体的一个指向结构体的键的类型
的指针,
在HASH_ADD_KEYPTR中,需要这是一个结构体中键的类型
的地址
item_ptr
指向那些待查找、添加、删除的结构体的指针。或者是当前迭代器的指针。
该参数作为HASH_ADD
、HASH_DELETE
的输入,作为HASH_FIND
、HASH_ITER
的输出。
replaced_item_ptr
在使用HASH_REPLACE的时候,作为一个输出参数,指向替换的内容的指针。
cmp
比较函数指针,其中是用到了mergesort
排序
condition
传入一个宏或者函数指针,接受一个指向结构体的void*指针
这个宏或函数需要判断当前结构体是否符合select的条件,根据结果返回一个非零值。