#include 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, idx); } 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); }