00001 #ifndef Impala_Util_FilterOperations_h
00002 #define Impala_Util_FilterOperations_h
00003
00004 namespace Impala
00005 {
00006 namespace Util
00007 {
00008
00016 bool*
00017 MakeIntersection(bool* set1, bool* set2, int size)
00018 {
00019 bool* result = new bool[size];
00020 for(int i=0 ; i<size ; ++i)
00021 result[i] = set1[i] && set2[i];
00022 return result;
00023 }
00024
00027 bool*
00028 MakeRelativeComplement(bool* set1, bool* set2, int size)
00029 {
00030 bool* result = new bool[size];
00031 for(int i=0 ; i<size ; ++i)
00032 result[i] = set1[i] && !set2[i];
00033 return result;
00034 }
00035
00036
00038 bool*
00039 MakeUnion(bool* set1, bool* set2, int size)
00040 {
00041 bool* result = new bool[size];
00042 for(int i=0 ; i<size ; ++i)
00043 result[i] = set1[i] || set2[i];
00044 return result;
00045 }
00046
00048 int
00049 Count(bool* set, int size)
00050 {
00051 int count=0;
00052 for(int i=0 ; i<size ; ++i)
00053 if(set[i])
00054 ++count;
00055 return count;
00056 }
00057
00063 int
00064 IndexOfNth(bool* set, int size, int n)
00065 {
00066 int count=0;
00067 for(int i=0 ; i<size ; ++i)
00068 if(set[i])
00069 {
00070 if(count==n)
00071 return i;
00072 ++count;
00073 }
00074 return size;
00075 }
00076
00077 bool
00078 Equal(bool* set1, bool* set2, int length)
00079 {
00080 for(int i=0 ; i<length ; ++i)
00081 {
00082 if(set1[i] != set2[i])
00083 return false;
00084 }
00085 return true;
00086 }
00087
00088 }
00089 }
00090
00091 #endif