X-Git-Url: https://harrygodden.com/git/?p=csRadar.git;a=blobdiff_plain;f=csrMem.h;h=46f4e7367e8dc0de9a10f3eb839545189712948a;hp=dbcc942566e3e5420290cf773f80978709f101d3;hb=HEAD;hpb=a97099abba0a239e20929f04ece9d6839c96ac14 diff --git a/csrMem.h b/csrMem.h index dbcc942..46f4e73 100644 --- a/csrMem.h +++ b/csrMem.h @@ -1,7 +1,42 @@ -#ifndef CSR_MEM_H -#define CSR_MEM_H +// Copyright (C) 2021 Harry Godden (hgn) -#include "csrTypes.h" +// Memory API +// ================================================================================================================== + +// Malloc call wrapper that will exit if out of memory (similar to xalloc) +void *csr_malloc( size_t size ); +void *csr_calloc( size_t size ); + +// Dynamic arrays (inspired by stb_stretchy_buffer) +// ------------------------------------------------ + +// Reserve x elements of size to this buffer. Must assign back (like realloc) +__attribute__((warn_unused_result)) +void *csr_sb_reserve( void *arr, u32 amt, u32 esize ); + +// Get index of next free data and increment count by 1 +void *csr_sb_use( void *arr ); + +// Increment count by amt +void csr_sb_inc( void *arr, u32 amt ); + +u32 csr_sb_count( void *arr ); +void csr_sb_free( void *arr ); + +// Does not clear memory / capacity, but resets count to 0 +void csr_sb_clear( void *arr ); + +// Internal +void *csr_sb_raw( void *arr ); +u32 csr_sb_cap( void *arr ); + +// djb2 - Dan Bernstein +unsigned long djb2( unsigned char const *str ); + +// Implementation +// ================================================================================================================== + +#ifdef CSR_EXECUTABLE void *csr_malloc( size_t size ) { @@ -11,6 +46,14 @@ void *csr_malloc( size_t size ) return ret; } +void *csr_calloc( size_t size ) +{ + void *ret = calloc( 1, size ); + if( !ret ) + exit(1); + return ret; +} + void *csr_sb_raw( void *arr ) { return ((u32 *)arr)-3; @@ -75,6 +118,14 @@ void csr_sb_free( void *arr ) } } +void csr_sb_clear( void *arr ) +{ + if( arr ) + { + ((u32 *)csr_sb_raw( arr ))[1] = 0; + } +} + // djb2 - Dan Bernstein unsigned long djb2( unsigned char const *str ) {