summaryrefslogtreecommitdiff
path: root/libevdev/libevdev-int.h
diff options
context:
space:
mode:
Diffstat (limited to 'libevdev/libevdev-int.h')
-rw-r--r--libevdev/libevdev-int.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/libevdev/libevdev-int.h b/libevdev/libevdev-int.h
index d287697..848c1a5 100644
--- a/libevdev/libevdev-int.h
+++ b/libevdev/libevdev-int.h
@@ -61,5 +61,104 @@ struct libevdev {
size_t queue_nsync; /**< number of sync events */
};
+/**
+ * @return a pointer to the next element in the queue, or NULL if the queue
+ * is full.
+ */
+static inline struct input_event*
+queue_push(struct libevdev *dev)
+{
+ if (dev->queue_next >= dev->queue_size)
+ return NULL;
+
+ return &dev->queue[dev->queue_next++];
+}
+
+/**
+ * Set ev to the last element in the queue, removing it from the queue.
+ *
+ * @return 0 on success, 1 if the queue is empty.
+ */
+static inline int
+queue_pop(struct libevdev *dev, struct input_event *ev)
+{
+ if (dev->queue_next == 0)
+ return 1;
+
+ *ev = dev->queue[--dev->queue_next];
+
+ return 0;
+}
+
+/**
+ * Set ev to the first element in the queue, shifting everything else
+ * forward by one.
+ *
+ * @return 0 on success, 1 if the queue is empty.
+ */
+static inline int
+queue_shift(struct libevdev *dev, struct input_event *ev)
+{
+ int i;
+
+ if (dev->queue_next == 0)
+ return 1;
+
+ *ev = dev->queue[0];
+
+ for (i = 0; i < dev->queue_next - 1; i++)
+ dev->queue[i] = dev->queue[i + 1];
+
+ dev->queue_next--;
+
+ return 0;
+}
+
+static inline int
+queue_alloc(struct libevdev *dev, int size)
+{
+ dev->queue = calloc(size, sizeof(struct input_event));
+ if (!dev->queue)
+ return -ENOSPC;
+
+ dev->queue_size = size;
+ dev->queue_next = 0;
+ return 0;
+}
+
+static inline int
+queue_num_elements(struct libevdev *dev)
+{
+ return dev->queue_next;
+}
+
+static inline int
+queue_size(struct libevdev *dev)
+{
+ return dev->queue_size;
+}
+
+static inline int
+queue_num_free_elements(struct libevdev *dev)
+{
+ return dev->queue_size - dev->queue_next - 1;
+}
+
+static inline struct input_event *
+queue_next_element(struct libevdev *dev)
+{
+ return &dev->queue[dev->queue_next];
+}
+
+static inline int
+queue_set_num_elements(struct libevdev *dev, int nelem)
+{
+ if (nelem > dev->queue_size)
+ return 1;
+
+ dev->queue_next = nelem;
+
+ return 0;
+}
#endif