Derive-C
Loading...
Searching...
No Matches
queue.c File Reference
#include <derive-c/alloc/std.h>
#include <derive-c/prelude.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <derive-c/container/queue/circular/template.h>
#include <derive-c/container/queue/deque/template.h>

Go to the source code of this file.

Data Structures

struct  message

Macros

#define ITEM   int
#define NAME   int_queue
#define ITEM   int
#define NAME   int_deque
#define ITEM   struct message
#define ITEM_DELETE   message_delete
#define ITEM_CLONE   message_clone
#define ITEM_DEBUG   message_debug
#define NAME   message_queue

Functions

static void example_queue (DC_LOGGER *parent)
static void example_deque (DC_LOGGER *parent)
static void message_delete (struct message *self)
static struct message message_clone (struct message const *self)
static void message_debug (struct message const *self, dc_debug_fmt fmt, FILE *stream)
static void example_custom (DC_LOGGER *parent)
int main ()

Macro Definition Documentation

◆ ITEM [1/3]

#define ITEM   struct message

Definition at line 11 of file queue.c.

◆ ITEM [2/3]

#define ITEM   int

Definition at line 11 of file queue.c.

◆ ITEM [3/3]

#define ITEM   int

Definition at line 11 of file queue.c.

◆ ITEM_CLONE

#define ITEM_CLONE   message_clone

Definition at line 69 of file queue.c.

◆ ITEM_DEBUG

#define ITEM_DEBUG   message_debug

Definition at line 70 of file queue.c.

◆ ITEM_DELETE

#define ITEM_DELETE   message_delete

Definition at line 68 of file queue.c.

◆ NAME [1/3]

#define NAME   message_queue

Definition at line 12 of file queue.c.

◆ NAME [2/3]

#define NAME   int_deque

Definition at line 12 of file queue.c.

◆ NAME [3/3]

#define NAME   int_queue

Definition at line 12 of file queue.c.

Function Documentation

◆ example_custom()

void example_custom ( DC_LOGGER * parent)
static
Examples
container/queue.c.

Definition at line 74 of file queue.c.

74 {
75 DC_SCOPED(DC_LOGGER) log = DC_LOGGER_NEW(parent, "%s", __func__);
76 DC_SCOPED(message_queue) queue = message_queue_new(stdalloc_get_ref());
77
78 DC_LOG(log, DC_INFO, "pushing two messages");
79 char* data1 = (char*)malloc(5);
80 memcpy(data1, "hello", 5); // NOLINT(bugprone-not-null-terminated-result)
81 struct message msg1 = {.data = data1, .length = 5};
82 message_queue_push_back(&queue, msg1);
83
84 char* data2 = (char*)malloc(5);
85 memcpy(data2, "world", 5); // NOLINT(bugprone-not-null-terminated-result)
86 struct message msg2 = {.data = data2, .length = 5};
87 message_queue_push_back(&queue, msg2);
88
89 DC_LOG(log, DC_INFO, "queue: %s", DC_DEBUG(message_queue_debug, &queue));
90}
#define DC_DEBUG(DEBUG_FN, DEBUG_PTR)
Definition dump.h:92
#define DC_LOGGER
Definition file.h:168
#define DC_SCOPED(type,...)
RAII in C. Call the destructor when the variable goes out of scope.
Definition scope.h:5
#define DC_LOGGER_NEW(...)
Definition prelude.h:21
#define DC_LOG(...)
Definition prelude.h:20
@ DC_INFO
Definition trait.h:8

◆ example_deque()

void example_deque ( DC_LOGGER * parent)
static
Examples
container/queue.c.

Definition at line 38 of file queue.c.

38 {
39 DC_SCOPED(DC_LOGGER) log = DC_LOGGER_NEW(parent, "%s", __func__);
40 DC_SCOPED(int_deque) deque = int_deque_new(stdalloc_get_ref());
41
42 DC_LOG(log, DC_INFO, "push_back 10, push_back 20, pop_front");
43 int_deque_push_back(&deque, 10);
44 int_deque_push_back(&deque, 20);
45 int_deque_pop_front(&deque);
46}

◆ example_queue()

void example_queue ( DC_LOGGER * parent)
static
Examples
container/queue.c.

Definition at line 15 of file queue.c.

15 {
16 DC_SCOPED(DC_LOGGER) log = DC_LOGGER_NEW(parent, "%s", __func__);
17 DC_SCOPED(int_queue) queue = int_queue_new(stdalloc_get_ref());
18
19 DC_LOG(log, DC_INFO, "pushing 1-5 to queue");
20 for (int i = 1; i <= 5; i++) {
21 int_queue_push_back(&queue, i);
22 }
23
24 DC_LOG(log, DC_INFO, "queue: %s", DC_DEBUG(int_queue_debug, &queue));
25
26 while (int_queue_size(&queue) > 0) {
27 int value = int_queue_pop_front(&queue);
28 DC_LOG(log, DC_INFO, "popped: %d", value);
29 }
30
31 DC_LOG(log, DC_INFO, "queue after pops: %s", DC_DEBUG(int_queue_debug, &queue));
32}

◆ main()

int main ( )

Definition at line 92 of file queue.c.

92 {
94 root = NS(DC_LOGGER,
95 new_global)((NS(DC_LOGGER, global_config)){.stream = stdout, .ansi_colours = true},
96 (dc_log_id){"queue"});
97
98 example_queue(&root);
99 example_deque(&root);
100 example_custom(&root);
101 return 0;
102}
#define NS(pre, post)
Definition namespace.h:14
static void example_custom(DC_LOGGER *parent)
Definition queue.c:74
static void example_queue(DC_LOGGER *parent)
Definition queue.c:15
static void example_deque(DC_LOGGER *parent)
Definition queue.c:38

◆ message_clone()

struct message message_clone ( struct message const * self)
static
Examples
container/queue.c.

Definition at line 55 of file queue.c.

55 {
56 char* cloned_data = (char*)malloc((size_t)self->length);
57 memcpy(cloned_data, self->data, (size_t)self->length);
58 return (struct message){.data = cloned_data, .length = self->length};
59}

◆ message_debug()

void message_debug ( struct message const * self,
dc_debug_fmt fmt,
FILE * stream )
static
Examples
container/queue.c.

Definition at line 61 of file queue.c.

61 {
62 (void)fmt;
63 fprintf(stream, "message@%p { data: \"%.*s\", length: %d }", (void*)self, self->length,
64 self->data, self->length);
65}
static DC_PUBLIC FILE * stream(SELF *self)
Definition template.h:108

◆ message_delete()

void message_delete ( struct message * self)
static
Examples
container/queue.c.

Definition at line 53 of file queue.c.

53{ free(self->data); }
char * data
Definition queue.c:49