]>
Dogcows Code - chaz/homebank/blob - src/refcount.h
8 static inline gpointer
rc_alloc(size_t size
)
10 gpointer chunk
= g_malloc0(size
+ sizeof(long));
12 //g_print("ALLOC: %p (ref %ld)\n", (long*)chunk + 1, *(long*)chunk);
13 return (long*)chunk
+ 1;
16 static inline gpointer
rc_ref(gpointer p
)
18 //g_print(" REF: %p (ref %ld)\n", p, *((long*)p - 1));
25 static inline gboolean
rc_unref(gpointer p
)
27 //g_print("UNREF: %p (ref %ld)\n", p, *((long*)p - 1));
28 if (p
&& --(*((long*)p
- 1)) <= 0) {
34 static inline void rc_free(gpointer p
)
36 //g_print(" FREE: %p (ref %ld)\n", p, *((long*)p - 1));
40 static inline gpointer
rc_dup(gpointer p
, size_t size
)
43 gpointer chunk
= (long*)p
- 1;
44 gpointer new_chunk
= g_memdup(chunk
, size
+ sizeof(long));
45 *(long*)new_chunk
= 1;
46 //g_print(" DUP: %p (ref %ld) -> %p (ref %ld)\n", p, *((long*)p - 1), (long*)new_chunk + 1, *(long*)new_chunk);
47 return (long*)new_chunk
+ 1;
49 //g_print(" DUP: NULL\n");
This page took 0.041264 seconds and 4 git commands to generate.