Derive-C
Loading...
Searching...
No Matches
queue.c
Go to the documentation of this file.
1
4
6#include <derive-c/prelude.h>
7#include <stdio.h>
8#include <stdlib.h>
9#include <string.h>
10
11#define ITEM int
12#define NAME int_queue
14
15static void example_queue() {
17 DC_SCOPED(int_queue) queue = int_queue_new(stdalloc_get_ref());
18
19 for (int i = 1; i <= 5; i++) {
20 int_queue_push_back(&queue, i);
21 }
22
23 int_queue_debug(&queue, dc_debug_fmt_new(), stdout);
24
25 while (int_queue_size(&queue) > 0) {
26 int value = int_queue_pop_front(&queue);
27 printf("Popped: %d\n", value);
28 }
29
30 int_queue_debug(&queue, dc_debug_fmt_new(), stdout);
31}
32
33#define ITEM int
34#define NAME int_deque
36
37static void example_deque() {
39 DC_SCOPED(int_deque) deque = int_deque_new(stdalloc_get_ref());
40
41 int_deque_push_back(&deque, 10);
42 int_deque_push_back(&deque, 20);
43 int_deque_pop_front(&deque);
44}
45
46struct message {
47 char* data;
48 int length;
49};
50
51static void message_delete(struct message* self) { free(self->data); }
52
53static struct message message_clone(struct message const* self) {
54 char* cloned_data = (char*)malloc((size_t)self->length);
55 memcpy(cloned_data, self->data, (size_t)self->length);
56 return (struct message){.data = cloned_data, .length = self->length};
57}
58
59static void message_debug(struct message const* self, dc_debug_fmt fmt, FILE* stream) {
60 (void)fmt;
61 fprintf(stream, "message@%p { data: \"%.*s\", length: %d }", (void*)self, self->length,
62 self->data, self->length);
63}
64
65#define ITEM struct message
66#define ITEM_DELETE message_delete
67#define ITEM_CLONE message_clone
68#define ITEM_DEBUG message_debug
69#define NAME message_queue
71
72static void example_custom() {
74 DC_SCOPED(message_queue) queue = message_queue_new(stdalloc_get_ref());
75
76 char* data1 = (char*)malloc(5);
77 memcpy(data1, "hello", 5); // NOLINT(bugprone-not-null-terminated-result)
78 struct message msg1 = {.data = data1, .length = 5};
79 message_queue_push_back(&queue, msg1);
80
81 char* data2 = (char*)malloc(5);
82 memcpy(data2, "world", 5); // NOLINT(bugprone-not-null-terminated-result)
83 struct message msg2 = {.data = data2, .length = 5};
84 message_queue_push_back(&queue, msg2);
85
86 message_queue_debug(&queue, dc_debug_fmt_new(), stdout);
87}
88
89int main() {
93 return 0;
94}
static DC_PUBLIC dc_debug_fmt dc_debug_fmt_new()
Definition fmt.h:15
static void message_debug(struct message const *self, dc_debug_fmt fmt, FILE *stream)
Definition queue.c:59
static void example_custom()
Definition queue.c:72
static void example_queue()
Definition queue.c:15
static struct message message_clone(struct message const *self)
Definition queue.c:53
static void message_delete(struct message *self)
Definition queue.c:51
static void example_deque()
Definition queue.c:37
int main()
Definition queue.c:89
#define DC_SCOPED(type,...)
RAII in C. Call the destructor when the variable goes out of scope.
Definition scope.h:5
Debug format helpers for debug printin data structures.
Definition fmt.h:11
char * data
Definition queue.c:47
int length
Definition queue.c:48
#define DC_DEBUG_TRACE
Definition debug.h:17
static DC_PUBLIC FILE * stream(SELF *self)
Definition template.h:108