Derive-C
Loading...
Searching...
No Matches
container/queue.c

Examples for using queue containers.

Examples for using queue containers.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ITEM int
#define NAME int_queue
static void example_queue() {
DC_SCOPED(int_queue) queue = int_queue_new(stdalloc_get_ref());
for (int i = 1; i <= 5; i++) {
int_queue_push_back(&queue, i);
}
int_queue_debug(&queue, dc_debug_fmt_new(), stdout);
while (int_queue_size(&queue) > 0) {
int value = int_queue_pop_front(&queue);
printf("Popped: %d\n", value);
}
int_queue_debug(&queue, dc_debug_fmt_new(), stdout);
}
#define ITEM int
#define NAME int_deque
static void example_deque() {
DC_SCOPED(int_deque) deque = int_deque_new(stdalloc_get_ref());
int_deque_push_back(&deque, 10);
int_deque_push_back(&deque, 20);
int_deque_pop_front(&deque);
}
struct message {
char* data;
int length;
};
static void message_delete(struct message* self) { free(self->data); }
static struct message message_clone(struct message const* self) {
char* cloned_data = (char*)malloc((size_t)self->length);
memcpy(cloned_data, self->data, (size_t)self->length);
return (struct message){.data = cloned_data, .length = self->length};
}
static void message_debug(struct message const* self, dc_debug_fmt fmt, FILE* stream) {
(void)fmt;
fprintf(stream, "message@%p { data: \"%.*s\", length: %d }", (void*)self, self->length,
self->data, self->length);
}
#define ITEM struct message
#define ITEM_DELETE message_delete
#define ITEM_CLONE message_clone
#define ITEM_DEBUG message_debug
#define NAME message_queue
static void example_custom() {
DC_SCOPED(message_queue) queue = message_queue_new(stdalloc_get_ref());
char* data1 = (char*)malloc(5);
memcpy(data1, "hello", 5); // NOLINT(bugprone-not-null-terminated-result)
struct message msg1 = {.data = data1, .length = 5};
message_queue_push_back(&queue, msg1);
char* data2 = (char*)malloc(5);
memcpy(data2, "world", 5); // NOLINT(bugprone-not-null-terminated-result)
struct message msg2 = {.data = data2, .length = 5};
message_queue_push_back(&queue, msg2);
message_queue_debug(&queue, dc_debug_fmt_new(), stdout);
}
int main() {
return 0;
}
int main()
Definition alloc.c:109
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
#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