},
}
-#private_file
-fold_idx_elem :: (arr: ^$T, count: i32, cmp: (T, T) -> bool) -> (i32, T) {
- idx := 0;
- elem := arr[0];
-
- for i: 1 .. count {
- if cmp(arr[i], elem) {
- idx = i;
- elem = arr[i];
+fold_idx_elem :: #match {
+ (arr: ^[..] $T, cmp: (T, T) -> bool) -> (i32, T) {
+ return fold_idx_elem(arr.data, arr.count, cmp);
+ },
+
+ (arr: ^$T, count: i32, cmp: (T, T) -> bool) -> (i32, T) {
+ idx := 0;
+ elem := arr[0];
+
+ for i: 1 .. count {
+ if cmp(arr[i], elem) {
+ idx = i;
+ elem = arr[i];
+ }
}
- }
-
- return idx, elem;
+
+ return idx, elem;
+ },
}
#private_file cmp_greater :: (x: $T, y: T) -> bool do return x > y;
return lr.entry_index >= 0;
}
+get :: (use set: ^Set($T), value: T) -> T {
+ lr := lookup(set, value);
+ return entries[lr.entry_index].value if lr.entry_index >= 0 else __zero_value(T);
+}
+
remove :: (use set: ^Set($T), value: T) {
lr := lookup(set, value);
if lr.entry_index < 0 do return;
vtable : ^Stream_Vtable;
}
-#private
+// #private
Stream_Vtable :: struct {
seek : (s: ^Stream, to: i32, whence: SeekFrom) -> Error;
tell : (s: ^Stream) -> (Error, u32);