void SetNodeReg::compare(const IntervalVector& root, const IntervalVector& box,const int& type, bool * flag,unsigned int op) { if(is_leaf()) { //cout<<"leaf box: "<<root<<"of status: "<<status<<" box: "<<box<<endl; switch(op){ case 0: if(status != type){*flag = false;} break; case 1: if(status == type){*flag = true;} break; case 2: if(status == type){*flag = false;} break; } } else if(((op==0||op==2)&& (*flag)) || (op ==1 && !(*flag))) { if(root.intersects(right_box(box))) {right->compare(right_box(root),box,type,flag,op);} if(root.intersects(left_box(box))) {left->compare(left_box(root),box,type,flag,op);} } return; }
void SetNodeReg::findNeighbor(const IntervalVector& box,const IntervalVector& nbox,vector<SetNodeReg*> * neigh) { if(is_leaf()){ if(box.intersects(nbox) && box!=nbox ) neigh->push_back(this); } else if(box.intersects(nbox)) { right->findNeighbor(right_box(box),nbox,neigh); left->findNeighbor(left_box(box),nbox,neigh); } }
int Interset(IntervalVector x, IntervalVector y) { assert(x.size() == y.size()); int res = 2; int i; for(i = 0;i<x.size();i++) { if (!x[i].is_subset(y[i])) { res = 1; break;} } while(i<x.size()) { if(!x.intersects(y)) { res = 0; return res; } i++;} return res;}