Esempio n. 1
0
void* write_kv(void *buf, sized_buf key, sized_buf value)
{
    uint8_t *dst = buf;
    *(raw_kv_length*)dst = encode_kv_length((uint32_t)key.size, (uint32_t)value.size);
    dst += sizeof(raw_kv_length);
    memcpy(dst, key.buf, key.size);
    dst += key.size;
    memcpy(dst, value.buf, value.size);
    dst += value.size;
    return dst;
}
Esempio n. 2
0
static size_t assemble_seq_index_value(DocInfo *docinfo, char *dst)
{
    char* const start = dst;
    raw_seq_index_value *raw = (raw_seq_index_value*)dst;
    raw->sizes = encode_kv_length(docinfo->id.size, docinfo->size);
    raw->bp = encode_raw48(docinfo->bp | (docinfo->deleted ? 1LL<<47 : 0));
    raw->content_meta = encode_raw08(docinfo->content_meta);
    raw->rev_seq = encode_raw48(docinfo->rev_seq);
    dst += sizeof(*raw);

    memcpy(dst, docinfo->id.buf, docinfo->id.size);
    dst += docinfo->id.size;
    memcpy(dst, docinfo->rev_meta.buf, docinfo->rev_meta.size);
    dst += docinfo->rev_meta.size;
    return dst - start;
}
Esempio n. 3
0
static void test_bitfield_fns(void)
{
    uint8_t expected1[8] = {0x12, 0x34, 0x56, 0x78, 0x90};
    uint8_t expected2[8] = {0x09, 0x87, 0x65, 0x43, 0x21};
    uint8_t expected3[8] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB};
    uint8_t expected4[8] = {0xBA, 0x98, 0x76, 0x54, 0x32, 0x10};
    struct {
        raw_08 a;
        raw_48 b;
        raw_16 c;
        raw_40 d;
        raw_32 e;
        raw_08 f;
    } packed;
    raw_kv_length kv;
    uint32_t klen, vlen;

    assert(sizeof(cs_off_t) == 8);

    assert(sizeof(raw_08) == 1);
    assert(sizeof(raw_16) == 2);
    assert(sizeof(raw_32) == 4);
    assert(sizeof(raw_40) == 5);
    assert(sizeof(raw_48) == 6);

    assert(sizeof(packed) == 19);

    assert(sizeof(kv) == 5);
    kv = encode_kv_length(1234, 123456);
    decode_kv_length(&kv, &klen, &vlen);
    assert(klen == 1234);
    assert(vlen == 123456);

    test_raw_08(0);
    test_raw_08(UINT8_MAX);
    test_raw_16(0);
    test_raw_16(12345);
    test_raw_16(UINT16_MAX);
    test_raw_32(0);
    test_raw_32(12345678);
    test_raw_32(UINT32_MAX);

    test_raw_40(INT64_C(0x1234567890), expected1);
    test_raw_40(INT64_C(0x0987654321), expected2);
    test_raw_48(INT64_C(0x1234567890AB), expected3);
    test_raw_48(INT64_C(0xBA9876543210), expected4);
}