This queue implementation enables a producer and a consumer to communicate via a queue. More...
|
Data Structures |
| struct | CircQueueStruct |
| | The simple version of pcqueue has dropped the function of being expanded if the queue is full. More...
|
| struct | PCQueueStruct |
| | The beginning of definitions for simple pcqueue. More...
|
| struct | PCQueueStruct |
| | The beginning of definitions for simple pcqueue. More...
|
| struct | FreeNodePoolStruct |
| struct | MPSCQueueStruct |
| struct | MPMCDataNodeStruct |
| struct | FreeMPMCNodePoolStruct |
| struct | MPMCQueueStruct |
Typedefs |
| typedef struct CircQueueStruct * | CircQueue |
| typedef struct PCQueueStruct * | PCQueue |
| typedef char ** | DataNode |
| typedef struct FreeNodePoolStruct * | FreeNodePool |
| typedef struct MPSCQueueStruct * | MPSCQueue |
| typedef struct MPMCDataNodeStruct * | MPMCDataNode |
typedef struct
FreeMPMCNodePoolStruct * | FreeMPMCNodePool |
| typedef struct MPMCQueueStruct * | MPMCQueue |
Functions |
| static PCQueue | PCQueueCreate (void) |
| static void | PCQueueDestroy (PCQueue Q) |
| static int | PCQueueEmpty (PCQueue Q) |
| static int | PCQueueLength (PCQueue Q) |
| static char * | PCQueueTop (PCQueue Q) |
| static char * | PCQueuePop (PCQueue Q) |
| static void | PCQueuePush (PCQueue Q, char *data) |
| void | ReportOverflow () |
| static unsigned int | WrappedDifference (unsigned int push, unsigned int pull) |
| static int | QueueFull (unsigned int push, unsigned int pull) |
| static DataNode | DataNodeCreate (void) |
| static FreeNodePool | FreeNodePoolCreate (void) |
| static void | FreeNodePoolDestroy (FreeNodePool q) |
| static DataNode | get_free_node (FreeNodePool q) |
| static void | add_free_node (FreeNodePool q, DataNode available) |
| static MPSCQueue | MPSCQueueCreate (void) |
| static void | MPSCQueueDestroy (MPSCQueue Q) |
| static unsigned int | get_node_index (unsigned int value) |
| static DataNode | get_push_node (MPSCQueue Q, unsigned int push_idx) |
| static DataNode | get_pop_node (MPSCQueue Q, unsigned int pull_idx) |
| static void | check_mem_reclamation (MPSCQueue Q, unsigned int pull_idx, DataNode node) |
| static int | MPSCQueueEmpty (MPSCQueue Q) |
| static int | MPSCQueueLength (MPSCQueue Q) |
| static char * | MPSCQueueTop (MPSCQueue Q) |
| static char * | MPSCQueuePop (MPSCQueue Q) |
| static void | MPSCQueuePush (MPSCQueue Q, char *data) |
| static MPMCDataNode | MPMCDataNodeCreate (void) |
| static FreeMPMCNodePool | FreeMPMCNodePoolCreate (void) |
| static void | FreeMPMCNodePoolDestroy (FreeMPMCNodePool q) |
| static MPMCDataNode | mpmc_get_free_node (FreeMPMCNodePool q) |
| static void | mpmc_add_free_node (FreeMPMCNodePool q, MPMCDataNode available) |
| static MPMCQueue | MPMCQueueCreate (void) |
| static void | MPMCQueueDestroy (MPMCQueue Q) |
| static MPMCDataNode | mpmc_get_push_node (MPMCQueue Q, unsigned int push_idx) |
| static MPMCDataNode | mpmc_get_pop_node (MPMCQueue Q, unsigned int pull_idx) |
| static void | mpmc_check_mem_reclamation (MPMCQueue Q, unsigned int pull_idx, MPMCDataNode node) |
| static int | MPMCQueueEmpty (MPMCQueue Q) |
| static int | MPMCQueueLength (MPMCQueue Q) |
| static char * | MPMCQueueTop (MPMCQueue Q) |
| static char * | MPMCQueuePop (MPMCQueue Q) |
| static void | MPMCQueuePush (MPMCQueue Q, void *data) |
Variables |
| int | DataNodeSize |
| int | MaxDataNodes |
| int | QueueUpperBound |
| int | DataNodeWrap |
| int | QueueWrap |
| int | messageQueueOverflow |
This queue implementation enables a producer and a consumer to communicate via a queue.
The queues are optimized for this situation, they don't require any operating system locks (they do require 32-bit reads and writes to be atomic.) Cautions: there can only be one producer, and one consumer. These queues cannot store null pointers.