WISP ERT (Client)  1.0.0
The WISP Extended Runtime (WISP side)
queue.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "defs.h"
4 
6 #define WIO_QUEUE_AT(queue, type, index) \
7  ((type*)(queue->data+index*queue->item_size))
8 #define WIO_QUEUE_BEGIN(queue, type) \
10  WIO_QUEUE_AT(queue, type, ((queue->begin==0)?(queue->capacity-1):(queue->begin-1)))
11 #define WIO_QUEUE_END(queue, type) \
13  WIO_QUEUE_AT(queue, type, queue->end)
14 
16 typedef struct wio_queue {
18  uint16_t size;
20  uint16_t capacity;
22  uint16_t item_size;
23 
25  uint8_t* data;
26 
28  uint16_t begin;
30  uint16_t end;
31 } wio_queue_t;
32 
41  wio_queue_t* self,
42  uint16_t item_size,
43  uint16_t capacity
44 );
45 
52  wio_queue_t* self
53 );
54 
62  wio_queue_t* self,
63  const void* item
64 );
65 
73  wio_queue_t* self,
74  void* _item
75 );
uint8_t wio_status_t
WIO status type.
Definition: defs.h:40
uint16_t begin
Queue begin.
Definition: queue.h:28
uint16_t size
Queue size.
Definition: queue.h:18
uint16_t item_size
Item size.
Definition: queue.h:22
wio_status_t wio_queue_init(wio_queue_t *self, uint16_t item_size, uint16_t capacity)
Initialize a WIO queue.
Definition: queue.c:8
wio_status_t wio_queue_pop(wio_queue_t *self, void *_item)
Pop an item from the queue.
Definition: queue.c:70
uint16_t end
Queue end.
Definition: queue.h:30
uint8_t * data
Queue data.
Definition: queue.h:25
wio_status_t wio_queue_fini(wio_queue_t *self)
Finalize a WIO queue.
Definition: queue.c:33
uint16_t capacity
Queue capacity.
Definition: queue.h:20
wio_status_t wio_queue_push(wio_queue_t *self, const void *item)
Push an item into the queue.
Definition: queue.c:45
WIO circular queue type.
Definition: queue.h:16