annotate src/lib/seq-range-array.h @ 22664:fea53c2725c0

director: Fix director_max_parallel_moves/kicks type Should be uint, not time.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 09 Nov 2017 12:24:16 +0200
parents 05e9415e545a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6410
e4eb71ae8e96 Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents: 6040
diff changeset
1 #ifndef SEQ_RANGE_ARRAY_H
e4eb71ae8e96 Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents: 6040
diff changeset
2 #define SEQ_RANGE_ARRAY_H
3716
821035fdc9f6 Moved seq_range_*() functions to more generic ones in lib/.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
821035fdc9f6 Moved seq_range_*() functions to more generic ones in lib/.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 struct seq_range {
821035fdc9f6 Moved seq_range_*() functions to more generic ones in lib/.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 uint32_t seq1, seq2;
821035fdc9f6 Moved seq_range_*() functions to more generic ones in lib/.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 };
7628
af2441dc6de6 Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents: 7127
diff changeset
7 ARRAY_DEFINE_TYPE(seq_range, struct seq_range);
3716
821035fdc9f6 Moved seq_range_*() functions to more generic ones in lib/.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8
7628
af2441dc6de6 Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents: 7127
diff changeset
9 struct seq_range_iter {
af2441dc6de6 Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents: 7127
diff changeset
10 const ARRAY_TYPE(seq_range) *array;
af2441dc6de6 Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents: 7127
diff changeset
11 unsigned int prev_n, prev_idx;
af2441dc6de6 Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents: 7127
diff changeset
12 };
4451
1a35d53c18fc Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
13
18190
230f3579c9b7 lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents: 17312
diff changeset
14 static inline uint32_t ATTR_PURE seq_range_length(struct seq_range *range)
230f3579c9b7 lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents: 17312
diff changeset
15 {
230f3579c9b7 lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents: 17312
diff changeset
16 i_assert(range->seq2 >= range->seq1);
230f3579c9b7 lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents: 17312
diff changeset
17 return range->seq2 - range->seq1 + 1;
230f3579c9b7 lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents: 17312
diff changeset
18 }
230f3579c9b7 lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents: 17312
diff changeset
19
230f3579c9b7 lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents: 17312
diff changeset
20 /* Add sequence to range. If the array isn't created yet, create it with
14676
69ba6977bed8 seq_range_array_add() API changed. Added other functions to provide the less common use cases.
Timo Sirainen <tss@iki.fi>
parents: 11172
diff changeset
21 initial size of init_count. */
14685
67b9119fbd09 seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents: 14682
diff changeset
22 bool ATTR_NOWARN_UNUSED_RESULT
67b9119fbd09 seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents: 14682
diff changeset
23 seq_range_array_add(ARRAY_TYPE(seq_range) *array, uint32_t seq);
14676
69ba6977bed8 seq_range_array_add() API changed. Added other functions to provide the less common use cases.
Timo Sirainen <tss@iki.fi>
parents: 11172
diff changeset
24 /* Like seq_range_array_add(), but if the array isn't already initialized do
69ba6977bed8 seq_range_array_add() API changed. Added other functions to provide the less common use cases.
Timo Sirainen <tss@iki.fi>
parents: 11172
diff changeset
25 it with i_array_init(). */
69ba6977bed8 seq_range_array_add() API changed. Added other functions to provide the less common use cases.
Timo Sirainen <tss@iki.fi>
parents: 11172
diff changeset
26 void seq_range_array_add_with_init(ARRAY_TYPE(seq_range) *array,
69ba6977bed8 seq_range_array_add() API changed. Added other functions to provide the less common use cases.
Timo Sirainen <tss@iki.fi>
parents: 11172
diff changeset
27 unsigned int init_count, uint32_t seq);
7127
010485455f75 Added unoptimized seq_range_array_add_range()
Timo Sirainen <tss@iki.fi>
parents: 6897
diff changeset
28 void seq_range_array_add_range(ARRAY_TYPE(seq_range) *array,
010485455f75 Added unoptimized seq_range_array_add_range()
Timo Sirainen <tss@iki.fi>
parents: 6897
diff changeset
29 uint32_t seq1, uint32_t seq2);
18190
230f3579c9b7 lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents: 17312
diff changeset
30 unsigned int seq_range_array_add_range_count(ARRAY_TYPE(seq_range) *array,
230f3579c9b7 lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents: 17312
diff changeset
31 uint32_t seq1, uint32_t seq2);
7646
f0dc2a3dee54 Added seq_range_array_merge()
Timo Sirainen <tss@iki.fi>
parents: 7628
diff changeset
32 void seq_range_array_merge(ARRAY_TYPE(seq_range) *dest,
f0dc2a3dee54 Added seq_range_array_merge()
Timo Sirainen <tss@iki.fi>
parents: 7628
diff changeset
33 const ARRAY_TYPE(seq_range) *src);
14677
737a49f472d1 seq_range_array_remove() now returns void. Added seq_ranger_array_try_remove().
Timo Sirainen <tss@iki.fi>
parents: 14676
diff changeset
34 /* Remove the given sequrence from range. Returns TRUE if it was found. */
14685
67b9119fbd09 seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents: 14682
diff changeset
35 bool ATTR_NOWARN_UNUSED_RESULT
67b9119fbd09 seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents: 14682
diff changeset
36 seq_range_array_remove(ARRAY_TYPE(seq_range) *array, uint32_t seq);
6040
fef4aad133dd seq_range_array_remove_range() returns now how many sequences were removed.
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
37 /* Remove a sequence range. Returns number of sequences actually removed. */
14685
67b9119fbd09 seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents: 14682
diff changeset
38 unsigned int ATTR_NOWARN_UNUSED_RESULT
67b9119fbd09 seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents: 14682
diff changeset
39 seq_range_array_remove_range(ARRAY_TYPE(seq_range) *array,
67b9119fbd09 seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents: 14682
diff changeset
40 uint32_t seq1, uint32_t seq2);
67b9119fbd09 seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents: 14682
diff changeset
41 unsigned int ATTR_NOWARN_UNUSED_RESULT
67b9119fbd09 seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents: 14682
diff changeset
42 seq_range_array_remove_seq_range(ARRAY_TYPE(seq_range) *dest,
67b9119fbd09 seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents: 14682
diff changeset
43 const ARRAY_TYPE(seq_range) *src);
17312
0d237a4dacd2 Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents: 14685
diff changeset
44 /* Remove count number of sequences from the nth sequence (0 = first). */
0d237a4dacd2 Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents: 14685
diff changeset
45 void seq_range_array_remove_nth(ARRAY_TYPE(seq_range) *array,
0d237a4dacd2 Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents: 14685
diff changeset
46 uint32_t n, uint32_t count);
14682
d0d7b810646b Make sure we check all the functions' return values. Minor API changes to simplify this.
Timo Sirainen <tss@iki.fi>
parents: 14677
diff changeset
47 /* Remove sequences from dest that don't exist in src. */
14685
67b9119fbd09 seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents: 14682
diff changeset
48 unsigned int ATTR_NOWARN_UNUSED_RESULT
67b9119fbd09 seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents: 14682
diff changeset
49 seq_range_array_intersect(ARRAY_TYPE(seq_range) *dest,
67b9119fbd09 seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents: 14682
diff changeset
50 const ARRAY_TYPE(seq_range) *src);
6040
fef4aad133dd seq_range_array_remove_range() returns now how many sequences were removed.
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
51 /* Returns TRUE if sequence exists in the range. */
7912
81806d402514 Added more consts, ATTR_CONSTs and ATTR_PUREs.
Timo Sirainen <tss@iki.fi>
parents: 7905
diff changeset
52 bool seq_range_exists(const ARRAY_TYPE(seq_range) *array,
81806d402514 Added more consts, ATTR_CONSTs and ATTR_PUREs.
Timo Sirainen <tss@iki.fi>
parents: 7905
diff changeset
53 uint32_t seq) ATTR_PURE;
7905
3e8bcf4f6f5e Added seq_range_array_have_common().
Timo Sirainen <tss@iki.fi>
parents: 7886
diff changeset
54 /* Returns TRUE if arrays have common sequences. */
3e8bcf4f6f5e Added seq_range_array_have_common().
Timo Sirainen <tss@iki.fi>
parents: 7886
diff changeset
55 bool seq_range_array_have_common(const ARRAY_TYPE(seq_range) *array1,
7912
81806d402514 Added more consts, ATTR_CONSTs and ATTR_PUREs.
Timo Sirainen <tss@iki.fi>
parents: 7905
diff changeset
56 const ARRAY_TYPE(seq_range) *array2) ATTR_PURE;
7668
bba1bb98d162 Added seq_range_count().
Timo Sirainen <tss@iki.fi>
parents: 7646
diff changeset
57 /* Return number of sequences in the range. */
7912
81806d402514 Added more consts, ATTR_CONSTs and ATTR_PUREs.
Timo Sirainen <tss@iki.fi>
parents: 7905
diff changeset
58 unsigned int seq_range_count(const ARRAY_TYPE(seq_range) *array) ATTR_PURE;
3716
821035fdc9f6 Moved seq_range_*() functions to more generic ones in lib/.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59
21274
05e9415e545a lib: Comment seq_range_array_invert() that its values must be within min_seq..max_seq
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 18190
diff changeset
60 /* Invert the sequence range. For example 5:6 -> min_seq:4,7:max_seq.
05e9415e545a lib: Comment seq_range_array_invert() that its values must be within min_seq..max_seq
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 18190
diff changeset
61 The array must not have any sequences outside min_seq..max_seq or this
05e9415e545a lib: Comment seq_range_array_invert() that its values must be within min_seq..max_seq
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 18190
diff changeset
62 function will assert-crash. */
6758
3896c75bfaa8 Added seq_range_array_invert()
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
63 void seq_range_array_invert(ARRAY_TYPE(seq_range) *array,
3896c75bfaa8 Added seq_range_array_invert()
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
64 uint32_t min_seq, uint32_t max_seq);
3896c75bfaa8 Added seq_range_array_invert()
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
65
7628
af2441dc6de6 Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents: 7127
diff changeset
66 void seq_range_array_iter_init(struct seq_range_iter *iter_r,
af2441dc6de6 Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents: 7127
diff changeset
67 const ARRAY_TYPE(seq_range) *array);
af2441dc6de6 Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents: 7127
diff changeset
68 /* Get the nth sequence (0 = first). Returns FALSE if idx is too large. */
af2441dc6de6 Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents: 7127
diff changeset
69 bool seq_range_array_iter_nth(struct seq_range_iter *iter, unsigned int n,
af2441dc6de6 Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents: 7127
diff changeset
70 uint32_t *seq_r);
af2441dc6de6 Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents: 7127
diff changeset
71
3716
821035fdc9f6 Moved seq_range_*() functions to more generic ones in lib/.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 #endif