blob: 3d77e132a23b826c973275b7973302d073eaf797 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#pragma once
// KPL atomic queues
#include "kpl/macro.h"
typedef struct _kpl_task kpl_task;
typedef struct {
kpl_task *_Atomic head, *tail;
struct {
kpl_task *_Atomic next;
} dummy;
} kpl_task_queue;
void kpl_task_queue_init(kpl_task_queue *task_queue);
void kpl_task_queue_add(kpl_task_queue *task_queue, kpl_task *task);
kpl_task *kpl_task_queue_next(kpl_task_queue *task_queue);
typedef struct {
_Atomic ssize_t index;
void *data;
} kpl_ring_queue_item;
typedef struct {
size_t items_mask;
_Atomic ssize_t head_index, tail_index;
kpl_ring_queue_item *items;
} kpl_ring_queue;
void kpl_ring_queue_init(kpl_ring_queue *ring_queue, int8_t size_pow);
void kpl_ring_queue_free(kpl_ring_queue *ring_queue);
bool kpl_ring_queue_add(kpl_ring_queue *ring_queue, void *data);
void *kpl_ring_queue_next(kpl_ring_queue *ring_queue);
|