aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2014-01-19 20:17:01 -0800
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2014-01-19 20:17:01 -0800
commita0b960cb74975d8bb71b1ccd9cede4207a7d57e3 (patch)
tree1b8918dbf68caecef50f7657c349497c9f2d4f1e /src
parent19019c91102037413b763381a907ba5fbb3a350b (diff)
Added more indexSet helpers
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();