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/option.zc | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 std/option.zc (limited to 'std/option.zc') diff --git a/std/option.zc b/std/option.zc new file mode 100644 index 0000000..5652bd7 --- /dev/null +++ b/std/option.zc @@ -0,0 +1,53 @@ + +import "./core.zc" + +struct Option { + is_some: bool; + val: T; +} + +impl Option { + fn Some(v: T) -> Option { + return Option { is_some: true, val: v }; + } + + fn None() -> Option { + return Option { is_some: false, val: 0 }; + } + + fn is_some(self) -> bool { + return self.is_some; + } + + fn is_none(self) -> bool { + return !self.is_some; + } + + fn unwrap(self) -> T { + if (!self.is_some) { + !"Panic: unwrap called on None"; + exit(1); + } + return self.val; + } + + fn unwrap_or(self, def_val: T) -> T { + if (self.is_some) { + return self.val; + } + return def_val; + } + + fn expect(self, msg: char*) -> T { + if (!self.is_some) { + !"Panic: {msg}"; + exit(1); + } + return self.val; + } + + fn or_else(self, other: Option) -> Option { + if self.is_some { return *self; } + return other; + } +} -- cgit v1.2.3