This commit is contained in:
2026-01-14 22:03:11 +01:00
commit 70bb065fbe
16 changed files with 935 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
#include <server/task/taskqueue.h>
void TaskQueue_Init(task_queue_t* queue) {
if (!queue) {
TASK_ERR_CODE = TASK_ERR_INVQUEUE;
return;
}
queue->tasks = DYNARR_CREATE(task_t, 1);
}
void TaskQueue_DestroyQueue(task_queue_t* queue) {
if (!queue) {
TASK_ERR_CODE = TASK_ERR_INVQUEUE;
return;
}
if (!queue->tasks) {
TASK_ERR_CODE = TASK_ERR_INVPTR;
return;
}
DynArr_destroy(queue->tasks);
}
void TaskQueue_AddTask(task_queue_t* queue, task_t* task) {
if (!queue) {
TASK_ERR_CODE = TASK_ERR_INVQUEUE;
return;
}
if (!queue->tasks) {
TASK_ERR_CODE = TASK_ERR_INVPTR;
return;
}
if (!task) {
TASK_ERR_CODE = TASK_ERR_INVTASK;
return;
}
DynArr_push_back(queue->tasks, task);
}
void TaskQueue_RemoveTask(task_queue_t* queue, size_t idx) {
if (!queue) {
TASK_ERR_CODE = TASK_ERR_INVQUEUE;
return;
}
if (!queue->tasks) {
TASK_ERR_CODE = TASK_ERR_INVPTR;
return;
}
size_t n = DynArr_size(queue->tasks);
if (idx >= n) { // Index adjusted
TASK_ERR_CODE = TASK_ERR_INVIDX;
return;
}
task_t* ptr = DynArr_at(queue->tasks, idx);
Task_DestroyArgs(ptr);
DynArr_remove(queue->tasks, n);
}
void TaskQueue_RemoveTaskByPtr(task_queue_t* queue, task_t* task) {
if (!queue) {
TASK_ERR_CODE = TASK_ERR_INVQUEUE;
return;
}
if (!queue->tasks) {
TASK_ERR_CODE = TASK_ERR_INVPTR;
return;
}
if (!task) {
TASK_ERR_CODE = TASK_ERR_INVTASK;
return;
}
size_t at = DynArr_at_ptr(queue->tasks, task);
if (at == SIZE_MAX) {
TASK_ERR_CODE = TASK_ERR_INVIDX;
return;
}
DynArr_remove(queue->tasks, at);
}