/* alloc */
p1 = u_arena_alloc(&a, 1);
- T_ASSERT((char *)p1 - (char*)a.data == 0, ("Unable to alloc index is at %d\n", a.o_index));
- T_ASSERT(a.o_index, ("o_index bad\n"));
+ T_ASSERT((char *)p1 - (char*)a.data == 0, ("Unable to alloc index is at %d start address: %p; ptr: %p\n",
+ a.o_index,
+ a.data,
+ p1));
+ T_ASSERT(a.o_index == 1, ("o_index bad\n"));
+
+ p1 = u_arena_alloc(&a, 2);
+ T_ASSERT((char *)p1 - (char*)a.data == 2, ("Unable to alloc index is at %d start address: %p; ptr: %p\n",
+ a.o_index,
+ a.data,
+ p1));
+ T_ASSERT(a.o_index == 3, ("o_index bad\n"));
/* reset */
+ u_arena_clear(&a);
+ T_ASSERT(a.o_index == 0, ("Index not 0"));
/* free */
+ u_arena_free(&a);
+ T_ASSERT(a.data == LRTS_NULL, ("data not null"));
return 0;
}
}
/* get the new start address */
- p = (char *)a->data + a->o_index + a->o_size * n;
+ p = (char *)a->data + a->o_index * a->o_size;
a->o_index = new_o_index;
return p;
}
+
+void u_arena_clear(struct u_arena *a) {
+ lrts_assert(a);
+ a->o_index = 0;
+}
+
+void u_arena_free(struct u_arena *a) {
+ lrts_assert(a);
+ lrts_assert(a->data);
+ u_free(a->data);
+ a->data = LRTS_NULL;
+}