aboutsummaryrefslogtreecommitdiff
path: root/builtins
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-04-02 13:13:33 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-04-02 13:13:33 -0400
commit95100469b6c7f301bb14bcda5dbc16b93c9ce0dc (patch)
treef84837f45fdc90b3070bd17583329a89450f6f44 /builtins
parentc73e96ff916209d74e2be9bd7d8de3758685ce4d (diff)
Add array:sorted()
Diffstat (limited to 'builtins')
-rw-r--r--builtins/array.c7
-rw-r--r--builtins/array.h1
2 files changed, 8 insertions, 0 deletions
diff --git a/builtins/array.c b/builtins/array.c
index 84b65ae7..4eea25fb 100644
--- a/builtins/array.c
+++ b/builtins/array.c
@@ -151,6 +151,13 @@ public void Array$sort(array_t *arr, closure_t comparison, const TypeInfo *type)
qsort_r(arr->data, arr->length, item_size, comparison.fn, comparison.userdata);
}
+public array_t Array$sorted(array_t arr, closure_t comparison, const TypeInfo *type)
+{
+ arr.data_refcount = 3;
+ Array$sort(&arr, comparison, type);
+ return arr;
+}
+
public void Array$shuffle(array_t *arr, const TypeInfo *type)
{
int64_t item_size = get_item_size(type);
diff --git a/builtins/array.h b/builtins/array.h
index 7b432194..c6722e6d 100644
--- a/builtins/array.h
+++ b/builtins/array.h
@@ -57,6 +57,7 @@ void Array$insert(array_t *arr, const void *item, int64_t index, const TypeInfo
void Array$insert_all(array_t *arr, array_t to_insert, int64_t index, const TypeInfo *type);
void Array$remove(array_t *arr, int64_t index, int64_t count, const TypeInfo *type);
void Array$sort(array_t *arr, closure_t comparison, const TypeInfo *type);
+array_t Array$sorted(array_t arr, closure_t comparison, const TypeInfo *type);
void Array$shuffle(array_t *arr, const TypeInfo *type);
void *Array$random(array_t arr);
void Array$clear(array_t *array);