add function sf_serializer_pack_id_name_skiplist
parent
e440273f35
commit
f9f7b0f159
|
|
@ -21,6 +21,7 @@
|
||||||
#include "fastcommon/common_define.h"
|
#include "fastcommon/common_define.h"
|
||||||
#include "fastcommon/shared_func.h"
|
#include "fastcommon/shared_func.h"
|
||||||
#include "fastcommon/fast_buffer.h"
|
#include "fastcommon/fast_buffer.h"
|
||||||
|
#include "fastcommon/uniq_skiplist.h"
|
||||||
#include "fastcommon/hash.h"
|
#include "fastcommon/hash.h"
|
||||||
|
|
||||||
#define SF_SERIALIZER_VALUE_TYPE_COUNT 12
|
#define SF_SERIALIZER_VALUE_TYPE_COUNT 12
|
||||||
|
|
@ -438,6 +439,44 @@ static inline int sf_serializer_pack_id_name_array(FastBuffer *buffer,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int sf_serializer_pack_id_name_skiplist(
|
||||||
|
FastBuffer *buffer, const unsigned char fid,
|
||||||
|
UniqSkiplist *sl)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
int length;
|
||||||
|
SFSerializerPackFieldArray *obj;
|
||||||
|
const id_name_pair_t *pair;
|
||||||
|
UniqSkiplistIterator it;
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
length = sizeof(SFSerializerPackFieldArray);
|
||||||
|
uniq_skiplist_iterator(sl, &it);
|
||||||
|
while ((pair=uniq_skiplist_next(&it)) != NULL) {
|
||||||
|
length += sizeof(int64_t) + pair->name.len +
|
||||||
|
sizeof(SFSerializerPackStringValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((result=fast_buffer_check_inc_size(buffer, length)) != 0) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
obj = (SFSerializerPackFieldArray *)(buffer->data + buffer->length);
|
||||||
|
obj->field.id = fid;
|
||||||
|
obj->field.type = sf_serializer_value_type_id_name_array;
|
||||||
|
int2buff(uniq_skiplist_count(sl), obj->value.count);
|
||||||
|
|
||||||
|
p = obj->value.ptr;
|
||||||
|
uniq_skiplist_iterator(sl, &it);
|
||||||
|
while ((pair=uniq_skiplist_next(&it)) != NULL) {
|
||||||
|
long2buff(pair->id, p);
|
||||||
|
p += sizeof(int64_t);
|
||||||
|
SF_SERIALIZER_PACK_STRING_AND_MOVE_PTR(p, &pair->name);
|
||||||
|
}
|
||||||
|
buffer->length += length;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int sf_serializer_pack_map(FastBuffer *buffer,
|
static inline int sf_serializer_pack_map(FastBuffer *buffer,
|
||||||
const unsigned char fid, const key_value_pair_t *kv_pairs,
|
const unsigned char fid, const key_value_pair_t *kv_pairs,
|
||||||
const int count)
|
const int count)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue