70 lines
1.6 KiB
C
70 lines
1.6 KiB
C
#include "includes.h"
|
|
|
|
tdQueue* queue_create() {
|
|
tdQueue* queue = (tdQueue*)malloc(sizeof(tdQueue));
|
|
queue->data = NULL;
|
|
queue->size = 0;
|
|
queue->capacity = 0;
|
|
return queue;
|
|
}
|
|
|
|
void queue_decontruct(tdQueue* queue)
|
|
{
|
|
int i = 0;
|
|
while ((i < queue->size) && (queue->data[i] != NULL)) {
|
|
deconstruct_matrix2d(queue->data[i]);
|
|
i++;
|
|
}
|
|
free(queue);
|
|
}
|
|
|
|
bool queue_is_empty(tdQueue* queue)
|
|
{
|
|
return queue->size == 0;
|
|
}
|
|
|
|
int queue_size(tdQueue* queue)
|
|
{
|
|
return queue->size;
|
|
}
|
|
|
|
void queue_enqueue(tdQueue* queue, matrix2d* data)
|
|
{
|
|
if (queue->capacity == queue->size) {
|
|
if (queue->capacity) {
|
|
queue->capacity = ceil(queue->capacity*sqrt(2));
|
|
queue->data = (matrix2d**)realloc(queue->data, sizeof(matrix2d*)*(queue->capacity));
|
|
} else {
|
|
queue->capacity = ceil(sqrt(2));
|
|
queue->data = (matrix2d**)malloc(sizeof(matrix2d*)*(queue->capacity));
|
|
}
|
|
}
|
|
queue->data[queue->size++] = data;
|
|
}
|
|
|
|
matrix2d* queue_dequeue(tdQueue* queue)
|
|
{
|
|
if (queue->data == NULL) return NULL;
|
|
matrix2d* data = queue->data[0];
|
|
for (int i = 1; i < queue->size; i++) {
|
|
queue->data[i-1] = queue->data[i];
|
|
}
|
|
queue->size -= 1;
|
|
return data;
|
|
}
|
|
|
|
matrix2d* queue_peek(tdQueue* queue)
|
|
{
|
|
if (queue->data == NULL) return NULL;
|
|
matrix2d* data = queue->data[0];
|
|
return data;
|
|
}
|
|
|
|
void queue_clear(tdQueue* queue)
|
|
{
|
|
int i = 0;
|
|
while (i < queue->capacity && queue->data[i] != NULL)
|
|
deconstruct_matrix2d((matrix2d*) (queue->data)[i++]);
|
|
queue->size = 0;
|
|
}
|