bugfixes with core libs
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 23 Aug 2021 21:01:33 +0000 (16:01 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 23 Aug 2021 21:01:33 +0000 (16:01 -0500)
core/container/array.onyx
core/container/set.onyx
core/io/stream.onyx

index 4115b65d58092d852b8cf8d921a6486638276043..16eb82ed4262f6a5f901b5c9a7e145c9c5336c6f 100644 (file)
@@ -402,19 +402,24 @@ count_where :: #match {
     },
 }
 
-#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;
index 9f5b163b7f07f97a3ec6a8d335e53ce0fbd0d9ad..e15a43a7ec47037fae5826c706a8d7ab4636507b 100644 (file)
@@ -57,6 +57,11 @@ has :: (use set: ^Set($T), value: T) -> bool {
     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;
index 9ab53f6d7a859d97c783936ca8ea18b62ff2df57..3d785991a4f8758b4a5568a020b5a8b3201f04e1 100644 (file)
@@ -6,7 +6,7 @@ Stream :: struct {
     vtable : ^Stream_Vtable;
 }
 
-#private
+// #private
 Stream_Vtable :: struct {
     seek         : (s: ^Stream, to: i32, whence: SeekFrom) -> Error;
     tell         : (s: ^Stream) -> (Error, u32);