X-Git-Url: https://harrygodden.com/git/?p=csRadar.git;a=blobdiff_plain;f=csrMem.h;h=46f4e7367e8dc0de9a10f3eb839545189712948a;hp=2c12e44a462c644aa86baa84008cb9e0d958a4ce;hb=HEAD;hpb=1bdd02062cda9b107c4d66586d3c036ea15f6ae2 diff --git a/csrMem.h b/csrMem.h index 2c12e44..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 ) {