summaryrefslogtreecommitdiff
path: root/src/common.cc
diff options
context:
space:
mode:
authorFabrice <fabrice@schaub-dev.xyz>2026-03-01 19:08:38 +0100
committerFabrice <fabrice@schaub-dev.xyz>2026-03-01 19:08:38 +0100
commit62ace5068979d4956abd2897e27eb5e078ac95dc (patch)
tree33662761749aefad92d0a5925f2337b3375f4907 /src/common.cc
parentcaa484d1cff738aa218fea7e20c257192977e7e6 (diff)
string handling
Diffstat (limited to 'src/common.cc')
-rw-r--r--src/common.cc56
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