本文整理汇总了C++中sdsEncodedObject函数的典型用法代码示例。如果您正苦于以下问题:C++ sdsEncodedObject函数的具体用法?C++ sdsEncodedObject怎么用?C++ sdsEncodedObject使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了sdsEncodedObject函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: compareStringObjectsWithFlags
int compareStringObjectsWithFlags(robj *a, robj *b, int flags) {
serverAssertWithInfo(NULL,a,a->type == OBJ_STRING && b->type == OBJ_STRING);
char bufa[128], bufb[128], *astr, *bstr;
size_t alen, blen, minlen;
if (a == b) return 0;
if (sdsEncodedObject(a)) {
astr = a->ptr;
alen = sdslen(astr);
} else {
alen = ll2string(bufa,sizeof(bufa),(long) a->ptr);
astr = bufa;
}
if (sdsEncodedObject(b)) {
bstr = b->ptr;
blen = sdslen(bstr);
} else {
blen = ll2string(bufb,sizeof(bufb),(long) b->ptr);
bstr = bufb;
}
if (flags & REDIS_COMPARE_COLL) {
return strcoll(astr,bstr);
} else {
int cmp;
minlen = (alen < blen) ? alen : blen;
cmp = memcmp(astr,bstr,minlen);
if (cmp == 0) return alen-blen;
return cmp;
}
}
开发者ID:LichKing-lee,项目名称:nbase-arc,代码行数:31,代码来源:object.c
示例2: getDoubleFromObject
int getDoubleFromObject(robj *o, double *target) {
double value;
char *eptr;
if (o == NULL) {
value = 0;
} else {
serverAssertWithInfo(NULL,o,o->type == OBJ_STRING);
if (sdsEncodedObject(o)) {
errno = 0;
value = strtod(o->ptr, &eptr);
if (isspace(((char*)o->ptr)[0]) ||
eptr[0] != '\0' ||
(errno == ERANGE &&
(value == HUGE_VAL || value == -HUGE_VAL || value == 0)) ||
errno == EINVAL ||
isnan(value))
return VR_ERROR;
} else if (o->encoding == OBJ_ENCODING_INT) {
value = (long)o->ptr;
} else {
serverPanic("Unknown string encoding");
}
}
*target = value;
return VR_OK;
}
开发者ID:vipshop,项目名称:vire,代码行数:27,代码来源:vr_object.c
示例3: getDoubleFromObject
/*
* 尝试从对象中取出 double 值
*
* - 转换成功则将值保存在 *target 中,函数返回 REDIS_OK
*
* - 否则,函数返回 REDIS_ERR
*/
int getDoubleFromObject(robj *o, double *target) {
double value;
char *eptr;
if (o == NULL) {
value = 0;
} else {
redisAssertWithInfo(NULL,o,o->type == REDIS_STRING);
// 尝试从字符串中转换 double 值
if (sdsEncodedObject(o)) {
errno = 0;
value = strtod(o->ptr, &eptr);
if (isspace(((char*)o->ptr)[0]) ||
eptr[0] != '\0' ||
(errno == ERANGE &&
(value == HUGE_VAL || value == -HUGE_VAL || value == 0)) ||
errno == EINVAL ||
isnan(value))
return REDIS_ERR;
// INT 编码
} else if (o->encoding == REDIS_ENCODING_INT) {
value = (long)o->ptr;
} else {
redisPanic("Unknown string encoding");
}
}
// 返回值
*target = value;
return REDIS_OK;
}
开发者ID:DevinLow,项目名称:Reading-and-comprehense-redis-2.9.11,代码行数:42,代码来源:object.c
示例4: getLongDoubleFromObject
/*
* 尝试从对象中取出 long double 值
*
* - 转换成功则将值保存在 *target 中,函数返回 REDIS_OK
*
* - 否则,函数返回 REDIS_ERR
*/
int getLongDoubleFromObject(robj *o, long double *target) {
long double value;
char *eptr;
if (o == NULL) {
value = 0;
} else {
redisAssertWithInfo(NULL,o,o->type == REDIS_STRING);
// RAW 编码,尝试从字符串中转换 long double
if (sdsEncodedObject(o)) {
errno = 0;
value = strtold(o->ptr, &eptr);
if (isspace(((char*)o->ptr)[0]) || eptr[0] != '\0' ||
errno == ERANGE || isnan(value))
return REDIS_ERR;
// INT 编码,直接保存
} else if (o->encoding == REDIS_ENCODING_INT) {
value = (long)o->ptr;
} else {
redisPanic("Unknown string encoding");
}
}
*target = value;
return REDIS_OK;
}
开发者ID:DevinLow,项目名称:Reading-and-comprehense-redis-2.9.11,代码行数:37,代码来源:object.c
示例5: getLongLongFromObject
int getLongLongFromObject(robj *o, long long *target) {
long long value;
char *eptr;
if (o == NULL) {
// o 为 NULL 时,将值设为 0 。
value = 0;
} else {
// 确保对象为 REDIS_STRING 类型
redisAssertWithInfo(NULL,o,o->type == REDIS_STRING);
if (sdsEncodedObject(o)) {
errno = 0;
// T = O(N)
value = strtoll(o->ptr, &eptr, 10);
if (isspace(((char*)o->ptr)[0]) || eptr[0] != '\0' ||
errno == ERANGE)
return REDIS_ERR;
} else if (o->encoding == REDIS_ENCODING_INT) {
// 对于 REDIS_ENCODING_INT 编码的整数值
// 直接将它的值保存到 value 中
value = (long)o->ptr;
} else {
redisPanic("Unknown string encoding");
}
}
// 保存值到指针
if (target) *target = value;
// 返回结果标识符
return REDIS_OK;
}
开发者ID:DevinLow,项目名称:Reading-and-comprehense-redis-2.9.11,代码行数:33,代码来源:object.c
示例6: getLongDoubleFromObject
//从对象中将字符串值转换为long double并存储在target中
int getLongDoubleFromObject(robj *o, long double *target) {
long double value;
char *eptr;
if (o == NULL) { //对象不存在
value = 0;
} else {
serverAssertWithInfo(NULL,o,o->type == OBJ_STRING);
//如果是字符串编码的两种类型
if (sdsEncodedObject(o)) {
errno = 0;
value = strtold(o->ptr, &eptr); //将字符串转换为long double类型
if (isspace(((char*)o->ptr)[0]) || eptr[0] != '\0' ||
errno == ERANGE || isnan(value)) //转换失败返回-1
return C_ERR;
} else if (o->encoding == OBJ_ENCODING_INT) { //整数编码
value = (long)o->ptr; //保存整数值
} else {
serverPanic("Unknown string encoding");
}
}
*target = value; //将值存到传入参数中,返回0成功
return C_OK;
}
开发者ID:therenine,项目名称:redis_source_annotation,代码行数:26,代码来源:object.c
示例7: stringObjectLen
size_t stringObjectLen(robj *o) {
serverAssertWithInfo(NULL,o,o->type == OBJ_STRING);
if (sdsEncodedObject(o)) {
return sdslen(o->ptr);
} else {
return sdigits10((long)o->ptr);
}
}
开发者ID:LichKing-lee,项目名称:nbase-arc,代码行数:8,代码来源:object.c
示例8: listTypeEqual
/* Compare the given object with the entry at the current position. */
int listTypeEqual(listTypeEntry *entry, robj *o) {
if (entry->li->encoding == OBJ_ENCODING_QUICKLIST) {
serverAssertWithInfo(NULL,o,sdsEncodedObject(o));
return quicklistCompare(entry->entry.zi,o->ptr,sdslen(o->ptr));
} else {
serverPanic("Unknown list encoding");
}
}
开发者ID:RealHacker,项目名称:redis-plus,代码行数:9,代码来源:t_list.c
示例9: stringObjectLen
size_t stringObjectLen(robj *o) {
assert(o->type == OBJ_STRING);
if (sdsEncodedObject(o)) {
return sdslen(o->ptr);
} else {
return sdigits10((long)o->ptr);
}
}
开发者ID:ncloudioj,项目名称:rhino-rox,代码行数:8,代码来源:robj.c
示例10: stringObjectLen
//返回字符串对象的字符串长度
size_t stringObjectLen(robj *o) {
serverAssertWithInfo(NULL,o,o->type == OBJ_STRING);
//如果是字符串编码的两种类型
if (sdsEncodedObject(o)) {
return sdslen(o->ptr);
} else { //如果是整数编码类型
return sdigits10((long)o->ptr); //计算出整数值的位数返回
}
}
开发者ID:therenine,项目名称:redis_source_annotation,代码行数:11,代码来源:object.c
示例11: rioWriteBulkObject
/* Delegate writing an object to writing a bulk string or bulk long long.
* This is not placed in rio.c since that adds the redis.h dependency. */
int rioWriteBulkObject(rio *r, robj *obj) {
/* Avoid using getDecodedObject to help copy-on-write (we are often
* in a child process when this function is called). */
if (obj->encoding == REDIS_ENCODING_INT) {
return rioWriteBulkLongLong(r,(long)obj->ptr);
} else if (sdsEncodedObject(obj)) {
return rioWriteBulkString(r,obj->ptr,sdslen(obj->ptr));
} else {
redisPanic("Unknown string encoding");
}
}
开发者ID:redcool,项目名称:redis-v8,代码行数:13,代码来源:aof.c
示例12: listTypeEqual
/* Compare the given object with the entry at the current position. */
int listTypeEqual(listTypeEntry *entry, robj *o) {
listTypeIterator *li = entry->li;
if (li->encoding == REDIS_ENCODING_ZIPLIST) {
redisAssertWithInfo(NULL,o,sdsEncodedObject(o));
return ziplistCompare(entry->zi,o->ptr,sdslen(o->ptr));
} else if (li->encoding == REDIS_ENCODING_LINKEDLIST) {
return equalStringObjects(o,listNodeValue(entry->ln));
} else {
redisPanic("Unknown list encoding");
}
}
开发者ID:wangxuemin,项目名称:coding,代码行数:12,代码来源:t_list.c
示例13: listTypeEqual
//比较列表类型的entry结构与对象的entry节点的值是否等,相等返回1
int listTypeEqual(listTypeEntry *entry, robj *o) {
//对列表对象编码为quicklist类型操作
if (entry->li->encoding == OBJ_ENCODING_QUICKLIST) {
//确保objptr的编码类型是简单动态字符串类型的RAW或EMBSTR
serverAssertWithInfo(NULL,o,sdsEncodedObject(o));
//比较listTypeEntry结构中的entry值和给定的对象的值
return quicklistCompare(entry->entry.zi,o->ptr,sdslen(o->ptr));
} else {
serverPanic("Unknown list encoding");
}
}
开发者ID:therenine,项目名称:redis_source_annotation,代码行数:13,代码来源:t_list.c
示例14: serverLogObjectDebugInfo
void serverLogObjectDebugInfo(robj *o) {
serverLog(LL_WARNING,"Object type: %d", o->type);
serverLog(LL_WARNING,"Object encoding: %d", o->encoding);
serverLog(LL_WARNING,"Object refcount: %d", o->refcount);
if (o->type == OBJ_STRING && sdsEncodedObject(o)) {
serverLog(LL_WARNING,"Object raw string len: %zu", sdslen(o->ptr));
if (sdslen(o->ptr) < 4096) {
sds repr = sdscatrepr(sdsempty(),o->ptr,sdslen(o->ptr));
serverLog(LL_WARNING,"Object raw string content: %s", repr);
sdsfree(repr);
}
}
}
开发者ID:Robert-Xie,项目名称:disque,代码行数:13,代码来源:debug.c
示例15: hashTypeTryConversion
/* Check the length of a number of objects to see if we need to convert a
* ziplist to a real hash. Note that we only check string encoded objects
* as their string length can be queried in constant time. */
void hashTypeTryConversion(robj *o, robj **argv, int start, int end) {
int i;
if (o->encoding != REDIS_ENCODING_ZIPLIST) return;
for (i = start; i <= end; i++) {
if (sdsEncodedObject(argv[i]) &&
sdslen(argv[i]->ptr) > server.hash_max_ziplist_value)
{
hashTypeConvert(o, REDIS_ENCODING_HT);
break;
}
}
}
开发者ID:jianzi123,项目名称:my_libucmq,代码行数:17,代码来源:t_hash.c
示例16: stringObjectLen
/*
* 返回字符串对象中字符串值的长度
*/
size_t stringObjectLen(robj *o) {
redisAssertWithInfo(NULL,o,o->type == REDIS_STRING);
if (sdsEncodedObject(o)) {
return sdslen(o->ptr);
// INT 编码,计算将这个值转换为字符串要多少字节
// 相当于返回它的长度
} else {
char buf[32];
return ll2string(buf,32,(long)o->ptr);
}
}
开发者ID:DevinLow,项目名称:Reading-and-comprehense-redis-2.9.11,代码行数:17,代码来源:object.c
示例17: compareStringObjectsWithFlags
//根据flags比较两个字符串对象a和b,返回0表示相等,非零表示不相等
int compareStringObjectsWithFlags(robj *a, robj *b, int flags) {
serverAssertWithInfo(NULL,a,a->type == OBJ_STRING && b->type == OBJ_STRING);
char bufa[128], bufb[128], *astr, *bstr;
size_t alen, blen, minlen;
if (a == b) return 0; //如果是同一对象直接返回
//如果是指向字符串值的两种OBJ_ENCODING_EMBSTR或OBJ_ENCODING_RAW的两类对象
if (sdsEncodedObject(a)) {
astr = a->ptr;
alen = sdslen(astr); //获取字符串的长度
} else { //如果是整数类型的OBJ_ENCODING_INT编码
alen = ll2string(bufa,sizeof(bufa),(long) a->ptr); //转换为字符串
astr = bufa;
}
//如果是指向字符串值的两种OBJ_ENCODING_EMBSTR或OBJ_ENCODING_RAW的两类对象
if (sdsEncodedObject(b)) {
bstr = b->ptr;
blen = sdslen(bstr); //获取字符串的长度
} else { //如果是整数类型的OBJ_ENCODING_INT编码
blen = ll2string(bufb,sizeof(bufb),(long) b->ptr); //转换为字符串
bstr = bufb;
}
//以本地指定的字符次序进行比较
if (flags & REDIS_COMPARE_COLL) {
//strcoll()会依环境变量LC_COLLATE所指定的文字排列次序来比较两字符串
return strcoll(astr,bstr); //比较a和b的字符串对象,相等返回0
} else { //以二进制方式进行比较
int cmp;
minlen = (alen < blen) ? alen : blen;
cmp = memcmp(astr,bstr,minlen); //相等返回0,否则返回第一个字符串和第二个字符串的长度差
if (cmp == 0) return alen-blen;
return cmp;
}
}
开发者ID:therenine,项目名称:redis_source_annotation,代码行数:38,代码来源:object.c
示例18: createStringObject
/* Get a decoded version of an encoded object (returned as a new object).
* If the object is already raw-encoded just increment the ref count. */
robj *getDecodedObject(robj *o) {
robj *dec;
if (sdsEncodedObject(o)) {
return o;
}
if (o->type == OBJ_STRING && o->encoding == OBJ_ENCODING_INT) {
char buf[32];
ll2string(buf,32,(long)o->ptr);
dec = createStringObject(buf,strlen(buf));
return dec;
} else {
serverPanic("Unknown encoding type");
}
}
开发者ID:vipshop,项目名称:vire,代码行数:18,代码来源:vr_object.c
示例19: incrRefCount
//将对象是整型的解码为字符串并返回,如果是字符串编码则之间返回输入对象,只需增加引用计数
robj *getDecodedObject(robj *o) {
robj *dec;
if (sdsEncodedObject(o)) { //如果是OBJ_ENCODING_RAW或OBJ_ENCODING_EMBSTR类型的对象
incrRefCount(o); //增加应用计数
return o;
}
if (o->type == OBJ_STRING && o->encoding == OBJ_ENCODING_INT) { //如果是整数对象
char buf[32];
ll2string(buf,32,(long)o->ptr); //将整数转换为字符串
dec = createStringObject(buf,strlen(buf)); //创建一个字符串对象
return dec;
} else {
serverPanic("Unknown encoding type");
}
}
开发者ID:therenine,项目名称:redis_source_annotation,代码行数:18,代码来源:object.c
示例20: getLongLongFromObject
int getLongLongFromObject(robj *o, long long *target) {
long long value;
if (o == NULL) {
value = 0;
} else {
serverAssertWithInfo(NULL,o,o->type == OBJ_STRING);
if (sdsEncodedObject(o)) {
if (string2ll(o->ptr,sdslen(o->ptr),&value) == 0) return C_ERR;
} else if (o->encoding == OBJ_ENCODING_INT) {
value = (long)o->ptr;
} else {
serverPanic("Unknown string encoding");
}
}
if (target) *target = value;
return C_OK;
}
开发者ID:LichKing-lee,项目名称:nbase-arc,代码行数:18,代码来源:object.c
注:本文中的sdsEncodedObject函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论