added variant of 'array.contains' and 'array.reverse'
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 17 Mar 2022 18:55:12 +0000 (13:55 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 17 Mar 2022 18:55:12 +0000 (13:55 -0500)
core/container/array.onyx

index adad898989928a89a695186edb2154911876d5e2..745b078a89253412a45d73e0b0161203e6d6112d 100644 (file)
@@ -245,10 +245,17 @@ set :: (arr: [] $T, idx: i32, value: T) {
     arr.data[idx] = value;
 }
 
-// Uses '==' to compare for equality.
-contains :: (arr: [] $T, x: T) -> bool {
-    for it: arr do if it == x do return true;
-    return false;
+contains :: #match {
+    // Uses '==' to compare for equality.
+    (arr: [] $T, x: T) -> bool {
+        for it: arr do if it == x do return true;
+        return false;
+    },
+
+    macro (arr: [] $T, $cmp: Code) -> bool {
+        for it: arr do if #insert cmp do return true;
+        return false;
+    }
 }
 
 // Uses '+' to sum.
@@ -271,6 +278,12 @@ average :: (arr: [] $T) -> T {
     return sum / cast(T) arr.count;
 }
 
+reverse :: (arr: [] $T) {
+    for i: arr.count / 2 {
+        arr[i], arr[arr.count - 1 - i] = arr[arr.count - 1 - i], arr[i];
+    }
+}
+
 //
 // Simple insertion sort
 //    cmp should return >0 if left > right