more
This commit is contained in:
parent
8aaf22ae75
commit
7b3a04c4dd
|
@ -100,7 +100,7 @@ static int tEncodeI64v(SCoder* pEncoder, int64_t val);
|
||||||
static int tEncodeFloat(SCoder* pEncoder, float val);
|
static int tEncodeFloat(SCoder* pEncoder, float val);
|
||||||
static int tEncodeDouble(SCoder* pEncoder, double val);
|
static int tEncodeDouble(SCoder* pEncoder, double val);
|
||||||
static int tEncodeBinary(SCoder* pEncoder, const void* val, uint64_t len);
|
static int tEncodeBinary(SCoder* pEncoder, const void* val, uint64_t len);
|
||||||
static int tEncodeCstrWithLen(SCoder* pEncoder, const char* val, uint64_t len);
|
static int tEncodeCStrWithLen(SCoder* pEncoder, const char* val, uint64_t len);
|
||||||
static int tEncodeCStr(SCoder* pEncoder, const char* val);
|
static int tEncodeCStr(SCoder* pEncoder, const char* val);
|
||||||
|
|
||||||
/* ------------------------ DECODE ------------------------ */
|
/* ------------------------ DECODE ------------------------ */
|
||||||
|
@ -141,7 +141,7 @@ static int tDecodeCStrTo(SCoder* pDecoder, char* val);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#define TD_ENCODE_VARIANT_MACRO(CODER, VAL) \
|
#define TD_ENCODE_VARIANT_MACRO(CODER, VAL) \
|
||||||
while ((VAL) >= ENCODE_LIMIT) { \
|
while ((VAL) >= ENCODE_LIMIT) { \
|
||||||
if ((CODER)->data) { \
|
if ((CODER)->data) { \
|
||||||
if (TD_CODER_CHECK_CAPACITY_FAILED(CODER, 1)) return -1; \
|
if (TD_CODER_CHECK_CAPACITY_FAILED(CODER, 1)) return -1; \
|
||||||
TD_CODER_CURRENT(CODER)[0] = ((VAL) | ENCODE_LIMIT) & 0xff; \
|
TD_CODER_CURRENT(CODER)[0] = ((VAL) | ENCODE_LIMIT) & 0xff; \
|
||||||
|
@ -261,12 +261,12 @@ static FORCE_INLINE int tEncodeBinary(SCoder* pEncoder, const void* val, uint64_
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FORCE_INLINE int tEncodeCstrWithLen(SCoder* pEncoder, const char* val, uint64_t len) {
|
static FORCE_INLINE int tEncodeCStrWithLen(SCoder* pEncoder, const char* val, uint64_t len) {
|
||||||
return tEncodeBinary(pEncoder, (void*)val, len + 1);
|
return tEncodeBinary(pEncoder, (void*)val, len + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static FORCE_INLINE int tEncodeCStr(SCoder* pEncoder, const char* val) {
|
static FORCE_INLINE int tEncodeCStr(SCoder* pEncoder, const char* val) {
|
||||||
return tEncodeCstrWithLen(pEncoder, val, (uint64_t)strlen(val));
|
return tEncodeCStrWithLen(pEncoder, val, (uint64_t)strlen(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------ FOR DECODER ------------------------ */
|
/* ------------------------ FOR DECODER ------------------------ */
|
||||||
|
|
|
@ -167,3 +167,35 @@ TEST(td_encode_test, encode_decode_variant_len_integer) {
|
||||||
simple_encode_decode_func<int64_t>(true);
|
simple_encode_decode_func<int64_t>(true);
|
||||||
simple_encode_decode_func<uint64_t>(true);
|
simple_encode_decode_func<uint64_t>(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(td_encode_test, encode_decode_cstr) {
|
||||||
|
uint8_t * buf = new uint8_t[1024 * 1024];
|
||||||
|
char * cstr = new char[1024 * 1024];
|
||||||
|
const char *dcstr;
|
||||||
|
SCoder encoder;
|
||||||
|
SCoder decoder;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < 1024 * 2 - 1; i++) {
|
||||||
|
memset(cstr, 'a', i);
|
||||||
|
cstr[i] = '\0';
|
||||||
|
for (td_endian_t endian : endian_arr) {
|
||||||
|
// Encode
|
||||||
|
tCoderInit(&encoder, endian, buf, 1024 * 1024, TD_ENCODER);
|
||||||
|
|
||||||
|
GTEST_ASSERT_EQ(tEncodeCStr(&encoder, cstr), 0);
|
||||||
|
|
||||||
|
tCoderClear(&encoder);
|
||||||
|
|
||||||
|
// Decode
|
||||||
|
tCoderInit(&decoder, endian, buf, 1024 * 1024, TD_DECODER);
|
||||||
|
|
||||||
|
GTEST_ASSERT_EQ(tDecodeCStr(&decoder, &dcstr), 0);
|
||||||
|
GTEST_ASSERT_EQ(memcmp(dcstr, cstr, i + 1), 0);
|
||||||
|
|
||||||
|
tCoderClear(&decoder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete buf;
|
||||||
|
delete cstr;
|
||||||
|
}
|
Loading…
Reference in New Issue