Exemple #1
0
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;
}
Exemple #2
0
TEST(RangeTest, DefaultConstructor) {
  RangeT r;
  EXPECT_FALSE(r.IsValid());
  EXPECT_EQ(0U, r.GetByteSize());
  EXPECT_EQ(0U, r.GetRangeBase());
  EXPECT_EQ(0U, r.GetRangeEnd());
}
Exemple #3
0
TEST(RangeTest, Copy) {
  RangeT orig(3, 5);
  RangeT r = orig;
  EXPECT_TRUE(r.IsValid());
  EXPECT_EQ(5U, r.GetByteSize());
  EXPECT_EQ(3U, r.GetRangeBase());
  EXPECT_EQ(8U, r.GetRangeEnd());
}
Exemple #4
0
TEST(RangeTest, ContainsEndInclusiveInvalid) {
  RangeT r;
  // FIXME: This is probably not intended.
  EXPECT_TRUE(r.ContainsEndInclusive(0));

  EXPECT_FALSE(r.ContainsEndInclusive(1));
  EXPECT_FALSE(r.ContainsEndInclusive(2));
}
Exemple #5
0
TEST(RangeTest, ContainsAddrInvalid) {
  RangeT r;
  EXPECT_FALSE(r.Contains(0));
  EXPECT_FALSE(r.Contains(1));
  EXPECT_FALSE(r.Contains(2));
  EXPECT_FALSE(r.Contains(3));
  EXPECT_FALSE(r.Contains(4));
}
Exemple #6
0
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 );
}
Exemple #7
0
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 );
}
 void initialize(const RangeT& range)
 {
   EntitiesT entities;
   entities.reserve(range.size());
   BOOST_FOREACH(const Entities& ent, range)
   {
     entities.push_back(ent.handle<Entities const>());
   }
Exemple #9
0
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 );
}
Exemple #10
0
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;
}
Exemple #11
0
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 );
}