dovecot: Added seq_range_array_remove_seq_range() and
dovecot at dovecot.org
dovecot at dovecot.org
Sun Dec 2 23:51:51 EET 2007
details: http://hg.dovecot.org/dovecot/rev/0a3186f44dff
changeset: 6897:0a3186f44dff
user: Timo Sirainen <tss at iki.fi>
date: Sun Dec 02 23:22:28 2007 +0200
description:
Added seq_range_array_remove_seq_range() and
seq_range_array_remove_invert_range().
diffstat:
2 files changed, 44 insertions(+)
src/lib/seq-range-array.c | 38 ++++++++++++++++++++++++++++++++++++++
src/lib/seq-range-array.h | 6 ++++++
diffs (64 lines):
diff -r 139bd6094de6 -r 0a3186f44dff src/lib/seq-range-array.c
--- a/src/lib/seq-range-array.c Sun Dec 02 16:22:44 2007 +0200
+++ b/src/lib/seq-range-array.c Sun Dec 02 23:22:28 2007 +0200
@@ -213,6 +213,44 @@ unsigned int seq_range_array_remove_rang
return remove_count;
}
+unsigned int seq_range_array_remove_seq_range(ARRAY_TYPE(seq_range) *dest,
+ const ARRAY_TYPE(seq_range) *src)
+{
+ unsigned int ret = 0;
+ const struct seq_range *src_range;
+ unsigned int i, count;
+
+ src_range = array_get(src, &count);
+ for (i = 0; i < count; i++) {
+ ret += seq_range_array_remove_range(dest, src_range[i].seq1,
+ src_range[i].seq2);
+ }
+ return ret;
+}
+
+unsigned int
+seq_range_array_remove_invert_range(ARRAY_TYPE(seq_range) *dest,
+ const ARRAY_TYPE(seq_range) *src)
+{
+ const struct seq_range *src_range;
+ unsigned int i, count, ret = 0;
+ uint32_t last_seq = 0;
+
+ src_range = array_get(src, &count);
+ for (i = 0; i < count; i++) {
+ if (last_seq + 1 < src_range[i].seq1) {
+ ret += seq_range_array_remove_range(dest, last_seq + 1,
+ src_range[i].seq1 - 1);
+ }
+ last_seq = src_range[i].seq2;
+ }
+ if (last_seq != (uint32_t)-1) {
+ ret += seq_range_array_remove_range(dest, last_seq + 1,
+ (uint32_t)-1);
+ }
+ return ret;
+}
+
bool seq_range_exists(const ARRAY_TYPE(seq_range) *array, uint32_t seq)
{
unsigned int idx;
diff -r 139bd6094de6 -r 0a3186f44dff src/lib/seq-range-array.h
--- a/src/lib/seq-range-array.h Sun Dec 02 16:22:44 2007 +0200
+++ b/src/lib/seq-range-array.h Sun Dec 02 23:22:28 2007 +0200
@@ -16,6 +16,12 @@ bool seq_range_array_remove(ARRAY_TYPE(s
/* Remove a sequence range. Returns number of sequences actually removed. */
unsigned int seq_range_array_remove_range(ARRAY_TYPE(seq_range) *array,
uint32_t seq1, uint32_t seq2);
+unsigned int seq_range_array_remove_seq_range(ARRAY_TYPE(seq_range) *dest,
+ const ARRAY_TYPE(seq_range) *src);
+/* Remove sequences from dest that don't exist in src. */
+unsigned int
+seq_range_array_remove_invert_range(ARRAY_TYPE(seq_range) *dest,
+ const ARRAY_TYPE(seq_range) *src);
/* Returns TRUE if sequence exists in the range. */
bool seq_range_exists(const ARRAY_TYPE(seq_range) *array, uint32_t seq);
More information about the dovecot-cvs
mailing list