libmya 0.1.0
Library to parse Mya language.
Loading...
Searching...
No Matches
tkqueue.c File Reference
#include <stdlib.h>
#include "tkqueue.h"
Include dependency graph for tkqueue.c:

Go to the source code of this file.

Functions

void _queue_ensure_size (tkqueue_t *queue)
 
void tkqueue_init (tkqueue_t *queue, unsigned int initial_size)
 Initializes the token queue.
 
void tkqueue_close (tkqueue_t *queue)
 Close the given queue.
 
void tkqueue_add (tkqueue_t *queue, token_t *token)
 Add a value to the token queue.
 
token_ttkqueue_get (tkqueue_t *queue)
 Get the current value from the queue and increment the position for the next value.
 
token_ttkqueue_peek (const tkqueue_t *queue)
 Get the current value from the queue without increment the queue position.
 
int tkqueue_isempty (const tkqueue_t *queue)
 Check if the given queue is empty.
 

Function Documentation

◆ _queue_ensure_size()

void _queue_ensure_size ( tkqueue_t * queue)

Definition at line 58 of file tkqueue.c.

59{
60 if (queue->length < queue->_size) {
61 return;
62 }
63
65 queue->data = realloc(queue->data, sizeof(token_t*) * queue->_size);
66}
token_t ** data
Pointer to queue data with allocated space to fit _size items.
Definition tkqueue.h:11
unsigned int length
The current number of items on the queue.
Definition tkqueue.h:10
unsigned int _size
Current number of elements that fits on the queue.
Definition tkqueue.h:12
#define QUEUE_LENGTH_INCREMENT
Definition tkqueue.h:6
struct token token_t
Struct for a Mya token.

◆ tkqueue_add()

void tkqueue_add ( tkqueue_t * queue,
token_t * token )

Add a value to the token queue.

Parameters
queueThe queue where to add the item.
itemThe value to add.

Definition at line 25 of file tkqueue.c.

26{
27 _queue_ensure_size(queue);
28 queue->data[queue->length++] = token;
29}
Struct for a Mya token.
Definition token.h:34
void _queue_ensure_size(tkqueue_t *queue)
Definition tkqueue.c:58

◆ tkqueue_close()

void tkqueue_close ( tkqueue_t * queue)

Close the given queue.

Parameters
Thequeue to be closed.

Definition at line 18 of file tkqueue.c.

19{
20 free(queue->data);
21 queue->data = NULL;
22}

◆ tkqueue_get()

token_t * tkqueue_get ( tkqueue_t * queue)

Get the current value from the queue and increment the position for the next value.

Parameters
queueThe queue where to get the value.
Returns
NULL when the queue is empty.
Pointer to the item.

Definition at line 32 of file tkqueue.c.

33{
34 if (tkqueue_isempty(queue)) {
35 return NULL;
36 }
37
38 return queue->data[queue->_current++];
39}
int _current
The index for the current item.
Definition tkqueue.h:13
int tkqueue_isempty(const tkqueue_t *queue)
Check if the given queue is empty.
Definition tkqueue.c:52

◆ tkqueue_init()

void tkqueue_init ( tkqueue_t * queue,
unsigned int initial_size )

Initializes the token queue.

Parameters
queueThe queue to be initialized.
initial_sizeThe initial number of items that fit the queue's memory data.

Definition at line 9 of file tkqueue.c.

10{
11 queue->length = 0;
12 queue->_current = 0;
13 queue->_size = initial_size;
14 queue->data = malloc(sizeof(token_t*) * initial_size);
15}

◆ tkqueue_isempty()

int tkqueue_isempty ( const tkqueue_t * queue)

Check if the given queue is empty.

Parameters
queueThe queue to check if it's empty.
Returns
1 on the queue is empty.
0 on the queue has items.

Definition at line 52 of file tkqueue.c.

53{
54 return queue->length == 0 || queue->_current >= queue->length;
55}

◆ tkqueue_peek()

token_t * tkqueue_peek ( const tkqueue_t * queue)

Get the current value from the queue without increment the queue position.

Parameters
queueThe queue where to get the value.
Returns
NULL when the queue is empty.
Pointer to the item.

Definition at line 42 of file tkqueue.c.

43{
44 if (tkqueue_isempty(queue)) {
45 return NULL;
46 }
47
48 return queue->data[queue->_current];
49}