typename RangeT::size_type List< RangeT, TraitsT, ContainerT >::erase(const RangeT& value) { if ( value.end() > limit() ) { // throw ListException( value, limit() ); CString msg; msg.Format( _T( "ListError - erase - size: %u - limit: %I64u - sum: %I64u - " ) _T( "Range - begin: %I64i - end: %I64u" ), size(), limit(), Traits::length_sum(), value.begin(), value.end() ); theApp.Message( MSG_ERROR, msg ); return 0; } if ( value.size() == 0 ) return 0; iterator_pair sequence( equal_range( value ) ); if ( sequence.first == sequence.second ) return 0; const range_type front( min( sequence.first->begin(), value.begin() ), value.begin(), value.value() ); const range_type back( value.end(), max( ( --sequence.second )->end(), value.end() ), value.value() ); range_size_type sum = 0; for ( ++sequence.second; sequence.first != sequence.second; ) sum += erase( sequence.first++ ); sum -= insert( sequence.second, front ); sum -= insert( sequence.second, back ); return sum; }
void initialize(const RangeT& range) { EntitiesT entities; entities.reserve(range.size()); BOOST_FOREACH(const Entities& ent, range) { entities.push_back(ent.handle<Entities const>()); }
typename RangeT::size_type List< RangeT, TraitsT, ContainerT >::insert(const RangeT& value) { if ( value.end() > Traits::limit() ) { qDebug( qPrintable(QString("ListError - insert - size: %1 - limit: %2 - sum: %3 - Range - begin: %4 - end: %5") .arg(size()).arg(Traits::limit()).arg(Traits::length_sum()).arg(value.begin()).arg(value.end())) ); return 0; } if ( value.size() == 0 ) return 0; iterator_pair sequence( merge_range( value ) ); return sequence.first != sequence.second ? Traits::merge_and_replace( m_set, sequence, value ) : Traits::simple_merge( m_set, sequence.first, value ); }
typename RangeT::size_type List< RangeT, TraitsT, ContainerT >::insert( typename List< RangeT, TraitsT, ContainerT >::iterator where, const RangeT& value) { if ( value.end() > Traits::limit() ) { qDebug( qPrintable(QString("ListError - insert(h) - size: %1 - limit: %2 - sum: %3 - \nRange - begin: %4 - end: %5") .arg(size()).arg(Traits::limit()).arg(Traits::length_sum()).arg(value.begin()).arg(value.end())) ); return 0; } if ( value.size() == 0 ) return 0; iterator tmp( where ); return ( where == begin() || ( --tmp )->end() < value.begin() ) && ( where == end() || value.end() < where->begin() ) ? Traits::simple_merge( m_set, where, value ) : insert( value ); }
typename RangeT::size_type List< RangeT, TraitsT, ContainerT >::insert(const RangeT& value) { if ( value.end() > limit() ) { // throw ListException( value, limit() ); CString msg; msg.Format( _T( "ListError - insert - size: %u - limit: %I64u - sum: %I64u - " ) _T( "Range - begin: %I64u - end: %I64u" ), size(), limit(), Traits::length_sum(), value.begin(), value.end() ); theApp.Message( MSG_ERROR, msg ); return 0; } if ( value.size() == 0 ) return 0; iterator_pair sequence( merge_range( value ) ); return sequence.first != sequence.second ? Traits::merge_and_replace( m_set, sequence, value ) : Traits::simple_merge( m_set, sequence.first, value ); }
typename RangeT::size_type List< RangeT, TraitsT, ContainerT >::insert( typename List< RangeT, TraitsT, ContainerT >::iterator where, const RangeT& value) { if ( value.end() > limit() ) { // throw ListException( value, limit() ); CString msg; msg.Format( _T( "ListError - insert(h) - size: %u - limit: %I64u - sum: %I64u - " ) _T( "Range - begin: %I64u - end: %I64u" ), size(), limit(), Traits::length_sum(), value.begin(), value.end() ); theApp.Message( MSG_ERROR, msg ); return 0; } if ( value.size() == 0 ) return 0; iterator tmp( where ); return ( where == begin() || ( --tmp )->end() < value.begin() ) && ( where == end() || value.end() < where->begin() ) ? Traits::simple_merge( m_set, where, value ) : insert( value ); }
typename RangeT::size_type List< RangeT, TraitsT, ContainerT >::erase(const RangeT& value) { if ( value.end() > Traits::limit() ) { qDebug(qPrintable(QString("ListError - erase - size: %1 - limit: %2 - sum: %3 - Range - begin: %4 - end: %5") .arg(size()).arg(Traits::limit()).arg(Traits::length_sum()).arg(value.begin()).arg(value.end())) ); return 0; } if ( value.size() == 0 ) return 0; iterator_pair sequence( equal_range( value ) ); if ( sequence.first == sequence.second ) return 0; const range_type front( qMin( sequence.first->begin(), value.begin() ), value.begin(), value.value() ); const range_type back( value.end(), qMax( ( --sequence.second )->end(), value.end() ), value.value() ); range_size_type sum = 0; for ( ++sequence.second; sequence.first != sequence.second; ) sum += erase( sequence.first++ ); sum -= insert( sequence.second, front ); sum -= insert( sequence.second, back ); return sum; }