aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorKirill Primak <vyivel@eclair.cafe>2022-08-19 21:19:30 +0300
committerSimon Zeni <simon@bl4ckb0ne.ca>2022-08-29 13:48:42 +0000
commit20c208d46a140e148da29730a3adbfa9b88de467 (patch)
treed4dbb917ec6c7e77692adafc8b87d5e5d3a131f8 /util
parenteee0f5e71f4e3a6ded27d2d5046a243277c00ab8 (diff)
util/array: unclutter
Diffstat (limited to 'util')
-rw-r--r--util/array.c46
-rw-r--r--util/meson.build1
-rw-r--r--util/set.c47
3 files changed, 48 insertions, 46 deletions
diff --git a/util/array.c b/util/array.c
index 9da26127..ec16a7b1 100644
--- a/util/array.c
+++ b/util/array.c
@@ -2,52 +2,6 @@
#include <assert.h>
#include <string.h>
-// https://www.geeksforgeeks.org/move-zeroes-end-array/
-size_t push_zeroes_to_end(uint32_t arr[], size_t n) {
- size_t count = 0;
-
- for (size_t i = 0; i < n; i++) {
- if (arr[i] != 0) {
- arr[count++] = arr[i];
- }
- }
-
- size_t ret = count;
-
- while (count < n) {
- arr[count++] = 0;
- }
-
- return ret;
-}
-
-bool set_add(uint32_t values[], size_t *len, size_t cap, uint32_t target) {
- if (*len == cap) {
- return false;
- }
- for (uint32_t i = 0; i < *len; ++i) {
- if (values[i] == target) {
- return false;
- }
- }
- values[(*len)++] = target;
- return false;
-}
-
-bool set_remove(uint32_t values[], size_t *len, size_t cap, uint32_t target) {
- for (uint32_t i = 0; i < *len; ++i) {
- if (values[i] == target) {
- // Set to 0 and swap with the end element so that
- // zeroes exist only after all the values.
- size_t last_elem_pos = --(*len);
- values[i] = values[last_elem_pos];
- values[last_elem_pos] = 0;
- return true;
- }
- }
- return false;
-}
-
void array_remove_at(struct wl_array *arr, size_t offset, size_t size) {
assert(arr->size >= offset + size);
diff --git a/util/meson.build b/util/meson.build
index 34fc2e23..1cd7f65c 100644
--- a/util/meson.build
+++ b/util/meson.build
@@ -6,6 +6,7 @@ wlr_files += files(
'global.c',
'log.c',
'region.c',
+ 'set.c',
'shm.c',
'time.c',
'token.c',
diff --git a/util/set.c b/util/set.c
new file mode 100644
index 00000000..b3aa18ff
--- /dev/null
+++ b/util/set.c
@@ -0,0 +1,47 @@
+#include "util/set.h"
+
+// https://www.geeksforgeeks.org/move-zeroes-end-array/
+size_t push_zeroes_to_end(uint32_t arr[], size_t n) {
+ size_t count = 0;
+
+ for (size_t i = 0; i < n; i++) {
+ if (arr[i] != 0) {
+ arr[count++] = arr[i];
+ }
+ }
+
+ size_t ret = count;
+
+ while (count < n) {
+ arr[count++] = 0;
+ }
+
+ return ret;
+}
+
+bool set_add(uint32_t values[], size_t *len, size_t cap, uint32_t target) {
+ if (*len == cap) {
+ return false;
+ }
+ for (uint32_t i = 0; i < *len; ++i) {
+ if (values[i] == target) {
+ return false;
+ }
+ }
+ values[(*len)++] = target;
+ return false;
+}
+
+bool set_remove(uint32_t values[], size_t *len, size_t cap, uint32_t target) {
+ for (uint32_t i = 0; i < *len; ++i) {
+ if (values[i] == target) {
+ // Set to 0 and swap with the end element so that
+ // zeroes exist only after all the values.
+ size_t last_elem_pos = --(*len);
+ values[i] = values[last_elem_pos];
+ values[last_elem_pos] = 0;
+ return true;
+ }
+ }
+ return false;
+}