diff options
author | Kirill Primak <vyivel@eclair.cafe> | 2022-08-19 21:19:30 +0300 |
---|---|---|
committer | Simon Zeni <simon@bl4ckb0ne.ca> | 2022-08-29 13:48:42 +0000 |
commit | 20c208d46a140e148da29730a3adbfa9b88de467 (patch) | |
tree | d4dbb917ec6c7e77692adafc8b87d5e5d3a131f8 /util | |
parent | eee0f5e71f4e3a6ded27d2d5046a243277c00ab8 (diff) |
util/array: unclutter
Diffstat (limited to 'util')
-rw-r--r-- | util/array.c | 46 | ||||
-rw-r--r-- | util/meson.build | 1 | ||||
-rw-r--r-- | util/set.c | 47 |
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; +} |