From fb3aeccd361c1702ff2de92860884782e5d60bdd Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 22 Jun 2020 13:25:19 +0100 Subject: [PATCH] Add built-in `Maybe` --- core/runtime/core.odin | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/core/runtime/core.odin b/core/runtime/core.odin index fd7144d41..5cad2d5cd 100644 --- a/core/runtime/core.odin +++ b/core/runtime/core.odin @@ -310,6 +310,9 @@ Context :: struct { } +@builtin +Maybe :: union(T: typeid) #maybe {T}; + @thread_local global_default_temp_allocator_data: Default_Temp_Allocator; @@ -554,6 +557,19 @@ ordered_remove :: proc(array: ^$D/[dynamic]$T, index: int, loc := #caller_locati pop(array); } +@builtin +pop_front :: proc(array: ^$T/[dynamic]$E) -> (E, bool) #no_bounds_check { + if len(array) == 0 { + return E{}, false; + } + res := array[0]; + if len(array) > 1 { + copy(array[0:], array[1:]); + } + (^Raw_Dynamic_Array)(array).len -= 1; + return res, true; +} + @builtin clear :: proc{clear_dynamic_array, clear_map};