예제 #1
0
파일: List.hpp 프로젝트: ivan386/Shareaza
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;
}
예제 #2
0
파일: List.hpp 프로젝트: c3c/quazaa
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;
}