8 unsigned pa_memblock_count = 0, pa_memblock_total = 0;
10 struct pa_memblock *pa_memblock_new(size_t length) {
11 struct pa_memblock *b = malloc(sizeof(struct pa_memblock)+length);
12 b->type = PA_MEMBLOCK_APPENDED;
17 pa_memblock_total += length;
21 struct pa_memblock *pa_memblock_new_fixed(void *d, size_t length) {
22 struct pa_memblock *b = malloc(sizeof(struct pa_memblock));
23 b->type = PA_MEMBLOCK_FIXED;
28 pa_memblock_total += length;
32 struct pa_memblock *pa_memblock_new_dynamic(void *d, size_t length) {
33 struct pa_memblock *b = malloc(sizeof(struct pa_memblock));
34 b->type = PA_MEMBLOCK_DYNAMIC;
39 pa_memblock_total += length;
43 struct pa_memblock* pa_memblock_ref(struct pa_memblock*b) {
44 assert(b && b->ref >= 1);
49 void pa_memblock_unref(struct pa_memblock*b) {
50 assert(b && b->ref >= 1);
54 if (b->type == PA_MEMBLOCK_DYNAMIC)
58 pa_memblock_total -= b->length;
64 void pa_memblock_unref_fixed(struct pa_memblock *b) {
67 assert(b && b->ref >= 1);
73 d = malloc(b->length);
75 memcpy(d, b->data, b->length);
77 b->type = PA_MEMBLOCK_DYNAMIC;