From 639c6ac65a1bd44b2ba0725fe7016a4920bf0950 Mon Sep 17 00:00:00 2001 From: Zuhaitz Méndez Fernández de Aránguiz Date: Mon, 19 Jan 2026 12:53:47 +0000 Subject: Iterables and iterators :D --- std/iter.zc | 9 +++++++++ std/json.zc | 4 +++- std/mem.zc | 4 ++++ std/vec.zc | 26 ++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 std/iter.zc (limited to 'std') diff --git a/std/iter.zc b/std/iter.zc new file mode 100644 index 0000000..a4fdb59 --- /dev/null +++ b/std/iter.zc @@ -0,0 +1,9 @@ +import "./option.zc" + +trait Iterator { + fn next(self) -> Option; +} + +trait Iterable { + fn iterator(self) -> Iterator; +} diff --git a/std/json.zc b/std/json.zc index 64d64ab..cfef2c3 100644 --- a/std/json.zc +++ b/std/json.zc @@ -25,8 +25,10 @@ struct JsonValue { object_val: Map*; } + +alias JsonValuePtr = JsonValue*; + raw { - typedef struct JsonValue* JsonValuePtr; Vec_JsonValuePtr Vec_JsonValuePtr__new(); void Vec_JsonValuePtr__push(Vec_JsonValuePtr* self, JsonValue* item); Map_JsonValuePtr Map_JsonValuePtr__new(); diff --git a/std/mem.zc b/std/mem.zc index 45bc208..5f4de36 100644 --- a/std/mem.zc +++ b/std/mem.zc @@ -11,6 +11,10 @@ fn alloc_n(n: usize) -> T* { return (T*)malloc(sizeof(T) * n); } +trait Drop { + fn drop(self); +} + struct Box { ptr: T*; } diff --git a/std/vec.zc b/std/vec.zc index a25b37b..1d9e6e1 100644 --- a/std/vec.zc +++ b/std/vec.zc @@ -1,5 +1,6 @@ import "./core.zc" +import "./iter.zc" struct Vec { data: T*; @@ -7,10 +8,35 @@ struct Vec { cap: usize; } +struct VecIter { + data: T*; + count: usize; + idx: usize; +} + +impl VecIter { + fn next(self) -> Option { + if (self.idx < self.count) { + var item = self.data[self.idx]; + self.idx = self.idx + 1; + return Option::Some(item); + } + return Option::None(); + } +} + impl Vec { fn new() -> Vec { return Vec { data: 0, len: 0, cap: 0 }; } + + fn iterator(self) -> VecIter { + return VecIter { + data: self.data, + count: self.len, + idx: 0 + }; + } fn push(self, item: T) { if (self.len >= self.cap) { -- cgit v1.2.3