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