25913be651236abce298516b4f570cbc5828fb1d
6 void *csr_malloc( size_t size
)
8 void *ret
= malloc( size
);
14 void *csr_calloc( size_t size
)
16 void *ret
= calloc( 1, size
);
22 void *csr_sb_raw( void *arr
)
24 return ((u32
*)arr
)-3;
27 u32
csr_sb_count( void *arr
)
29 return arr
? ((u32
*)csr_sb_raw( arr
))[1]: 0;
32 u32
csr_sb_cap( void *arr
)
34 return arr
? ((u32
*)csr_sb_raw( arr
))[0]: 0;
37 void *csr_sb_use( void *arr
)
39 u32
*raw
= (u32
*)csr_sb_raw( arr
);
40 void *data
= ((u8
*)arr
) + raw
[1]*raw
[2];
47 void csr_sb_inc( void *arr
, u32 amt
)
49 u32
*raw
= (u32
*)csr_sb_raw( arr
);
53 __attribute__((warn_unused_result
))
54 void *csr_sb_reserve( void *arr
, u32 amt
, u32 esize
)
56 u32 cap
= arr
? csr_sb_cap( arr
): 0;
57 u32 count
= arr
? csr_sb_count( arr
): 0;
59 if( count
+ amt
> cap
)
61 cap
= csr_max( count
+ amt
, cap
* 2 );
62 u32
*new_ptr
= (u32
*)realloc( arr
? csr_sb_raw( arr
): NULL
, cap
* esize
+ 3*sizeof(u32
) );
71 return (void *)(new_ptr
+3);
79 void csr_sb_free( void *arr
)
83 free( csr_sb_raw( arr
) );
87 void csr_sb_clear( void *arr
)
91 ((u32
*)csr_sb_raw( arr
))[1] = 0;
95 // djb2 - Dan Bernstein
96 unsigned long djb2( unsigned char const *str
)
98 unsigned long hash
= 5381;
102 hash
= ((hash
<< 5) + hash
) + c
; /* hash * 33 + c */