objc

event.h
Go to the documentation of this file.
1 
38 #pragma once
39 #include "sync.h"
40 #include <stdbool.h>
41 #include <stddef.h>
42 #include <stdint.h>
43 
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47 
55 typedef void *sys_event_t;
56 
66 typedef struct {
67  sys_event_t *items;
68  size_t capacity;
69  size_t head;
70  size_t tail;
71  size_t count;
74  bool shutdown;
76 
89 
100 
112 bool sys_event_queue_push(sys_event_queue_t *queue, sys_event_t event);
113 
124 bool sys_event_queue_try_push(sys_event_queue_t *queue, sys_event_t event);
125 
137 sys_event_t sys_event_queue_peek(sys_event_queue_t *queue);
138 
149 sys_event_t sys_event_queue_pop(sys_event_queue_t *queue);
150 
160 sys_event_t sys_event_queue_try_pop(sys_event_queue_t *queue);
161 
174  uint32_t timeout_ms);
175 
187 
199 
210 
221 
231 
238 static inline bool sys_event_queue_valid(sys_event_queue_t *queue) {
239  // Check if the queue pointer is valid and has a non-zero capacity
240  if (queue == NULL) {
241  return false;
242  }
243  if (queue->items == NULL || queue->capacity == 0) {
244  return false;
245  }
246  // Ensure the queue is not in a shutdown state
247  if (queue->shutdown == true) {
248  return false;
249  }
250  return true;
251 }
252 
253 #ifdef __cplusplus
254 }
255 #endif
Mutex context structure.
Definition: sync.h:69
bool sys_event_queue_push(sys_event_queue_t *queue, sys_event_t event)
Push an event to the queue (always succeeds)
Event queue structure for producer/consumer patterns.
Definition: event.h:66
sys_event_t sys_event_queue_try_pop(sys_event_queue_t *queue)
Try to remove and return the next event (non-blocking)
sys_event_t sys_event_queue_pop(sys_event_queue_t *queue)
Remove and return the next event (blocking)
size_t sys_event_queue_size(sys_event_queue_t *queue)
Get the current number of events in the queue.
void * sys_event_t
Event type for queue items.
Definition: event.h:55
sys_mutex_t mutex
Protects all queue state.
Definition: event.h:72
sys_event_t * items
Array of event items.
Definition: event.h:67
static bool sys_event_queue_valid(sys_event_queue_t *queue)
Check if the queue is valid and usable for operations.
Definition: event.h:238
sys_cond_t not_empty
Signals consumers when items available.
Definition: event.h:73
size_t capacity
Maximum queue size.
Definition: event.h:68
sys_event_queue_t sys_event_queue_init(size_t capacity)
Initialize a new event queue.
size_t tail
Read position (consumer index)
Definition: event.h:70
size_t head
Write position (producer index)
Definition: event.h:69
Condition variable context structure.
Definition: sync.h:85
void sys_event_queue_finalize(sys_event_queue_t *queue)
Finalize and cleanup an event queue.
bool shutdown
Flag for graceful shutdown.
Definition: event.h:74
size_t count
Current number of items.
Definition: event.h:71
void sys_event_queue_shutdown(sys_event_queue_t *queue)
Shut down the queue gracefully.
bool sys_event_queue_lock(sys_event_queue_t *queue)
Lock the queue for manual synchronization.
sys_event_t sys_event_queue_timed_pop(sys_event_queue_t *queue, uint32_t timeout_ms)
Remove and return the next event with timeout.
bool sys_event_queue_unlock(sys_event_queue_t *queue)
Unlock the queue after manual synchronization.
Synchronization primitives for thread-safe operations.
sys_event_t sys_event_queue_peek(sys_event_queue_t *queue)
Peek at the next event without removing it.
bool sys_event_queue_try_push(sys_event_queue_t *queue, sys_event_t event)
Try to push an event without overwriting.
bool sys_event_queue_empty(sys_event_queue_t *queue)
Check if the queue is empty.