diff options
| author | Fabrice <fabrice@schaub-dev.xyz> | 2026-03-01 19:08:38 +0100 |
|---|---|---|
| committer | Fabrice <fabrice@schaub-dev.xyz> | 2026-03-01 19:08:38 +0100 |
| commit | 62ace5068979d4956abd2897e27eb5e078ac95dc (patch) | |
| tree | 33662761749aefad92d0a5925f2337b3375f4907 /src/common.cc | |
| parent | caa484d1cff738aa218fea7e20c257192977e7e6 (diff) | |
string handling
Diffstat (limited to 'src/common.cc')
| -rw-r--r-- | src/common.cc | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/common.cc b/src/common.cc new file mode 100644 index 0000000..2099e24 --- /dev/null +++ b/src/common.cc @@ -0,0 +1,56 @@ +#ifndef COMMON_CC +#define COMMON_CC + +#include <cstdint> + +/* typedefs for common types */ + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; + +typedef int8_t i8; +typedef int16_t i16; +typedef int32_t i32; +typedef int64_t i64; + +typedef uintptr_t usize; +typedef intptr_t isize; + +/* slice and string handling */ + +template<typename T> +struct Slice { + T* ptr; + usize length; + + slice(T* ptr, usize length) : ptr(ptr), length(length) {} + + T* operator[](usize index) { + return ptr + index; + } +}; + +typedef Slice<u8> String; + +/* allocator handling */ + +typedef u8* (*Allocator_Allocate)(u8* self, usize length, usize align); +typedef void (*Allocator_Deallocate)(u8* self, u8* ptr); + +struct Allocator { + u8* self; + Allocator_Allocate allocate; + Allocator_Deallocate deallocate; +}; + +u8* allocate(Allocator* allocator, usize size, usize align) { + return allocator->allocate(allocator->self, size, align); +} + +void deallocate(Allocator* allocator, u8* ptr) { + allocator->deallocate(allocator->self, ptr); +} + +#endif |
