Files
coven/core/queue.jai

40 lines
964 B
Plaintext

Queue :: struct(Value_Type : Type) {
count: s64;
values: [..] Value_Type;
}
enqueue :: (queue: *Queue, value: queue.Value_Type) {
array_add(*queue.values, value);
queue.count = queue.values.count;
}
dequeue :: (queue: *Queue) -> queue.Value_Type {
val : queue.Value_Type;
if queue.values.count > 0 {
val = queue.values[0];
if queue.values.count > 1 {
memcpy(*queue.values.data[0], *queue.values.data[1], (queue.values.count - 1) * size_of(queue.Value_Type));
}
queue.values.count -= 1;
queue.count = queue.values.count;
}
return val;
}
is_queue_empty :: (queue: Queue) -> bool {
return queue.count == 0;
}
for_expansion :: (queue: *Queue, body: Code, flags: For_Flags) #expand {
for `it_index: 0..queue.count-1 {
#if flags & .POINTER {
`it := *queue.values[it_index];
} else {
`it := queue.values[it_index];
}
#insert body;
}
}