X-Git-Url: https://harrygodden.com/git/?p=csRadar.git;a=blobdiff_plain;f=csrMem.h;h=46f4e7367e8dc0de9a10f3eb839545189712948a;hp=b2be8e8bcb576d9c68dd3a5895da8b3ae172703b;hb=HEAD;hpb=0399aad1d7374badf037a2696d9e276d71b7a297 diff --git a/csrMem.h b/csrMem.h index b2be8e8..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 ) { @@ -83,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 ) {