diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-11 17:47:30 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-11 17:47:30 +0000 |
| commit | ba5ee94871e670fbe1ea091dd5731e593df0b29f (patch) | |
| tree | 3b706a9ab11effa4acb094482f3d657c986ef501 /std/option.zc | |
| parent | aba9191ab3ef0699b0f9507ee3d03161f9ee7771 (diff) | |
Some std for you
Diffstat (limited to 'std/option.zc')
| -rw-r--r-- | std/option.zc | 53 |
1 files changed, 53 insertions, 0 deletions
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<T> { + is_some: bool; + val: T; +} + +impl Option<T> { + fn Some(v: T) -> Option<T> { + return Option<T> { is_some: true, val: v }; + } + + fn None() -> Option<T> { + return Option<T> { 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<T>) -> Option<T> { + if self.is_some { return *self; } + return other; + } +} |
