项目作者: hujianzhe

项目描述 :
纯C的跨平台基础库与网络库,提供list/hashtable/rbtree数据结构,封装各OS API,对使用者屏蔽诸如IO多路复用下的并发可靠UDP/TCP的传输与监听,断线重连,基于协程/回调的RPC调度核心机制等实现细节.内部还包括一个3D碰撞检测.
高级语言: C
项目地址: git://github.com/hujianzhe/util.git


util工具库,C/C++代码分离,可运行于linux/windows/macOS平台,可直接集成到项目中,或抽取部分文件使用.

设计原则:单一接口和模块尽可能做到绝对原子和功能分层设计,绝不做不属于它本身的事情(例如绝不把协程与io混为一个大模块,协程就是协程,io就是io).

  1. util/
  2. .gitignore 用于git忽略一些无用文件
  3. makefile unix系统编译动态链接库
  4. lib_compile.sh unix系统编译静态链接库脚本
  5. CPP部分
  6. cpp_inc/
  7. astar 基于格子和邻接点的A*寻路算法
  8. coroutine_default_sche.h 基于C++20的无栈协程调度器,nodejs风格
  9. coroutine_helper.h 基于C++20的无栈协程结构定义,nodejs风格
  10. cpp_compiler_define 判断编译器当前指定的CPP版本
  11. heap_timer 基于标准库堆结构实现的定时器
  12. lexical_cast 简陋但可用的通用类型转换接口
  13. misc 一些无法归类的,方便兼容C风格的
  14. string_helper 一些简陋的字符串分割和to_string方法
  15. C部分
  16. inc/
  17. all 自动include所有库内头文件
  18. compiler_define 根据编译器不同,给出统一的关键字,定一缺失类型,必须的预处理语句,频闭不需要的警告等
  19. platform_define 根据系统平台的不同,给出统一的关键字,定义缺失类型,必须的预处理语句,频闭不需要的警告等
  20. component/
  21. net_channel_rw 基于下面的reactor模块提供TCP/UDP传输,并发的可靠UDP传输与监听
  22. dataqueue 用于线程间通信的消息队列
  23. log 用于日志读写,支持异步/同步写入文件,且内置日志轮替机制
  24. memheap_mt 基于共享内存的多进程/线程安全的内存管理
  25. memref 基于引用计数实现的内存强引用和观察者
  26. reactor Reactor模型的网络套接字库
  27. rbtimer 一个基于红黑树结构的定时器模块
  28. stack_co_sche 基于系统平台API实现的有栈协程调度器
  29. switch_co_sche 基于switch case语法的无栈协程调度器
  30. crt/
  31. protocol/
  32. hiredis_cli_protocol 基于hiredis代码的裁剪,只保留了客户端对RESP协议解析和构造部分
  33. httpframe 用于解析与组装HTTP协议报文
  34. websocketframe 用于解析与组装WebSocket协议报文(13版本)
  35. cXML 用于解析XML
  36. dynarr 模拟泛型的动态数组
  37. json 用于解析JSON,沿用cJSON的命名风格,内部采用和cJSON不同的实现方式
  38. math 一些实用的数学运算接口
  39. datastruct/
  40. arrheap 最小堆,最大堆
  41. base64 提供base64编解码接口
  42. bstree 类型无关的二叉搜索树
  43. hash 提供一些常用的hash算法
  44. hashtable 类型无关的哈希表
  45. lengthfieldframe 用于解析与组装包含长度字段的协议报文
  46. list 类型无关的双向链表,顺带支持栈/队列的PUSH/POP操作
  47. md5 MD5编码生成
  48. memfunc 不涉及分配释放的内存与字符串操作函数
  49. memheap 简单内存堆分配与释放
  50. random 随机数算法,提供rand48MT19937算法
  51. rbtree 类型无关的红黑树(内部基于linux内核红黑树代码)
  52. serial_exec 任务串行执行队列结构
  53. sha1 SHA1编解码,来源于Redis源码
  54. transport_ctx 提供ACK确认与滑动窗口的传输控制接口,不包含OS对应的IO系统接口,并于标准库无关
  55. tree 类型无关的普通树
  56. url URL解析与编解码接口
  57. sysapi/
  58. aio 提供统一AIO接口(基于iocp/io_uring)
  59. assert 提供一个相对于assert的高级断言
  60. atomic 提供统一的原子操作接口
  61. error 提供统一的系统错误码接口
  62. file 提供统一的文件与目录操作接口
  63. io_overlapped 提供OVERLAPPED结构与接口,用于NIO/AIO
  64. ipc 提供统一的OS锁接口
  65. misc 杂项接口
  66. mmap 提供统一的文件内存映射与共享内存接口
  67. nio 提供统一网络NIO接口(基于iocp/epoll/kevent,reactor模式)
  68. process 提供统一的进程/线程/协程接口
  69. socket 提供统一的socket接口
  70. statistics 一些杂项统计接口
  71. terminal 提供终端控制台的操作接口
  72. time 提供统一的线程安全的时间接口