fixed instance loading forget to append basepath.. other path fixes (windows)
[csRadar.git] / csrMem.h
index dbcc942566e3e5420290cf773f80978709f101d3..46f4e7367e8dc0de9a10f3eb839545189712948a 100644 (file)
--- 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 )
 {