/* * bins.cpp * serp++ * * Created by Victor Grishchenko on 3/21/09. * Copyright 2009 Delft Technical University. All rights reserved. * */ #include "bins.h" bool bins::contains (bin b) { set::iterator lo = bits.lower_bound(b); if (lo==bits.end()) return false; if (*lo==b) return true; if (lo->left_foot()<=b) return true; return false; } bin bins::operator |= (bin b) { set::iterator lo = bits.lower_bound(b.left_foot()), up=bits.upper_bound(b); if (up!=bits.end() && up->left_foot()<=b) return *up; if (lo!=up) bits.erase(lo,up); while (bits.find(b.sibling())!=bits.end()) { bits.erase(b.sibling()); b = b.parent(); } bits.insert(b); return b; } /*bool bins::contains (bin b) { set::iterator lb = bits.lower_bound(b); return lb!=bits.end() && (*lb==b || lb->leftFoot()<=b) ; }*/ void bins::operator -= (bin b) { set::iterator lo = bits.lower_bound(b.left_foot()), up=bits.upper_bound(b); if (lo==bits.end()) return; if (lo!=up) bits.erase(lo,up); if (up==bits.end() || up->left_foot()>b) return; bin big = *up; bits.erase(up); while (big!=b) { big = big.child(b); bits.insert(big.sibling()); } }