void YSelection::delInterval( const YInterval& i ) { bool containsFrom; bool containsTo; unsigned int idFrom = locatePosition( i.from(), &containsFrom ); unsigned int idTo = locatePosition( i.to(), &containsTo ); if ( idFrom == idTo && !containsFrom && !containsTo ) return ; // dbg() << "delInterval: from=" << idFrom << "," << containsFrom << "; to=" << idTo << "," << containsTo << endl; if ( containsFrom && i.from() <= mMap[ idFrom ].from() ) { containsFrom = false; } if ( containsTo && i.to() >= mMap[ idTo ].to() ) { ++idTo; containsTo = false; } if ( containsTo && containsFrom && idFrom == idTo ) { ++idTo; insertInterval( idTo, mMap[ idFrom ] ); } if ( containsFrom ) mMap[ idFrom ].setTo( YBound(i.from().pos(), !i.from().opened()) ); if ( containsTo ) mMap[ idTo ].setFrom( YBound(i.to().pos(), !i.to().opened()) ); removeInterval( idFrom + (containsFrom ? 1 : 0), idTo - idFrom - (containsFrom && containsTo ? 1 : 0) ); }
void YSelection::addInterval( const YInterval& i ) { bool containsFrom; bool containsTo; unsigned int idFrom = locatePosition( i.from(), &containsFrom ); unsigned int idTo = locatePosition( i.to(), &containsTo ); if ( containsFrom && containsTo ) { if ( idFrom != idTo ) { mMap[ idFrom ].setTo( mMap[ idTo ].to() ); removeInterval( idFrom + 1, idTo - idFrom ); } } else if ( containsFrom ) { mMap[ idFrom ].setTo( i.to() ); removeInterval( idFrom + 1, idTo - idFrom - 1 ); } else if ( containsTo ) { mMap[ idTo ].setFrom( i.from() ); removeInterval( idFrom, idTo - idFrom ); } else if ( idTo != idFrom ) { mMap[ idFrom ].setFrom( i.from() ); mMap[ idFrom ].setTo( i.to() ); removeInterval( idFrom + 1, idTo - idFrom ); } else { insertInterval( idFrom, i ); } }
void SortedList::sortedInsert(const ListItemType& newItem) throw(ListException) { bool found; int newPosition = locatePosition(newItem, found); insert(newPosition, newItem); } // end sortedInsert
void SortedList::sortedRemove(const ListItemType& anItem) throw(ListException) { bool found; int position = locatePosition(anItem, found); if (found) // item actually found remove(position); else throw ListException( "ListException: Item to remove not found"); } // end sortedRemove
bool YSelection::contains( const YCursor pos ) const { bool ret = false; locatePosition( YBound(pos), &ret ); return ret; }