diff --git a/core/exports/librr/memory.h b/core/exports/librr/memory.h index b1ee6a2..b253a79 100644 --- a/core/exports/librr/memory.h +++ b/core/exports/librr/memory.h @@ -4,15 +4,6 @@ #include -typedef struct rr_arena rr_arena_s; - -struct rr_arena -{ - usz_t capacity; - usz_t offset; - char *allocation; -}; - /// @brief Tests if two memory regions overlap partially or completely. /// @param block1 Block to check for overlapping with block2. // If the address of this block is higher than that of block2, the blocks will be swapped internally. @@ -52,10 +43,4 @@ usz_t rr_memrep(void *destination, usz_t num_bytes, void *sequence, usz_t len_se /// @param num_bytes Number of bytes to copy from the source to the destination. void rr_memcopy(void *destination, void *source, usz_t num_bytes); -rr_arena_s rr_new_arena(usz_t capacity); -void rr_delete_arena(rr_arena_s *arena); - -void * rr_arena_alloc(rr_arena_s *arena, usz_t length); -char * rr_arena_clone_string(rr_arena_s *arena, char *string); - #endif // RR_MEMORY_H diff --git a/core/src-c/memory.c b/core/src-c/memory.c index 6b92280..aad9dd5 100644 --- a/core/src-c/memory.c +++ b/core/src-c/memory.c @@ -62,43 +62,3 @@ void rr_memcopy(void *destination, void *source, usz_t num_bytes) for(usz_t index = 0; index < num_bytes; ++index) destination_8[index] = source_8[index]; } - - - -rr_arena_s rr_new_arena(usz_t capacity) -{ - rr_arena_s arena; - arena.capacity = capacity; - arena.offset = 0; - arena.allocation = malloc(capacity); - return arena; -} - -void rr_delete_arena(rr_arena_s *arena) -{ - if(arena->allocation == NULL) return; - free(arena->allocation); - arena->allocation = NULL; -} - - - -void * rr_arena_alloc(rr_arena_s *arena, usz_t length) -{ - if((arena->offset + length) > arena->capacity) - return NULL; - - void *block = &arena->allocation[arena->offset]; - arena->offset += length; - return block; -} - -char * rr_arena_clone_string(rr_arena_s *arena, char *string) -{ - usz_t len_string = rr_measure_string(string); - char *cloned_string = rr_arena_alloc(arena, len_string+1); - rr_memcopy(cloned_string, string, len_string); - cloned_string[len_string] = 0x00; - - return cloned_string; -} diff --git a/platform/exports/librr/alloc/arena.h b/platform/exports/librr/alloc/arena.h new file mode 100644 index 0000000..6831f3a --- /dev/null +++ b/platform/exports/librr/alloc/arena.h @@ -0,0 +1,22 @@ + +#ifndef RR_ARENA_ALLOCATOR_H +#define RR_ARENA_ALLOCATOR_H + +#include + +typedef struct rr_arena rr_arena_s; + +struct rr_arena +{ + usz_t capacity; + usz_t offset; + char *allocation; +}; + +rr_arena_s rr_new_arena(usz_t capacity); +void rr_delete_arena(rr_arena_s *arena); + +void * rr_arena_alloc(rr_arena_s *arena, usz_t length); +char * rr_arena_clone_string(rr_arena_s *arena, const char *string); + +#endif // RR_ARENA_ALLOCATOR_H diff --git a/platform/src-c/alloc/arena.c b/platform/src-c/alloc/arena.c new file mode 100644 index 0000000..8ac3e89 --- /dev/null +++ b/platform/src-c/alloc/arena.c @@ -0,0 +1,41 @@ +#include + +rr_arena_s rr_new_arena(usz_t capacity) +{ + rr_arena_s arena; + arena.capacity = capacity; + arena.offset = 0; + arena.allocation = malloc(capacity); + return arena; +} + +void rr_delete_arena(rr_arena_s *arena) +{ + if(arena->allocation == NULL) return; + free(arena->allocation); + arena->allocation = NULL; +} + + + +void * rr_arena_alloc(rr_arena_s *arena, usz_t length) +{ + if((arena->offset + length) > arena->capacity) + return NULL; + + void *block = &arena->allocation[arena->offset]; + arena->offset += length; + return block; +} + +char * rr_arena_clone_string(rr_arena_s *arena, char *string) +{ + usz_t len_string = rr_measure_string(string); + char *cloned_string = rr_arena_alloc(arena, len_string+1); + if(cloned_string == NULL) + return NULL; + rr_memcopy(cloned_string, string, len_string); + cloned_string[len_string] = 0x00; + + return cloned_string; +}