bool ConfigDiffTracker<ValType,ShardType>:: isOverlapping( const BSONObj& min, const BSONObj& max ) { RangeOverlap overlap = overlappingRange( min, max ); return overlap.first != overlap.second; }
void ConfigDiffTracker<ValType>::removeOverlapping(const BSONObj& min, const BSONObj& max) { _assertAttached(); RangeOverlap overlap = overlappingRange(min, max); _currMap->erase(overlap.first, overlap.second); }
inline typename List< FragmentT, ContainerT >::FSizeType List< FragmentT, ContainerT >::erase( const typename List< FragmentT, ContainerT >::FragmentType& eraseFragment) { if( eraseFragment.end() > limit() ) { // throw BadRangeException( eraseFragment, limit() ); CString errorMsg; errorMsg.Format( _T( "FF::SimpleFragmentList - invalid arg for erase - " ) _T( "List - size: %u - limit: %I64u - sum: %I64u - " ) _T( "Fragment - begin: %I64i - end: %I64u" ), size(), limit(), sumLength(), eraseFragment.begin(), eraseFragment.end() ); theApp.Message( MSG_ERROR, errorMsg ); return 0; } if( eraseFragment.length() == 0 ) return 0; ::std::pair< Iterator, Iterator > eraseRange = overlappingRange( eraseFragment ); if( eraseRange.first == eraseRange.second ) return 0; const FragmentType& frontFragment = eraseRange.first->begin() < eraseFragment.begin() ? FragmentType( *eraseRange.first, eraseRange.first->begin(), eraseFragment.begin() ) : FragmentType( *eraseRange.first, 0, ::std::numeric_limits< FSizeType >::max() ); --eraseRange.second; const FragmentType& backFragment = eraseRange.second->end() > eraseFragment.end() ? FragmentType( *eraseRange.second, eraseFragment.end(), eraseRange.second->end() ) : FragmentType( *eraseRange.second, 0, ::std::numeric_limits< FSizeType >::max() ); const FSizeType oldSum = sumLength(); ++eraseRange.second; for( ; eraseRange.first != eraseRange.second; ) { sumLength_ -= eraseRange.first->length(); s_.erase( eraseRange.first++ ); } if( frontFragment.end() < ::std::numeric_limits< FSizeType >::max() ) { s_.insert( eraseRange.second, frontFragment ); sumLength_ += frontFragment.length(); } if( backFragment.end() < ::std::numeric_limits< FSizeType >::max() ) { s_.insert( eraseRange.second, backFragment ); sumLength_ += backFragment.length(); } return oldSum - sumLength(); }