免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ivek_troll
打印 上一主题 下一主题

[C] 想吧STL移植成一个c语言库,先调查调查 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-06-28 22:01 |只看该作者
不好意思,我已经完成了。项目在 http://gforge.osdn.net.cn/projects/ylib/,在C库的基础上我使用C++的模板实现了一个STL,可以解决代码膨胀的问题。测试程序在 tests/test_yc 和 tests/test_ycpp 下,我现在正在写文档,准备推出完整的1.0版。

论坛徽章:
0
22 [报告]
发表于 2007-06-28 23:49 |只看该作者
原帖由 THEBEST 于 2007-6-28 20:40 发表
强烈期待楼主把代码拿出来看看。大家一起努力会更好。


完成了会发布的,本来就开源的

论坛徽章:
0
23 [报告]
发表于 2007-06-28 23:53 |只看该作者
原帖由 phoneix 于 2007-6-28 22:01 发表
不好意思,我已经完成了。项目在 http://gforge.osdn.net.cn/projects/ylib/,在C库的基础上我使用C++的模板实现了一个STL,可以解决代码膨胀的问题。测试程序在 tests/test_yc 和 tests/test_ycpp 下 ...


你的C库我看过,和我的区别还是比较大的,所以我还是要发布我自己的库给大家用

论坛徽章:
0
24 [报告]
发表于 2007-06-29 09:17 |只看该作者
原帖由 ivek_troll 于 2007-6-27 21:23 发表
大概的思路是把模板范型用void*来代替,很多C++的编译处理的东西都变成C的运行时处理,虽说达不到STL那样完美,但也算提供C语言下的一个容器算法库。

不知道这样一个只面向C语言用的库有没有人会用阿?
想先 ...



c的模板就是用宏来实现的...呵呵

看看BSD内核的sys/tree.h就知道了


  1. /* Splay with either the minimum or the maximum element                 \
  2. * Used to find minimum or maximum element in tree.                     \
  3. */                                                                     \
  4. void name##_SPLAY_MINMAX(struct name *head, int __comp) \
  5. {                                                                       \
  6.         struct type __node, *__left, *__right, *__tmp;                  \
  7. \
  8.         SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\
  9.         __left = __right = &__node;                                     \
  10. \
  11.         while (1) {                                                     \
  12.                 if (__comp < 0) {                                       \
  13.                         __tmp = SPLAY_LEFT((head)->sph_root, field);    \
  14.                         if (__tmp == NULL)                              \
  15.                                 break;                                  \
  16.                         if (__comp < 0){                                \
  17.                                 SPLAY_ROTATE_RIGHT(head, __tmp, field); \
  18.                                 if (SPLAY_LEFT((head)->sph_root, field) == NULL)\
  19.                                         break;                          \
  20.                         }                                               \
  21.                         SPLAY_LINKLEFT(head, __right, field);           \
  22.                 } else if (__comp > 0) {                                \
  23.                         __tmp = SPLAY_RIGHT((head)->sph_root, field);   \
  24.                         if (__tmp == NULL)                              \
  25.                                 break;                                  \
  26.                         if (__comp > 0) {                               \
  27.                                 SPLAY_ROTATE_LEFT(head, __tmp, field);  \
  28.                                 if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\
  29.                                         break;                          \
  30.                         }                                               \
  31.                         SPLAY_LINKRIGHT(head, __left, field);           \
  32.                 }                                                       \
  33.         }                                                               \
  34.         SPLAY_ASSEMBLE(head, &__node, __left, __right, field);          \
  35. }

复制代码

[ 本帖最后由 redor 于 2007-6-29 09:18 编辑 ]

论坛徽章:
0
25 [报告]
发表于 2007-06-29 11:23 |只看该作者
我觉得没必要。作练习倒还可以。
我觉得用GLIB就足够了,只是自己还完全不了解。

C去做通用算法时,我觉得最好是使用带类型标记的数据进行运行时判断,而不是静态类型数据。比如用类似guile的SCM类型可能更好理解。

论坛徽章:
0
26 [报告]
发表于 2007-06-29 11:28 |只看该作者
原帖由 redor 于 2007-6-29 09:17 发表



c的模板就是用宏来实现的...呵呵

看看BSD内核的sys/tree.h就知道了

[code]
/* Splay with either the minimum or the maximum element                 \
* Used to find minimum or maximum elem ...


我同意你的看法,在c的世界用宏是很受欢迎的做法,直接嵌在struct里面。
用void *实现的容器并不总能得到认可。

论坛徽章:
0
27 [报告]
发表于 2007-06-29 11:34 |只看该作者
原帖由 redor 于 2007-6-29 09:17 发表



c的模板就是用宏来实现的...呵呵

看看BSD内核的sys/tree.h就知道了

[code]
/* Splay with either the minimum or the maximum element                 \
* Used to find minimum or maximum elem ...



glib我没用过, 我喜欢用bsd的那几个macro文件,

queue.h, tree.h   基本常用的数据结构templete都有了, 没必要自己写啊。十分方便, 一个头文件INCLUDE就OK了。 而且用macro做的, 执行的效率不受影响。

如果是仅仅为了学习, 表示支持, 如果是想做出来给别人用, 反正我是不会用这样的LIB的。。

论坛徽章:
0
28 [报告]
发表于 2007-06-29 12:40 |只看该作者
原帖由 xhl 于 2007-6-29 11:34 发表



glib我没用过, 我喜欢用bsd的那几个macro文件,

queue.h, tree.h   基本常用的数据结构templete都有了, 没必要自己写啊。十分方便, 一个头文件INCLUDE就OK了。 而且用macro做的, 执行的效率不受影 ...


FreeBSD的这个没怎么研究过,我想这个库学起来比较费劲吧?
我可以保证我的库对于一个熟练会用STL的人10分钟就能学会使用。

论坛徽章:
0
29 [报告]
发表于 2007-06-29 12:49 |只看该作者
原帖由 ivek_troll 于 2007-6-29 12:40 发表


FreeBSD的这个没怎么研究过,我想这个库学起来比较费劲吧?
我可以保证我的库对于一个熟练会用STL的人10分钟就能学会使用。

那不又成STL了?我还是比较同意MMMIX的说法,C中还是以C的方式做事,不要掺和C++中的东西

论坛徽章:
0
30 [报告]
发表于 2007-06-29 12:58 |只看该作者
原帖由 cugb_cat 于 2007-6-29 12:49 发表

那不又成STL了?我还是比较同意MMMIX的说法,C中还是以C的方式做事,不要掺和C++中的东西


为什么不能有C++的思想啊?我觉得C++的container+iterator+algorithm思想可以被其他任何语言借鉴。
而且统一用C++的标准,可以减少后来人的学习负担阿
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP