From ba5ee94871e670fbe1ea091dd5731e593df0b29f Mon Sep 17 00:00:00 2001 From: Zuhaitz Méndez Fernández de Aránguiz Date: Sun, 11 Jan 2026 17:47:30 +0000 Subject: Some std for you --- std/mem.zc | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 std/mem.zc (limited to 'std/mem.zc') diff --git a/std/mem.zc b/std/mem.zc new file mode 100644 index 0000000..3e08e8b --- /dev/null +++ b/std/mem.zc @@ -0,0 +1,77 @@ + +fn alloc() -> T* { + return malloc(sizeof(T)); +} + +fn zalloc() -> T* { + return calloc(1, sizeof(T)); +} + +fn alloc_n(n: usize) -> T* { + return malloc(sizeof(T) * n); +} + +struct Box { + ptr: T*; +} + +impl Box { + fn new() -> Self { + return Self { ptr: calloc(1, sizeof(T)) }; + } + + fn from_ptr(p: T*) -> Self { + return Self { ptr: p }; + } + + fn get(self) -> T* { + return self.ptr; + } + + fn is_null(self) -> bool { + return self.ptr == NULL; + } + + fn free(self) { + if self.ptr != NULL { + free(self.ptr); + } + } +} + +struct Slice { + data: T*; + len: usize; +} + +impl Slice { + fn new(data: T*, len: usize) -> Self { + return Self { data: data, len: len }; + } + + fn get(self, i: usize) -> T { + return self.data[i]; + } + + fn set(self, i: usize, val: T) { + self.data[i] = val; + } + + fn is_empty(self) -> bool { + return self.len == 0; + } +} + +fn mem_zero(ptr: T*, count: usize) { + memset(ptr, 0, sizeof(T) * count); +} + +fn mem_copy(dst: T*, src: T*, count: usize) { + memcpy(dst, src, sizeof(T) * count); +} + +fn swap(a: T*, b: T*) { + var tmp = *a; + *a = *b; + *b = tmp; +} -- cgit v1.2.3