Mercurial > dovecot > core-2.2
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 |
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 | 32 void seq_range_array_merge(ARRAY_TYPE(seq_range) *dest, |
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 | 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 | 63 void seq_range_array_invert(ARRAY_TYPE(seq_range) *array, |
64 uint32_t min_seq, uint32_t max_seq); | |
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 |