aboutsummaryrefslogtreecommitdiff
path: root/include/BH/Queue.h
blob: 48d2ce9ca694eaa4c81f435783a3cf919268f9f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#ifndef BH_QUEUE_H
#define BH_QUEUE_H


#include "Common.h"


typedef struct BH_Queue BH_Queue;


/**
 * Creates the new queue.
 *
 * \return  On success, returns the queue pointer.
 * \return  On failure, returns a null pointer.
 */
BH_Queue *BH_QueueNew(void);


/**
 * Frees the \a queue.
 *
 * \param queue  Queue pointer
 */
void BH_QueueFree(BH_Queue *queue);


/**
 * Clears the \a queue.
 *
 * \param queue  Queue pointer
 */
void BH_QueueClear(BH_Queue *queue);


/**
 * Reserves the space for \a size amount of value in the \a queue.
 *
 * This function can both expand and shrink the available space in queue.
 *
 * \param queue  Queue pointer
 * \param size   Capacity
 *
 * \note Calling this function will invalidate iterators.
 * \note Actual queue capacity can be bigger then requested.
 *
 * \return  On success, returns zero.
 * \return  On failure, returns error code.
 */
int BH_QueueReserve(BH_Queue *queue,
                    size_t size);


/**
 * Inserts the \a value into the \a queue.
 *
 * \param queue  Queue pointer
 * \param value  Value
 *
 * \note Calling this function will invalidate iterators.
 *
 * \return  On success, returns zero.
 * \return  On failure, returns error code.
 */
int BH_QueueInsert(BH_Queue *queue,
                   void *value);


/**
 * Removes front value from the \a queue.
 *
 * \param queue  Queue pointer
 *
 * \note Calling this function will invalidate iterators.
 */
void BH_QueueRemove(BH_Queue *queue);


/**
 * Returns front \a value from the \a queue.
 *
 * \param queue  Queue pointer
 * \param value  Value
 *
 * \return  On success, returns zero.
 * \return  On failure, returns error code.
 */
int BH_QueueFront(BH_Queue *queue,
                  void **value);


/**
 * Checks if the \a queue is empty.
 *
 * \param queue  Queue pointer
 *
 * \return  If queue is empty, returns non-zero value
 * \return  If queue is not empty, returns zero
 */
int BH_QueueEmpty(BH_Queue *queue);


/**
 * Returns the size of the \a queue.
 *
 * \param queue  Queue pointer
 *
 * \return  Returns the size of the queue.
 */
size_t BH_QueueSize(BH_Queue *queue);


/**
 * Returns the capacity of the \a queue.
 *
 * \param queue  Queue pointer
 *
 * \return  Returns the capacity of the queue.
 */
size_t BH_QueueCapacity(BH_Queue *queue);


/**
 * Returns the iterator to the next element in the \a queue.
 *
 * \param queue  Queue pointer
 * \param iter   Iterator
 *
 * \return On success, returns new iterator value for the next element.
 * \return On failure, returns NULL pointer.
 */
void *BH_QueueIterNext(BH_Queue *queue,
                       void *iter);


/**
 * Returns the value, pointed by the \a iter.
 *
 * \param iter  Iterator
 *
 * \return  Returns value, pointed by iterator.
 */
void *BH_QueueIterValue(void *iter);


#endif /* BH_QUEUE_H */