Exemplo n.º 1
0
static inline int
sd_indexadd_keyvalue(sdindex *i, sr *r, sdbuild *build, sdindexpage *p, char *min, char *max)
{
	assert(r->scheme->count <= 8);

	/* min */
	sfv kv[8];
	uint64_t offset;
	int total = 0;
	int part = 0;
	while (part < r->scheme->count) {
		/* read keytab offset */
		min += ss_leb128read(min, &offset);
		/* read key */
		sfv *k = &kv[part];
		char *key = build->k.s + sd_buildref(build)->k + offset;
		uint64_t keysize;
		key += ss_leb128read(key, &keysize);
		k->key = key;
		k->r.size = keysize;
		k->r.offset = 0;
		total += keysize;
		part++;
	}
	p->sizemin = total + (r->scheme->count * sizeof(sfref));
	int rc = ss_bufensure(&i->v, r->a, p->sizemin);
	if (ssunlikely(rc == -1))
		return sr_oom(r->e);
	sf_write(SF_KV, i->v.p, kv, r->scheme->count, NULL, 0);
	ss_bufadvance(&i->v, p->sizemin);

	/* max */
	total = 0;
	part = 0;
	while (part < r->scheme->count) {
		/* read keytab offset */
		max += ss_leb128read(max, &offset);
		/* read key */
		sfv *k = &kv[part];
		char *key = build->k.s + sd_buildref(build)->k + offset;
		uint64_t keysize;
		key += ss_leb128read(key, &keysize);
		k->key = key;
		k->r.size = keysize;
		k->r.offset = 0;
		total += keysize;
		part++;
	}
	p->sizemax = total + (r->scheme->count * sizeof(sfref));
	rc = ss_bufensure(&i->v, r->a, p->sizemax);
	if (ssunlikely(rc == -1))
		return sr_oom(r->e);
	sf_write(SF_KV, i->v.p, kv, r->scheme->count, NULL, 0);
	ss_bufadvance(&i->v, p->sizemax);
	return 0;
}
Exemplo n.º 2
0
static void
ssleb128_test(stc *cx)
{
	char buffer[16];
	int len;
	uint64_t value;

	len = ss_leb128write(buffer, INT8_MAX);
	t( len == 1 );
	value = 0;
	len = ss_leb128read(buffer, &value);
	t( len == 1 );
	t( value == INT8_MAX );

	len = ss_leb128write(buffer, UINT8_MAX);
	t( len == 2 );
	value = 0;
	len = ss_leb128read(buffer, &value);
	t( len == 2 );
	t( value == UINT8_MAX );

	len = ss_leb128write(buffer, INT16_MAX);
	t( len == 3 );
	value = 0;
	len = ss_leb128read(buffer, &value);
	t( len == 3 );
	t( value == INT16_MAX );

	len = ss_leb128write(buffer, UINT16_MAX);
	t( len == 3 );
	value = 0;
	len = ss_leb128read(buffer, &value);
	t( len == 3 );
	t( value == UINT16_MAX );

	len = ss_leb128write(buffer, INT32_MAX);
	t( len == 5 );
	value = 0;
	len = ss_leb128read(buffer, &value);
	t( len == 5 );
	t( value == INT32_MAX );

	len = ss_leb128write(buffer, UINT32_MAX);
	t( len == 5 );
	value = 0;
	len = ss_leb128read(buffer, &value);
	t( len == 5 );
	t( value == UINT32_MAX );

	len = ss_leb128write(buffer, INT64_MAX);
	t( len == 9 );
	value = 0;
	len = ss_leb128read(buffer, &value);
	t( len == 9 );
	t( value == INT64_MAX );

	len = ss_leb128write(buffer, UINT64_MAX);
	t( len == 10 );
	value = 0;
	len = ss_leb128read(buffer, &value);
	t( len == 10 );
	t( value == UINT64_MAX );
}