- 论坛徽章:
- 0
|
原帖由 ivek_troll 于 2007-6-27 21:23 发表
大概的思路是把模板范型用void*来代替,很多C++的编译处理的东西都变成C的运行时处理,虽说达不到STL那样完美,但也算提供C语言下的一个容器算法库。
不知道这样一个只面向C语言用的库有没有人会用阿?
想先 ...
c的模板就是用宏来实现的...呵呵
看看BSD内核的sys/tree.h就知道了
- /* Splay with either the minimum or the maximum element \
- * Used to find minimum or maximum element in tree. \
- */ \
- void name##_SPLAY_MINMAX(struct name *head, int __comp) \
- { \
- struct type __node, *__left, *__right, *__tmp; \
- \
- SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\
- __left = __right = &__node; \
- \
- while (1) { \
- if (__comp < 0) { \
- __tmp = SPLAY_LEFT((head)->sph_root, field); \
- if (__tmp == NULL) \
- break; \
- if (__comp < 0){ \
- SPLAY_ROTATE_RIGHT(head, __tmp, field); \
- if (SPLAY_LEFT((head)->sph_root, field) == NULL)\
- break; \
- } \
- SPLAY_LINKLEFT(head, __right, field); \
- } else if (__comp > 0) { \
- __tmp = SPLAY_RIGHT((head)->sph_root, field); \
- if (__tmp == NULL) \
- break; \
- if (__comp > 0) { \
- SPLAY_ROTATE_LEFT(head, __tmp, field); \
- if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\
- break; \
- } \
- SPLAY_LINKRIGHT(head, __left, field); \
- } \
- } \
- SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \
- }
复制代码
[ 本帖最后由 redor 于 2007-6-29 09:18 编辑 ] |
|