Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/lib/seq-range-array.h @ 9451:9fff30644260 HEAD
istream-concat: Fixed a lot of bugs.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 26 Oct 2009 17:06:57 -0400 |
parents | 81806d402514 |
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 |
6040
fef4aad133dd
seq_range_array_remove_range() returns now how many sequences were removed.
Timo Sirainen <tss@iki.fi>
parents:
6037
diff
changeset
|
14 /* Add sequrence to range. If the array isn't created yet, create it with |
fef4aad133dd
seq_range_array_remove_range() returns now how many sequences were removed.
Timo Sirainen <tss@iki.fi>
parents:
6037
diff
changeset
|
15 initial size of init_count. */ |
4451
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
16 void seq_range_array_add(ARRAY_TYPE(seq_range) *array, unsigned int init_count, |
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
17 uint32_t seq); |
7127
010485455f75
Added unoptimized seq_range_array_add_range()
Timo Sirainen <tss@iki.fi>
parents:
6897
diff
changeset
|
18 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
|
19 uint32_t seq1, uint32_t seq2); |
7646 | 20 void seq_range_array_merge(ARRAY_TYPE(seq_range) *dest, |
21 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
|
22 /* Remove given sequrence from range. Returns TRUE if it was found. */ |
6037
d911d943438e
Recent flag handling rewrite. Still not perfect with maildir.
Timo Sirainen <tss@iki.fi>
parents:
4932
diff
changeset
|
23 bool 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
|
24 /* Remove a sequence range. Returns number of sequences actually removed. */ |
fef4aad133dd
seq_range_array_remove_range() returns now how many sequences were removed.
Timo Sirainen <tss@iki.fi>
parents:
6037
diff
changeset
|
25 unsigned int seq_range_array_remove_range(ARRAY_TYPE(seq_range) *array, |
fef4aad133dd
seq_range_array_remove_range() returns now how many sequences were removed.
Timo Sirainen <tss@iki.fi>
parents:
6037
diff
changeset
|
26 uint32_t seq1, uint32_t seq2); |
6897
0a3186f44dff
Added seq_range_array_remove_seq_range() and
Timo Sirainen <tss@iki.fi>
parents:
6758
diff
changeset
|
27 unsigned int seq_range_array_remove_seq_range(ARRAY_TYPE(seq_range) *dest, |
0a3186f44dff
Added seq_range_array_remove_seq_range() and
Timo Sirainen <tss@iki.fi>
parents:
6758
diff
changeset
|
28 const ARRAY_TYPE(seq_range) *src); |
7886
d12fc53f71be
Renamed seq_range_array_remove_invert_range() to seq_range_array_intersect().
Timo Sirainen <tss@iki.fi>
parents:
7668
diff
changeset
|
29 /* Remove sequences from dest that don't exist in src. |
d12fc53f71be
Renamed seq_range_array_remove_invert_range() to seq_range_array_intersect().
Timo Sirainen <tss@iki.fi>
parents:
7668
diff
changeset
|
30 Returns the number of sequences actually removed. */ |
6897
0a3186f44dff
Added seq_range_array_remove_seq_range() and
Timo Sirainen <tss@iki.fi>
parents:
6758
diff
changeset
|
31 unsigned int |
7886
d12fc53f71be
Renamed seq_range_array_remove_invert_range() to seq_range_array_intersect().
Timo Sirainen <tss@iki.fi>
parents:
7668
diff
changeset
|
32 seq_range_array_intersect(ARRAY_TYPE(seq_range) *dest, |
d12fc53f71be
Renamed seq_range_array_remove_invert_range() to seq_range_array_intersect().
Timo Sirainen <tss@iki.fi>
parents:
7668
diff
changeset
|
33 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
|
34 /* 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
|
35 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
|
36 uint32_t seq) ATTR_PURE; |
7905
3e8bcf4f6f5e
Added seq_range_array_have_common().
Timo Sirainen <tss@iki.fi>
parents:
7886
diff
changeset
|
37 /* Returns TRUE if arrays have common sequences. */ |
3e8bcf4f6f5e
Added seq_range_array_have_common().
Timo Sirainen <tss@iki.fi>
parents:
7886
diff
changeset
|
38 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
|
39 const ARRAY_TYPE(seq_range) *array2) ATTR_PURE; |
7668 | 40 /* 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
|
41 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
|
42 |
6758 | 43 /* Invert the sequence range. For example 5:6 -> min_seq:4,7:max_seq. */ |
44 void seq_range_array_invert(ARRAY_TYPE(seq_range) *array, | |
45 uint32_t min_seq, uint32_t max_seq); | |
46 | |
7628
af2441dc6de6
Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents:
7127
diff
changeset
|
47 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
|
48 const ARRAY_TYPE(seq_range) *array); |
af2441dc6de6
Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents:
7127
diff
changeset
|
49 /* 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
|
50 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
|
51 uint32_t *seq_r); |
af2441dc6de6
Added seq_range_array_iter_nth()
Timo Sirainen <tss@iki.fi>
parents:
7127
diff
changeset
|
52 |
3716
821035fdc9f6
Moved seq_range_*() functions to more generic ones in lib/.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 #endif |