Valid 3 code version
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
|
||||
|
||||
#include "actracer.h"
|
||||
#include "assert.h"
|
||||
|
||||
#include "queue.h"
|
||||
|
||||
struct QueueFactory {
|
||||
TraceTag tag;
|
||||
struct slab_allocator queue_ele_allocator;
|
||||
};
|
||||
static struct QueueFactory queue_factory;
|
||||
|
||||
void module_queue_factory_init(TraceTag* _softkernel_tag)
|
||||
{
|
||||
CreateResourceTag(&queue_factory.tag, _softkernel_tag, "GlobalQueueFactory", TRACER_SYSOBJECT, &queue_factory);
|
||||
slab_init(&queue_factory.queue_ele_allocator, sizeof(struct QueueNode));
|
||||
}
|
||||
|
||||
void queue_init(Queue* queue)
|
||||
{
|
||||
queue->front = NULL;
|
||||
queue->rear = NULL;
|
||||
queue->nr_ele = 0;
|
||||
}
|
||||
|
||||
struct QueueNode* queue_front(Queue* queue)
|
||||
{
|
||||
return queue->front;
|
||||
}
|
||||
|
||||
bool queue_is_empty(Queue* queue)
|
||||
{
|
||||
if (queue->front == NULL) {
|
||||
assert(queue->nr_ele == 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void dequeue(Queue* queue)
|
||||
{
|
||||
struct QueueNode* temp = queue->front;
|
||||
|
||||
if (queue->front == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (queue->front == queue->rear)
|
||||
queue->front = queue->rear = NULL;
|
||||
else
|
||||
queue->front = queue->front->next;
|
||||
|
||||
queue->nr_ele--;
|
||||
slab_free(&queue_factory.queue_ele_allocator, (void*)temp);
|
||||
}
|
||||
|
||||
void enqueue(Queue* queue, uintptr_t key, void* data)
|
||||
{
|
||||
QueueNode* temp = (struct QueueNode*)slab_alloc(&queue_factory.queue_ele_allocator);
|
||||
temp->key = key;
|
||||
temp->data = data;
|
||||
temp->next = NULL;
|
||||
|
||||
if (queue->front == NULL && queue->rear == NULL) {
|
||||
queue->front = queue->rear = temp;
|
||||
queue->nr_ele++;
|
||||
return;
|
||||
}
|
||||
|
||||
queue->rear->next = temp;
|
||||
queue->rear = temp;
|
||||
queue->nr_ele++;
|
||||
}
|
||||
Reference in New Issue
Block a user