diff options
author | Raymaekers Luca <raymaekers.luca@gmail.com> | 2024-12-02 00:00:04 +0100 |
---|---|---|
committer | Raymaekers Luca <raymaekers.luca@gmail.com> | 2024-12-02 00:00:04 +0100 |
commit | 5b67e5b2cfd1df47a1fea0ce589f3c899e24f780 (patch) | |
tree | 2d6e723095a39431f048dc17d048fb92b18ae19a /archived/array.h | |
parent | bc4dbc02d2ffeca03ed728f3f1f31d7cc969f655 (diff) |
checkpoint
Diffstat (limited to 'archived/array.h')
-rw-r--r-- | archived/array.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/archived/array.h b/archived/array.h new file mode 100644 index 0000000..04d2f38 --- /dev/null +++ b/archived/array.h @@ -0,0 +1,70 @@ +#include "chatty.h" + +u64 ArrayLength(u8 *Array); +void ArrayInsert(u8 *Array, u64 Position, u8 Element); +void ArrayCopy(u8 *To, u8 *From); +void ArrayDelete(u8* Array, u64 Position); +u8* ArrayCreate(u8* Container, u64 Capacity); + +// EXAMPLE: CREATE +// +// u64 Capacity = 15; +// u8 ArrayContainer[Capacity + sizeof(Capacity)]; +// u8* Array = ArrayCreate(ArrayContainer, Capacity); +// +// EXAMPLE: API +// +// ArrayCopy(Array, (u8*)"Hello, world!"); +// +// ArrayInsert(Array, 3, 'f'); +// ArrayInsert(Array, 3, 'e'); +// Array[14] = 'd'; +// ArrayDelete(Array, 3); + +#ifdef ARRAY_IMPL + +#include <strings.h> +#include <string.h> + +u64 +ArrayLength(u8 *Array) +{ + return *((u64*)(Array - sizeof(u64))); +} + +void +ArrayInsert(u8 *Array, u64 Position, u8 Element) +{ + memmove(Array + Position + 1, Array + Position, ArrayLength(Array) - Position - 1); + Array[Position] = Element; +} + +// Copy null terminated string without copying over the null terminator +void +ArrayCopy(u8 *To, u8 *From) +{ + u32 i = 0; + while (From[i]) + { + To[i] = From[i]; + i++; + } +} + +void +ArrayDelete(u8* Array, u64 Position) +{ + memmove(Array + Position, Array + Position + 1, ArrayLength(Array) - Position - 1); + Array[ArrayLength(Array) - 1] = 0; +} + +u8* +ArrayCreate(u8* Container, u64 Capacity) +{ + *(u64*)Container = Capacity; + u8 *Array = Container + sizeof(Capacity); + bzero(Array, Capacity); + return Array; +} + +#endif |