aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/util/array.h17
-rw-r--r--include/util/set.h25
-rw-r--r--types/seat/wlr_seat_pointer.c2
-rw-r--r--types/tablet_v2/wlr_tablet_v2_tool.c2
-rw-r--r--types/wlr_keyboard.c2
-rw-r--r--util/array.c46
-rw-r--r--util/meson.build1
-rw-r--r--util/set.c47
8 files changed, 76 insertions, 66 deletions
diff --git a/include/util/array.h b/include/util/array.h
index 2b7278cc..a51bdb64 100644
--- a/include/util/array.h
+++ b/include/util/array.h
@@ -1,27 +1,10 @@
#ifndef UTIL_ARRAY_H
#define UTIL_ARRAY_H
-#include <stdint.h>
#include <stdlib.h>
#include <stdbool.h>
#include <wayland-util.h>
-size_t push_zeroes_to_end(uint32_t arr[], size_t n);
-
-/**
- * Add `target` to `values` if it doesn't exist
- * "set"s should only be modified with set_* functions
- * Values MUST be greater than 0
- */
-bool set_add(uint32_t values[], size_t *len, size_t cap, uint32_t target);
-
-/**
- * Remove `target` from `values` if it exists
- * "set"s should only be modified with set_* functions
- * Values MUST be greater than 0
- */
-bool set_remove(uint32_t values[], size_t *len, size_t cap, uint32_t target);
-
/**
* Remove a chunk of memory of the specified size at the specified offset.
*/
diff --git a/include/util/set.h b/include/util/set.h
new file mode 100644
index 00000000..41099621
--- /dev/null
+++ b/include/util/set.h
@@ -0,0 +1,25 @@
+#ifndef UTIL_SET_H
+#define UTIL_SET_H
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+size_t push_zeroes_to_end(uint32_t arr[], size_t n);
+
+/**
+ * Add `target` to `values` if it doesn't exist
+ * "set"s should only be modified with set_* functions
+ * Values MUST be greater than 0
+ */
+bool set_add(uint32_t values[], size_t *len, size_t cap, uint32_t target);
+
+/**
+ * Remove `target` from `values` if it exists
+ * "set"s should only be modified with set_* functions
+ * Values MUST be greater than 0
+ */
+bool set_remove(uint32_t values[], size_t *len, size_t cap, uint32_t target);
+
+#endif
+
diff --git a/types/seat/wlr_seat_pointer.c b/types/seat/wlr_seat_pointer.c
index 5a6cb235..8d6154b0 100644
--- a/types/seat/wlr_seat_pointer.c
+++ b/types/seat/wlr_seat_pointer.c
@@ -7,7 +7,7 @@
#include <wlr/types/wlr_compositor.h>
#include <wlr/util/log.h>
#include "types/wlr_seat.h"
-#include "util/array.h"
+#include "util/set.h"
static void default_pointer_enter(struct wlr_seat_pointer_grab *grab,
struct wlr_surface *surface, double sx, double sy) {
diff --git a/types/tablet_v2/wlr_tablet_v2_tool.c b/types/tablet_v2/wlr_tablet_v2_tool.c
index a2d7778c..9590cd88 100644
--- a/types/tablet_v2/wlr_tablet_v2_tool.c
+++ b/types/tablet_v2/wlr_tablet_v2_tool.c
@@ -10,7 +10,7 @@
#include <wlr/types/wlr_tablet_tool.h>
#include <wlr/types/wlr_tablet_v2.h>
#include <wlr/util/log.h>
-#include "util/array.h"
+#include "util/set.h"
#include "util/time.h"
#include "tablet-unstable-v2-protocol.h"
diff --git a/types/wlr_keyboard.c b/types/wlr_keyboard.c
index 3fe3ba7a..5150af87 100644
--- a/types/wlr_keyboard.c
+++ b/types/wlr_keyboard.c
@@ -8,7 +8,7 @@
#include <wlr/util/log.h>
#include "interfaces/wlr_input_device.h"
#include "types/wlr_keyboard.h"
-#include "util/array.h"
+#include "util/set.h"
#include "util/shm.h"
#include "util/time.h"
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;
+}