#ifndef COMMON_CC #define COMMON_CC #include /* 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 struct Slice { T* ptr; usize length; slice(T* ptr, usize length) : ptr(ptr), length(length) {} T* operator[](usize index) { return ptr + index; } }; typedef Slice 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