C++ 基础库 co 1.1 发布。CO 是一个优雅、高效的 C++ 基础库,支持 Linux, Windows 与 Mac 平台。
CO 追求极简、高效,不依赖于 boost 等三方库,仅使用了少量 C++11 特性。
github
Changes
rpcgen
gen
unitest/base
unitest
test
fast.cc
fast::dtoa
LruMap
fast::stream
fastream fs; // 定义一个空的 fastream 对象,不分配内存
fastream fs; fs << "hello " << 23; fs.append(fs); fs << fs; // <==> fs.append(fs)
fastream
fastring s; s << "hello " << 23;
fastring s; fastream& fs = *(fastream*)&s
std::string
fastring s("hello"); fastring t(s); // 通过内存拷贝创建一个新的字符串
append
inside
fastring s("123"); s.append(s.c_str() + 1); // s -> "12323"
clone()
str::dbg()
std::unordered_map
std::unordered_set
# 先解析配置文件 xx.conf,再解析其他命令行参数 # 命令行中 x, s 的值会覆盖 xx.conf 中的值,方便调试 ./xx -x -s="hello" -config=xx.conf
daemon
# 可在命令行参数中带上 -daemon # 也可在配置文件中设置: daemon = true ./xx -daemon
-x=y
-x y
x=y
./xx -i=8 u=88 -s="hello world" ./xx -i 8 -u 88 -s "hello world"
./xx config=xx.conf # 用 flag config 显示指定 ./xx xx.conf # 配置文件名以 .conf 或 config 结尾,且是程序命令行的第一个非 flag 参数,则可省略 config= ./xx -x xx.conf # -x 是 flag,xx.conf 是第一个非 flag 参数
// 在注释开头用 #3 指定级别为 3 // 支持的级别为 0-99,默认为 10 // 使用 --mkconf 自动生成配置文件时,flag 按级别、文件名、代码行数排序 DEF_bool(b, false, "#3 xxx");
async-signal-safe
co::connect
co::accept
co::max_sched_num()
co::sched_id()
coroutine_id()
co::tcp_socket()
co::udp_socket()
sock_t tcp_socket(int af=AF_INET); // @af: address family, AF_INET, AF_INET6, etc. sock_t udp_socket(int af=AF_INET); // @af: address family, AF_INET, AF_INET6, etc.
co::socket()
co::Event
co::Pool
ccb
dcb
co::Kakalot
co::PoolGuard
Jalloc
json::parse()
Json v = json::parse("[1, 2, 3]");
Json::dbg()
rpc_conn_idle_sec
rpc_max_idle_conn
hash32()
hash64
评论删除后,数据将无法恢复
C++ 基础库 CO 1.1 发布
C++ 基础库 co 1.1 发布。CO 是一个优雅、高效的 C++ 基础库,支持 Linux, Windows 与 Mac 平台。
CO 追求极简、高效,不依赖于 boost 等三方库,仅使用了少量 C++11 特性。
github
Changes
代码结构调整
rpcgen
更名为gen
.unitest/base
目录,单元测试代码直接放到unitest
目录下.test
目录下支持子目录.fast
fast.cc
中静态变量的定义放到函数中,初始化更安全.fast::dtoa
弃用基于LruMap
的实现,换用 Milo Yip 的实现(miloyip/dtoa-benchmark).fast::stream
类,提供基本的流式输出操作.fastream
fast::stream
类.fastream fs; // 定义一个空的 fastream 对象,不分配内存
fastring
fastream
一样,继承于fast::stream
类,因此也支持流式输出操作.std::string
类似,使用起来不容易出错.append
操作增加inside
检查,修复内存重叠时的逻辑漏洞.clone()
方法,移除引用计数后,此方法多余.str
str::dbg()
支持std::unordered_map
与std::unordered_set
.flag
daemon
,以支持后台运行程序-x=y
可以写成-x y
或者x=y
log
async-signal-safe
版本的函数,更安全.协程库
co::connect
,co::accept
等的实现,以支持 ipv6.co::max_sched_num()
接口,获取支持的最大调度线程数,目前为系统 cpu 核数.co::sched_id()
接口,获取当前的调度线程 id.coroutine_id()
接口,获取当前协程的 id.co::tcp_socket()
,co::udp_socket()
接口的参数为 address family,弃用早期用 4 与 6 指定 ipv4 与 ipv6 的方式.co::socket()
接口,与原生 api 保持一致.co::Event
的内部实现.co::Pool
:ccb
与dcb
,分别用于创建、销毁元素.co::Kakalot
重命名为co::PoolGuard
.json
Jalloc
,提升 Json 的性能.json::parse()
支持数组对象的解析.Json v = json::parse("[1, 2, 3]");
Json::dbg()
接口,将 Json 对象转换为 debug string (Json 对象中较长的字符串可能被截断).Json::dbg()
输出 Json 对象,使得输出的日志更精简.rpc
rpc_conn_idle_sec
与rpc_max_idle_conn
指定空闲连接的超时时间、最大的空闲连接数.hash
hash32()
的实现,32 位系统使用 murmur 2 的 32 位版本,64 位系统直接取hash64
的低 32 位.编译