annotate src/lib/aqueue.h @ 23007:36e01285b5b8

lib: buffer - Improve header comment for buffer_insert() and buffer_delete().
author Stephan Bosch <stephan.bosch@dovecot.fi>
date Mon, 18 Mar 2019 00:52:37 +0100
parents 81806d402514
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7079
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 #ifndef AQUEUE_H
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2 #define AQUEUE_H
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 /* Dynamically growing queue. Use the array directly to access the data,
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 for example:
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 count = queue_count(queue);
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 for (i = 0; i < count; i++) {
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 data = array[queue_idx(i)];
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 }
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 */
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 struct aqueue {
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 struct array *arr;
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 unsigned int head, tail, area_size;
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 bool full;
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 };
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 struct aqueue *aqueue_init(struct array *array);
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 void aqueue_deinit(struct aqueue **aqueue);
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 /* Append item to head */
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 void aqueue_append(struct aqueue *aqueue, const void *data);
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 /* Delete last item from tail */
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 void aqueue_delete_tail(struct aqueue *aqueue);
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 /* Remove item from n'th position */
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 void aqueue_delete(struct aqueue *aqueue, unsigned int n);
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 /* Clear the entire aqueue */
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 void aqueue_clear(struct aqueue *aqueue);
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 /* Returns the number of items in aqueue. */
7912
81806d402514 Added more consts, ATTR_CONSTs and ATTR_PUREs.
Timo Sirainen <tss@iki.fi>
parents: 7079
diff changeset
32 unsigned int aqueue_count(const struct aqueue *aqueue) ATTR_PURE;
7079
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 /* Returns array index of n'th element in aqueue. */
7912
81806d402514 Added more consts, ATTR_CONSTs and ATTR_PUREs.
Timo Sirainen <tss@iki.fi>
parents: 7079
diff changeset
35 static inline unsigned int ATTR_PURE
7079
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 aqueue_idx(const struct aqueue *aqueue, unsigned int n)
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 {
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 return (aqueue->tail + n) % aqueue->area_size;
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 }
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40
d45c3058b91a Renamed queue to aqueue ("array queue") because struct queue already exists
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 #endif