码迷,mamicode.com
首页 > 其他好文 > 详细

SDS(Simple Dynamic String)

时间:2017-07-07 14:22:48      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:line   class   stat   return   head   sim   字符串   cas   pre   

 

 

+--------+-------------------------------+-----------+
| Header | Binary safe C alike string... | Null term |
+--------+-------------------------------+-----------+
         |
         Pointer returned to the user.

 

1、如果字符串长度小于2^5(32),类型SDS_TYPE_5;

2、如果字符串大于2^5(32),小于2^8(256),类型SDS_TYPE_8;

3、如果字符串大于2^8(256),小于2^16(65536),类型SDS_TYPE_16;

4、如果字符串大于2^16(65536),小于2^32(4294967296),类型SDS_TYPE_32;

5、如果大于2^32(4294967296),类型SDS_TYPE_64;

static inline char sdsReqType(size_t string_size) {
    if (string_size < 1<<5)
        return SDS_TYPE_5;
    if (string_size < 1<<8)
        return SDS_TYPE_8;
    if (string_size < 1<<16)
        return SDS_TYPE_16;
    if (string_size < 1ll<<32)
        return SDS_TYPE_32;
    return SDS_TYPE_64;
}

 

 

 计算动态字符长度,

static inline size_t sdslen(const sds s) {
    unsigned char flags = s[-1];
    switch(flags&SDS_TYPE_MASK) {
        case SDS_TYPE_5:
            return SDS_TYPE_5_LEN(flags);
        case SDS_TYPE_8:
            return SDS_HDR(8,s)->len;
        case SDS_TYPE_16:
            return SDS_HDR(16,s)->len;
        case SDS_TYPE_32:
            return SDS_HDR(32,s)->len;
        case SDS_TYPE_64:
            return SDS_HDR(64,s)->len;
    }
    return 0;
}

 

 

 

下面代码是计算SDS头部的长度,

static inline int sdsHdrSize(char type) {
    switch(type&SDS_TYPE_MASK) {
        case SDS_TYPE_5:
            return sizeof(struct sdshdr5);
        case SDS_TYPE_8:
            return sizeof(struct sdshdr8);
        case SDS_TYPE_16:
            return sizeof(struct sdshdr16);
        case SDS_TYPE_32:
            return sizeof(struct sdshdr32);
        case SDS_TYPE_64:
            return sizeof(struct sdshdr64);
    }
    return 0;
}

 

SDS(Simple Dynamic String)

标签:line   class   stat   return   head   sim   字符串   cas   pre   

原文地址:http://www.cnblogs.com/randyma/p/7131733.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!