对 cloudwu 简单的 cstring 进行简单解析

对 cloudwu 简单的 cstring 进行简单解析

题外话

  以前也用C写过字符串,主要应用的领域是,大字符串,文件读取方面.写的很粗暴,用的凑合着.那时候看见云风前辈的一个开源的 cstring 串.

当时简单观摩了一下,觉得挺好的.也没细看.过了较长一段时间,想整合一下,将大字符串和云风的cstring 短简单的串合在一起变成一种.但是自己

认真复制了一遍后发现.

  1.整合不了 云风(后面都省略前辈二字,觉得云风两个字,就已经帅的不行了)简单cstring.因为处理的领域不一样.

云风的 cstring => String , 而自己写的操作文件的c简单串 => StringBuilder.

      2.技巧太多了,不明觉厉,但是云风用的技巧,都会解释,毕竟都是C开发中常用的技巧.

      3.自己很菜,只能是瞎子摸象,看见只是部分,更多的需要大家自己参悟.

参考资料

1.云风博客简单字符串简介 http://blog.codingnow.com/2013/09/cstring.html

2.云风githup cstring https://github.com/cloudwu/cstring

3.gcc inline解释 在线文档 https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Inline.html#Inline

4.字符串hash 函数简介 http://www.cnblogs.com/uvsjoh/archive/2012/03/27/2420120.html#3240817

5. 简单实现原子操作 http://www.cnblogs.com/life2refuel/p/5024289.html#3326123

6. assert 使用 http://www.cnblogs.com/ggzss/archive/2011/08/18/2145017.html

7. 位运算 http://blog.sina.com.cn/s/blog_7b7cad23010163vy.html

8.stdarg.h c可变参数详解 http://www.cnblogs.com/life2refuel/p/4984275.html

前言

  这次直接切入正题,也许你会不屑一顾,还是想 分享一个故事

面朝大海,春暖花开
              海子 于 1989
从明天起,做一个幸福的人
喂马、劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝大海,春暖花开

从明天起,和每一个亲人通信
告诉他们我的幸福
那幸福的闪电告诉我的
我将告诉每一个人

给每一条河每一座山取一个温暖的名字
陌生人,我也为你祝福
愿你有一个灿烂的前程
愿你有情人终成眷属
愿你在尘世获得幸福
我只愿面朝大海,春暖花开

同名歌曲

面朝大海 http://music.163.com/#/song?id=27946316

正题

首先下载云风的cstring 源码 结构如下:

对 cloudwu 简单的 cstring 进行简单解析 

首先 看 cstring.h 文件

#ifndef cstring_h
#define cstring_h

#include <stdint.h>
#include <stddef.h>

#define CSTRING_PERMANENT 1
#define CSTRING_INTERNING 2
#define CSTRING_ONSTACK 4

#define CSTRING_INTERNING_SIZE 32
#define CSTRING_STACK_SIZE 128

struct cstring_data {
    char * cstr;
    uint32_t hash_size;
    uint16_t type;
    uint16_t ref;
};

typedef struct _cstring_buffer {
    struct cstring_data * str;
} cstring_buffer[1];

typedef struct cstring_data * cstring;

#define CSTRING_BUFFER(var) 
    char var##_cstring [CSTRING_STACK_SIZE] = { '