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 ()
static void example_deque ()
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 ()
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 67 of file queue.c.

◆ ITEM_DEBUG

#define ITEM_DEBUG   message_debug

Definition at line 68 of file queue.c.

◆ ITEM_DELETE

#define ITEM_DELETE   message_delete

Definition at line 66 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 ( )
static
Examples
container/queue.c.

Definition at line 72 of file queue.c.

72 {
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}
static DC_PUBLIC dc_debug_fmt dc_debug_fmt_new()
Definition fmt.h:15
#define DC_SCOPED(type,...)
RAII in C. Call the destructor when the variable goes out of scope.
Definition scope.h:5
#define DC_DEBUG_TRACE
Definition debug.h:17

◆ example_deque()

void example_deque ( )
static
Examples
container/queue.c.

Definition at line 37 of file queue.c.

37 {
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}

◆ example_queue()

void example_queue ( )
static
Examples
container/queue.c.

Definition at line 15 of file queue.c.

15 {
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}

◆ main()

int main ( )

Definition at line 89 of file queue.c.

89 {
93 return 0;
94}
static void example_custom()
Definition queue.c:72
static void example_queue()
Definition queue.c:15
static void example_deque()
Definition queue.c:37

◆ message_clone()

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

Definition at line 53 of file queue.c.

53 {
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}

◆ message_debug()

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

Definition at line 59 of file queue.c.

59 {
60 (void)fmt;
61 fprintf(stream, "message@%p { data: \"%.*s\", length: %d }", (void*)self, self->length,
62 self->data, self->length);
63}
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 51 of file queue.c.

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