aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/basetypes/MCIndexSet.cc28
-rw-r--r--src/core/basetypes/MCIndexSet.h4
2 files changed, 32 insertions, 0 deletions
diff --git a/src/core/basetypes/MCIndexSet.cc b/src/core/basetypes/MCIndexSet.cc
index db25f5eb..fe755038 100644
--- a/src/core/basetypes/MCIndexSet.cc
+++ b/src/core/basetypes/MCIndexSet.cc
@@ -396,6 +396,34 @@ void IndexSet::importSerializable(HashMap * serializable)
}
}
+void IndexSet::addIndexSet(IndexSet * indexSet)
+{
+ for(unsigned int i = 0 ; i < indexSet->count() ; i ++) {
+ addRange(indexSet->allRanges()[i]);
+ }
+}
+
+void IndexSet::removeIndexSet(IndexSet * indexSet)
+{
+ for(unsigned int i = 0 ; i < indexSet->count() ; i ++) {
+ removeRange(indexSet->allRanges()[i]);
+ }
+}
+
+void IndexSet::intersectsIndexSet(IndexSet * indexSet)
+{
+ IndexSet * result = new IndexSet();
+ for(unsigned int i = 0 ; i < indexSet->count() ; i ++) {
+ IndexSet * rangeIntersect = (IndexSet *) copy();
+ rangeIntersect->intersectsRange(indexSet->allRanges()[i]);
+ result->addIndexSet(rangeIntersect);
+ rangeIntersect->release();
+ }
+ removeAllIndexes();
+ addIndexSet(result);
+ result->release();
+}
+
static void * createObject()
{
return new IndexSet();
diff --git a/src/core/basetypes/MCIndexSet.h b/src/core/basetypes/MCIndexSet.h
index b1605b90..57fcd538 100644
--- a/src/core/basetypes/MCIndexSet.h
+++ b/src/core/basetypes/MCIndexSet.h
@@ -36,6 +36,10 @@ namespace mailcore {
virtual void removeRange(Range range);
virtual void intersectsRange(Range range);
+ virtual void addIndexSet(IndexSet * indexSet);
+ virtual void removeIndexSet(IndexSet * indexSet);
+ virtual void intersectsIndexSet(IndexSet * indexSet);
+
virtual Range * allRanges();
virtual unsigned int rangesCount();
virtual void removeAllIndexes();