f1-basic-queue #16
4 changed files with 48 additions and 3 deletions
|
|
@ -40,4 +40,6 @@ typedef struct {
|
||||||
FledastyError fledasty_queue_initialize(FledastyQueue *new_queue);
|
FledastyError fledasty_queue_initialize(FledastyQueue *new_queue);
|
||||||
FledastyError fledasty_queue_destroy(FledastyQueue *current_queue);
|
FledastyError fledasty_queue_destroy(FledastyQueue *current_queue);
|
||||||
|
|
||||||
|
FledastyError fledasty_queue_push(FledastyQueue *current_queue, void *value, const size_t size);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FLEDASTY_ERROR_NONE = 0,
|
FLEDASTY_ERROR_NONE = 0,
|
||||||
FLEDASTY_ERROR_ALLOCATION = 1,
|
FLEDASTY_ERROR_FAILED_ALLOCATION = 1,
|
||||||
FLEDASTY_ERROR_INVALID_POINTER = 2,
|
FLEDASTY_ERROR_INVALID_POINTER = 2,
|
||||||
} FledastyError;
|
} FledastyError;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include <Hallocy/Core/Allocator.h>
|
#include <Hallocy/Core/Allocator.h>
|
||||||
#include <Hallocy/Utils/Error.h>
|
#include <Hallocy/Utils/Error.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
FledastyError fledasty_queue_initialize(FledastyQueue *new_queue) {
|
FledastyError fledasty_queue_initialize(FledastyQueue *new_queue) {
|
||||||
if (new_queue == NULL) {
|
if (new_queue == NULL) {
|
||||||
|
|
@ -49,12 +50,12 @@ FledastyError fledasty_queue_destroy(FledastyQueue *current_queue) {
|
||||||
|
|
||||||
HallocyError error = hallocy_free(previousNode->value);
|
HallocyError error = hallocy_free(previousNode->value);
|
||||||
if (error != HALLOCY_ERROR_NONE) {
|
if (error != HALLOCY_ERROR_NONE) {
|
||||||
return FLEDASTY_ERROR_ALLOCATION;
|
return FLEDASTY_ERROR_FAILED_ALLOCATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
error = hallocy_free(previousNode);
|
error = hallocy_free(previousNode);
|
||||||
if (error != HALLOCY_ERROR_NONE) {
|
if (error != HALLOCY_ERROR_NONE) {
|
||||||
return FLEDASTY_ERROR_ALLOCATION;
|
return FLEDASTY_ERROR_FAILED_ALLOCATION;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -62,5 +63,35 @@ FledastyError fledasty_queue_destroy(FledastyQueue *current_queue) {
|
||||||
current_queue->start = NULL;
|
current_queue->start = NULL;
|
||||||
current_queue->end = NULL;
|
current_queue->end = NULL;
|
||||||
|
|
||||||
|
return FLEDASTY_ERROR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
FledastyError fledasty_queue_push(FledastyQueue *current_queue, void *value, const size_t size) {
|
||||||
|
if (current_queue == NULL || value == NULL) {
|
||||||
|
return FLEDASTY_ERROR_INVALID_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
FledastyQueueNode *new_queue_node = (FledastyQueueNode*)hallocy_malloc(sizeof(FledastyQueueNode));
|
||||||
|
if (new_queue_node == NULL) {
|
||||||
|
return FLEDASTY_ERROR_FAILED_ALLOCATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
new_queue_node->value = (FledastyQueueNode*)hallocy_malloc(size);
|
||||||
|
hallocy_copy_memory(new_queue_node->value, value, size);
|
||||||
|
|
||||||
|
new_queue_node->next = NULL;
|
||||||
|
if (current_queue->start == NULL) {
|
||||||
|
current_queue->start = new_queue_node;
|
||||||
|
current_queue->end = new_queue_node;
|
||||||
|
|
||||||
|
new_queue_node->previous = NULL;
|
||||||
|
} else {
|
||||||
|
new_queue_node->previous = current_queue->end;
|
||||||
|
|
||||||
|
current_queue->end->next = new_queue_node;
|
||||||
|
current_queue->end = new_queue_node;
|
||||||
|
}
|
||||||
|
|
||||||
|
current_queue->size += 1;
|
||||||
return FLEDASTY_ERROR_NONE;
|
return FLEDASTY_ERROR_NONE;
|
||||||
}
|
}
|
||||||
12
Tests/Main.c
12
Tests/Main.c
|
|
@ -25,6 +25,18 @@
|
||||||
int main() {
|
int main() {
|
||||||
FledastyQueue test_queue;
|
FledastyQueue test_queue;
|
||||||
fledasty_queue_initialize(&test_queue);
|
fledasty_queue_initialize(&test_queue);
|
||||||
|
|
||||||
|
int value = 10;
|
||||||
|
for (int i = 0; i < 10; i += 1) {
|
||||||
|
fledasty_queue_push(&test_queue, &i, sizeof(int));
|
||||||
|
}
|
||||||
|
|
||||||
|
FledastyQueueNode *current_node = test_queue.start;
|
||||||
|
for (int i = 0; i < test_queue.size; i++) {
|
||||||
|
printf("Element %d\n", *((int*)current_node->value));
|
||||||
|
current_node = current_node->next;
|
||||||
|
}
|
||||||
|
|
||||||
fledasty_queue_destroy(&test_queue);
|
fledasty_queue_destroy(&test_queue);
|
||||||
|
|
||||||
printf("Done\n");
|
printf("Done\n");
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue