Mercurial > dovecot > core-2.2
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 |
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 |