aboutsummaryrefslogtreecommitdiff
path: root/builtins/array.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-08-15 03:01:04 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-08-15 03:01:04 -0400
commit688f883e16e98a94c9654fa2bf6fc8257f01e2e6 (patch)
treebd2bf0ea244eebaa308e5489fd99c418395def38 /builtins/array.c
parent66ae30ac29d93ac7346bbb465e6c49f540ec4079 (diff)
Add array:find()
Diffstat (limited to 'builtins/array.c')
-rw-r--r--builtins/array.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/builtins/array.c b/builtins/array.c
index b310e43d..9c393699 100644
--- a/builtins/array.c
+++ b/builtins/array.c
@@ -211,6 +211,16 @@ public void Array$remove_item(array_t *arr, void *item, Int_t max_removals, cons
}
}
+public Int_t Array$find(array_t arr, void *item, const TypeInfo *type)
+{
+ const TypeInfo *item_type = type->ArrayInfo.item;
+ for (int64_t i = 0; i < arr.length; i++) {
+ if (generic_equal(item, arr.data + i*arr.stride, item_type))
+ return I(i+1);
+ }
+ return I(0);
+}
+
public void Array$sort(array_t *arr, closure_t comparison, int64_t padded_item_size)
{
if (arr->data_refcount != 0 || (int64_t)arr->stride != padded_item_size)