TODO - activesys/libcstl GitHub Wiki

libcstl TODO

libcstl-2.5

全面支持C99 unicode valgrind检查 pc-lint静态检查。 valgrind动态检查。

libcstl-2.4

容器

  1. 对于保存类型为字符串的map_t和hash_map_t时,不能使用at函数来直接为第二个元素赋值。

  2. 重构basic_string_t类型,支持'\0'。

迭代器

  1. 支持反向迭代器。
  2. 支持数组迭代器。

算法

  1. 重构算法。

类型系统

  1. 解决关联容器中不能保存扩展类型的问题如:

    set_t* pt_set = create_set(set_t<int>);
    set_t* pt_setex = create_set(int);
    set_init_ex(pt_setex, fun_great_int);
    

    这里pt_set 不能保存保存pt_setex,因为pt_set内部保存的类型是set_init(pt_setex);。

  2. 对于在基于hash结构的关联容器中保存用户自定义类型或者libcstl内建类型时,使用内置的hash

    函数当,数据内容有可变部分但是不影响整体值的情况下(例如结构中包含指针,对于相同的值, 这个指针的值可能不同),默认的hash得出的值可能不同,建议在libcstl-2.0.0版本中使用用户自 自己提供的hash函数。

  3. 支持int8_t, uint8_t等类型。

  4. 增强对指针的支持, 完善目前对于指针至此的不完整,重新定义libcstl的类型描述语法。

    1. 允许用户注册和复制c内建类型或者用户定义类型的指针类型,不限制指针级数。例如int * *, abc_t *, xyz * * * * * * *等。

    2. 内置void *通用指针类型。

    3. 区分用户注册的指针类型,对于用户有特殊要求的指针类型如type_register(abc_t *, abc_p_init, abc_p_copy, abc_p_less, abc_p_destroy);其中的abc_t *与type_register(def_t *, NULL, NULL, NULL, NULL);中的def_t *不同,def_t *是不需要特殊属性的指针类型,会被当作void *处理,所以abc_t *与void *不是同种类型,def_t *和void *是同一种类型。

    4. 自动生成同种类型指针,例如int和signed被认为是同种类型,那么当用户注册int *的时候,libcstl负责自动复制signed *。

    5. 对于c内建类型,libcstl内置了这些类型的1,2,3级指针如int*, int * *, int * * *,4级以上的指针需要用户自己注册。

其他

  1. 实现按配置有选择的安装libcstl组件。
  2. 添加获得错误信息的接口。
  3. 参考google的编码规范,制定一份编码规范。
  4. 去掉目前代码中的集成测试,将集成测试采用ci的方式完成。
  5. 争取搭建libcstl的网站,将用户手册和参考手册以html的形式发布到网上。
  6. 重构算法和函数部分的代码,修复关于算法和函数的bug。
  7. 统一编码规范。
  8. 统一automake,autoconf,以及git的配置。
  9. 实现配置脚本,通过配置脚本来更改版本号。
  10. 统一头文件的包含方式。

libcstl-2.3

  1. 增强类型系统
  • 增强类型机制,使用void*来统一支持指针类型。
  • 支持C99类型(_Bool, long long)。
  • 支持所有的libcstl内建类型作为容器元素类型。
  • 类型支持函数修改的问题,主要用来修改已经注册的类型的支持函数,这主要是因为void*类型编程默认类型之后不能够实现深拷贝。
  1. 性能优化
  • 优化容器性能。
  • 优化迭代器性能。
  • 优化算法性能。
⚠️ **GitHub.com Fallback** ⚠️