简单动态字符串
2015-05-06 14:53
183 查看
/* sds. h*/
// sds: simple dynamic string(简单动态字符串)
typedef char *sds;
//
struct sdshdr{
unsigned int len;
unsigned int free;
char buf[]; // 零长度数组,C99
/*
* buf是一个数组名;该数组没有元素;该数组的起始地址紧随结构体sdshdr之
* 后;这种声明方法可以巧妙的实现C语言里的数组扩展,比将buf定义为指针,
* 再为指针分配空间的做法要简单一些,并且可以节省一个指针的存储空间
*/
};
static inline size_t sdslen(const sds s) {
struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr)));
return sh->len;
}
sds sdsnewlen(const void *init, size_t initlen) {
struct sdshdr *sh;
if (init) {
sh = zmalloc(sizeof(struct sdshdr)+initlen+1);
} else {
sh = zcalloc(sizeof(struct sdshdr)+initlen+1);
}
if (sh == NULL) return NULL;
sh->len = initlen;
sh->free = 0;
if (initlen && init)
memcpy(sh->buf, init, initlen);
sh->buf[initlen] = '\0';
return (char*)sh->buf;
}
参考:http://blog.chinaunix.net/uid-20196318-id-28810.html
// sds: simple dynamic string(简单动态字符串)
typedef char *sds;
//
struct sdshdr{
unsigned int len;
unsigned int free;
char buf[]; // 零长度数组,C99
/*
* buf是一个数组名;该数组没有元素;该数组的起始地址紧随结构体sdshdr之
* 后;这种声明方法可以巧妙的实现C语言里的数组扩展,比将buf定义为指针,
* 再为指针分配空间的做法要简单一些,并且可以节省一个指针的存储空间
*/
};
static inline size_t sdslen(const sds s) {
struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr)));
return sh->len;
}
sds sdsnewlen(const void *init, size_t initlen) {
struct sdshdr *sh;
if (init) {
sh = zmalloc(sizeof(struct sdshdr)+initlen+1);
} else {
sh = zcalloc(sizeof(struct sdshdr)+initlen+1);
}
if (sh == NULL) return NULL;
sh->len = initlen;
sh->free = 0;
if (initlen && init)
memcpy(sh->buf, init, initlen);
sh->buf[initlen] = '\0';
return (char*)sh->buf;
}
参考:http://blog.chinaunix.net/uid-20196318-id-28810.html
相关文章推荐
- Redis源码剖析和注释(二)--- 简单动态字符串
- Redis 数据结构之简单动态字符串SDS
- Redis的简单动态字符串实现
- Redis深入之简单动态字符串
- redis 笔记01 简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表
- redis 简单动态字符串
- Redis底层数据结构之简单动态字符串
- redis数据结构之一-简单动态字符串SDS
- 《Redis设计和实现》读书笔记1-简单动态字符串
- 【26-Redis设计与实现-简单动态字符串】
- Redis设计与实现 (一): 简单动态字符串
- Redis 数据结构之-简单动态字符串(SDS)
- Redis的简单动态字符串——Simple Dynamic String
- redis 数据结构 简单动态字符串和链表
- Redis -- 1、简单动态字符串(sds)
- redis内部数据结构--简单动态字符串sds
- redis源码学习之sds简单动态字符串
- Redis 简单动态字符串
- Redis-数据结构-1-简单动态字符串
- Redis_慢查询日志与简单动态字符串