int
main(void)
{
    struct scalar_01 *sc0, *sc1;
    mnbytestream_t bs0, bs1;
    mnbytes_t *s;
    ssize_t sz;

    sc0 = scalar_01_new();
    assert(sc0 != NULL);
    sc1 = scalar_01_new();
    assert(sc1 != NULL);

    sc0->id = 123;
    sc0->name = &_foo;
    BYTES_INCREF(sc0->name);
    sc0->weight = 234;
    sc0->impression = EXCELLENT;

    (void)bytestream_init(&bs0, 32);

    sz = scalar_01_pack(&bs0, sc0);
    D8(SPDATA(&bs0), SEOD(&bs0));
    TRACE("sz=%zd", sz);

    s = bytes_new_from_mem_len(SPDATA(&bs0), SEOD(&bs0));
    bytestream_from_bytes(&bs1, s);
    SEOD(&bs1) = BSZ(s);
    //D8(BDATA(s), BSZ(s));

    sz = scalar_01_unpack(&bs1, NULL, sc1);
    TRACE("sz=%zd", sz);


    bytestream_rewind(&bs0);
    sz = scalar_01_dump(&bs0, sc0);
    //D8(SPDATA(&bs0), SEOD(&bs0));
    TRACE("dump: %s", SPDATA(&bs0));
    bytestream_rewind(&bs0);
    sz = scalar_01_dump(&bs0, sc1);
    //D8(SPDATA(&bs0), SEOD(&bs0));
    TRACE("dump: %s", SPDATA(&bs0));

    scalar_01_destroy(&sc0);
    assert(sc0 == NULL);
    scalar_01_destroy(&sc1);
    assert(sc1 == NULL);

    bytestream_fini(&bs0);
    //bytestream_fini(&bs1);
    BYTES_DECREF(&s);

    BYTES_NREF_STATIC_INVARIANT(_foo);

    return 0;
}
Exemple #2
0
static void qjoin(qarena_t *arena) {
	void *p = arena+1;
	void *end = (char *)arena + arena->size;
	while (p && p < end) {
		if (NX(p) < end && ISFREE(p) && ISFREE(NX(p))) {
			SZ(p) += BSZ(NX(p));
		} else {
			p = NX(p);
		}
	}
}
Exemple #3
0
void *qalloc(qarena_t *arena, unsigned size) {
	void *p = arena+1;
	void *end = (char *)arena + arena->size;
	void *n = NULL;

	size = RNDSZ(size);
	
	while (p && p < end) {
		if (!ISFREE(p) || BSZ(p) < size) {
			p = NX(p);
			continue;
		}

		if (BSZ(p) > size) {
			n = (char*)p + size;
			SZ(n) = SZ(p) - size;
			SZ(p) = size;
		}

		ALLOC(p);
		return UPTR(p);
	}
	return NULL;
}