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 */
|