void Region::Shape::appendSpan(int y, SegmentIterator begin, SegmentIterator end) { if (canCoalesce(begin, end)) return; appendSpan(y); m_segments.appendRange(begin, end); }
void BPTree::delete_entry(_F_FileAddr L, pKey_Attr pPrimKey, _F_FileAddr pRec) { BPTreeNode NodeL; NodeL.readNodeFromFile(L); // delete the (V,P) entry if( 1 == NodeL.IsLeaf ) NodeL.deleteKeyInLeaf(pPrimKey); else NodeL.deleteKeyNotLeaf(pPrimKey); // L is root and has only one son and not a leaf if( isRoot(L) && ( 0 == NodeL.ItemOnNode ) && (0 == NodeL.IsLeaf) ) { grantRoot(NodeL.p[0]); // grant root to the son deleteNodeInFile(L); // delete node } else if( !isRoot(L) && NodeL.isNotEnoughPoints() ) {// isn't root and not enough points //set L_ neighbour of L bool IsLLeftOfL_; _F_FileAddr L_; pKey_Attr pPrimKey_; setNb(L, &L_, &pPrimKey_, &IsLLeftOfL_); BPTreeNode NodeL_; NodeL_.readNodeFromFile(L_); if( canCoalesce(&NodeL, &NodeL_)) { if(IsLLeftOfL_) swapVariables(L,L_); coalesce(&NodeL, &NodeL_, pPrimKey_, IsLLeftOfL_); if( NodeL.IsLeaf && IsLLeftOfL_ ) // differe from book swapVariables(L,L_); delete_entry(getParent(L), pPrimKey_, L); if( NodeL.IsLeaf && IsLLeftOfL_ ) // L is a leaf and L < L_. Different from the book deleteNodeInFile(L_); // delete the node pointed by L_ else deleteNodeInFile(L); // delete the node pointed by L } else reDistribute(&NodeL, &NodeL_, pPrimKey_, IsLLeftOfL_, L); NodeL_.writeNodeToFile(L_); } NodeL.writeNodeToFile(L); // if though the node is delete }