From 7472837ee5a00bd9313e82f71f55b6f76ee7083b Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sun, 18 Aug 2024 22:28:04 -0400 Subject: Add array:first(predicate:func(x:&T)->Bool)->@%T? --- builtins/array.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'builtins/array.c') diff --git a/builtins/array.c b/builtins/array.c index 9c393699..bf1fe4d8 100644 --- a/builtins/array.c +++ b/builtins/array.c @@ -221,6 +221,17 @@ public Int_t Array$find(array_t arr, void *item, const TypeInfo *type) return I(0); } +public void *Array$first(array_t arr, closure_t predicate) +{ + bool (*is_good)(void*, void*) = (void*)predicate.fn; + for (int64_t i = 0; i < arr.length; i++) { + if (is_good(arr.data + i*arr.stride, predicate.userdata)) + return arr.data + i*arr.stride; + } + return NULL; +} + + 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) -- cgit v1.2.3