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
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
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
f0dc2a3dee54 Added seq_range_array_merge()
Timo Sirainen <tss@iki.fi>
parents: 7628
diff changeset
20 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
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
bba1bb98d162 Added seq_range_count().
Timo Sirainen <tss@iki.fi>
parents: 7646
diff changeset
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
3896c75bfaa8 Added seq_range_array_invert()
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
43 /* Invert the sequence range. For example 5:6 -> min_seq:4,7:max_seq. */
3896c75bfaa8 Added seq_range_array_invert()
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
44 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
45 uint32_t min_seq, uint32_t max_seq);
3896c75bfaa8 Added seq_range_array_invert()
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
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