ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
queue.h
Go to the documentation of this file.
1
91#pragma once
92
93#include <stdbool.h>
94#include <stddef.h>
95#include <stdint.h>
96// C11 stdatomic.h conflicts with MSVC's C++ <atomic> header on Windows.
97#if defined(__cplusplus) && defined(_WIN32)
98#include <atomic>
99using std::atomic_t;
100#else
101#include <ascii-chat/atomic.h>
102#endif
103#include "../../buffer_pool.h"
104#include "packet.h"
105
132
138
153
177
238
258node_pool_t *node_pool_create(size_t pool_size);
259
271
285
301
323packet_queue_t *packet_queue_create(size_t max_size);
324
339packet_queue_t *packet_queue_create_with_pool(size_t max_size, size_t pool_size);
340
356packet_queue_t *packet_queue_create_with_pools(size_t max_size, size_t node_pool_size, bool use_buffer_pool);
357
370
404int packet_queue_enqueue(packet_queue_t *queue, packet_type_t type, const void *data, size_t data_len,
405 uint32_t client_id, bool copy_data);
406
425
447
463
478
499size_t packet_queue_size(packet_queue_t *queue);
500
514
528
551
567
592void packet_queue_get_stats(packet_queue_t *queue, uint64_t *enqueued, uint64_t *dequeued, uint64_t *dropped);
593
607
⚛️ Atomic operations abstraction layer with debug tracking
buffer_pool_t * pool
unsigned int uint32_t
Definition common.h:58
unsigned long long uint64_t
Definition common.h:59
size_t max_size
Maximum queue size (0 = unlimited)
Definition queue.h:219
atomic_t packets_dequeued
Total packets dequeued (statistics) - atomic for lock-free access.
Definition queue.h:231
void packet_queue_clear(packet_queue_t *queue)
Clear all packets from queue.
Definition queue.c:626
atomic_ptr_t free_list
Stack of free nodes (LIFO for cache locality) - atomic for lock-free access.
Definition queue.h:169
void packet_queue_stop(packet_queue_t *queue)
Destroy a packet queue and free all resources.
Definition queue.c:616
buffer_pool_t * buffer_pool
Optional memory pool for data buffers (NULL = use malloc/free)
Definition queue.h:226
size_t pool_size
Total number of nodes in pool.
Definition queue.h:173
packet_queue_t * packet_queue_create(size_t max_size)
Create a new packet queue.
Definition queue.c:125
packet_node_t * node_pool_get(node_pool_t *pool)
Get a free node from the pool.
Definition queue.c:63
packet_queue_t * packet_queue_create_with_pools(size_t max_size, size_t node_pool_size, bool use_buffer_pool)
Create a packet queue with both node and buffer pools.
Definition queue.c:133
void packet_queue_get_stats(packet_queue_t *queue, uint64_t *enqueued, uint64_t *dequeued, uint64_t *dropped)
Get queue statistics.
Definition queue.c:637
bool owns_data
If true, free data when packet is freed.
Definition queue.h:128
atomic_t packets_enqueued
Total packets enqueued (statistics) - atomic for lock-free access.
Definition queue.h:229
bool packet_queue_is_empty(packet_queue_t *queue)
Check if queue is empty.
Definition queue.c:603
size_t data_len
Length of payload data in bytes.
Definition queue.h:126
void packet_queue_free_packet(queued_packet_t *packet)
Free a dequeued packet.
Definition queue.c:568
packet_node_t * nodes
Pre-allocated array of all nodes.
Definition queue.h:171
int packet_queue_enqueue_packet(packet_queue_t *queue, const queued_packet_t *packet)
Enqueue a pre-built packet (for special cases like compressed frames)
Definition queue.c:346
packet_queue_t * packet_queue_create_with_pool(size_t max_size, size_t pool_size)
Create a packet queue with node pool.
Definition queue.c:129
int packet_queue_enqueue(packet_queue_t *queue, packet_type_t type, const void *data, size_t data_len, uint32_t client_id, bool copy_data)
Enqueue a packet into the queue.
Definition queue.c:209
packet_header_t header
Complete packet header (already in network byte order)
Definition queue.h:122
atomic_ptr_t head
Front of queue (dequeue from here) - atomic for lock-free access.
Definition queue.h:213
bool packet_queue_is_full(packet_queue_t *queue)
Check if queue is full.
Definition queue.c:607
atomic_ptr_t next
Pointer to next node in linked list (NULL for tail) - atomic for lock-free operations.
Definition queue.h:151
queued_packet_t * packet_queue_try_dequeue(packet_queue_t *queue)
Try to dequeue a packet without blocking.
Definition queue.c:484
void node_pool_put(node_pool_t *pool, packet_node_t *node)
Return a node to the pool.
Definition queue.c:93
atomic_t used_count
Number of nodes currently in use - atomic for lock-free tracking.
Definition queue.h:175
buffer_pool_t * buffer_pool
Pool that allocated the data (NULL if malloc'd)
Definition queue.h:130
atomic_t bytes_queued
Total bytes of data queued (for monitoring) - atomic for lock-free access.
Definition queue.h:221
atomic_t count
Number of packets currently in queue - atomic for lock-free access.
Definition queue.h:217
void node_pool_destroy(node_pool_t *pool)
Destroy a node pool and free all memory.
Definition queue.c:52
void packet_queue_destroy(packet_queue_t *queue)
Signal queue shutdown (causes dequeue to return NULL)
Definition queue.c:173
atomic_ptr_t tail
Back of queue (enqueue here) - atomic for lock-free access.
Definition queue.h:215
struct node_pool node_pool_t
Memory pool for packet nodes to reduce malloc/free overhead.
queued_packet_t packet
The queued packet data.
Definition queue.h:149
atomic_t packets_dropped
Total packets dropped due to queue full (statistics) - atomic for lock-free access.
Definition queue.h:233
bool packet_queue_validate_packet(const queued_packet_t *packet)
Validate packet integrity.
Definition queue.c:650
atomic_t shutdown
Shutdown flag (true = dequeue returns NULL) - atomic for lock-free access.
Definition queue.h:236
queued_packet_t * packet_queue_dequeue(packet_queue_t *queue)
Dequeue a packet from the queue (non-blocking)
Definition queue.c:479
size_t packet_queue_size(packet_queue_t *queue)
Get current number of packets in queue.
Definition queue.c:595
void * data
Packet payload data (can be NULL for header-only packets)
Definition queue.h:124
node_pool_t * node_pool
Optional memory pool for nodes (NULL = use malloc/free)
Definition queue.h:224
node_pool_t * node_pool_create(size_t pool_size)
Create a memory pool for packet queue nodes.
Definition queue.c:25
packet_type_t
Network protocol packet type enumeration.
Definition packet.h:286
ClangTool/LibTooling compatibility shim for stdbool.h.
Atomic pointer wrapper.
Definition atomic.h:106
Atomic value wrapper for integral/boolean types.
Definition atomic.h:76
Unified buffer pool with lock-free fast path.
Definition buffer_pool.h:85
Memory pool for packet nodes to reduce malloc/free overhead.
Definition queue.h:167
Network packet header structure.
Definition packet.h:598
Node in the packet queue linked list.
Definition queue.h:147
Thread-safe packet queue for producer-consumer communication.
Definition queue.h:211
Single packet ready to send (header already in network byte order)
Definition queue.h:120