Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
cd5a96ee
R
redis
项目概览
xindoo
/
redis
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cd5a96ee
编写于
3月 03, 2010
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
zipampDel() implemented
上级
2f4d2242
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
29 addition
and
1 deletion
+29
-1
zipmap.c
zipmap.c
+29
-1
未找到文件。
zipmap.c
浏览文件 @
cd5a96ee
...
...
@@ -147,7 +147,7 @@ static unsigned int zipmapEncodeLength(unsigned char *p, unsigned int len) {
static
unsigned
char
*
zipmapLookupRaw
(
unsigned
char
*
zm
,
unsigned
char
*
key
,
unsigned
int
klen
,
unsigned
int
*
totlen
,
unsigned
int
*
freeoff
,
unsigned
int
*
freelen
)
{
unsigned
char
*
p
=
zm
+
1
;
unsigned
int
l
;
unsigned
int
reqfreelen
;
unsigned
int
reqfreelen
=
0
;
/* initialized just to prevent warning */
if
(
freelen
)
{
reqfreelen
=
*
freelen
;
...
...
@@ -210,6 +210,15 @@ static unsigned int zipmapRawValueLength(unsigned char *p) {
return
used
;
}
/* If 'p' points to a key, this function returns the total amount of
* bytes used to store this entry (entry = key + associated value + trailing
* free space if any). */
static
unsigned
int
zipmapRawEntryLength
(
unsigned
char
*
p
)
{
unsigned
int
l
=
zipmapRawKeyLength
(
p
);
return
l
+
zipmapRawValueLength
(
p
+
l
);
}
/* Set key to value, creating the key if it does not already exist. */
unsigned
char
*
zipmapSet
(
unsigned
char
*
zm
,
unsigned
char
*
key
,
unsigned
int
klen
,
unsigned
char
*
val
,
unsigned
int
vlen
)
{
unsigned
int
oldlen
=
0
,
freeoff
=
0
,
freelen
;
...
...
@@ -278,6 +287,23 @@ unsigned char *zipmapSet(unsigned char *zm, unsigned char *key, unsigned int kle
return
zm
;
}
/* Remove the specified key. If 'deleted' is not NULL the pointed integer is
* set to 0 if the key was not found, to 1 if it was found and deleted. */
unsigned
char
*
zipmapDel
(
unsigned
char
*
zm
,
unsigned
char
*
key
,
unsigned
int
klen
,
int
*
deleted
)
{
unsigned
char
*
p
=
zipmapLookupRaw
(
zm
,
key
,
klen
,
NULL
,
NULL
,
NULL
);
if
(
p
)
{
unsigned
int
freelen
=
zipmapRawEntryLength
(
p
);
p
[
0
]
=
ZIPMAP_EMPTY
;
zipmapEncodeLength
(
p
+
1
,
freelen
);
zm
[
0
]
|=
ZIPMAP_STATUS_FRAGMENTED
;
if
(
deleted
)
*
deleted
=
1
;
}
else
{
if
(
deleted
)
*
deleted
=
0
;
}
return
zm
;
}
void
zipmapRepr
(
unsigned
char
*
p
)
{
unsigned
int
l
;
...
...
@@ -327,5 +353,7 @@ int main(void) {
zipmapRepr
(
zm
);
zm
=
zipmapSet
(
zm
,(
unsigned
char
*
)
"new"
,
3
,
(
unsigned
char
*
)
"xx"
,
2
);
zipmapRepr
(
zm
);
zm
=
zipmapDel
(
zm
,(
unsigned
char
*
)
"new"
,
3
,
NULL
);
zipmapRepr
(
zm
);
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录