Boost logo

Boost :

Subject: Re: [boost] [Iterator][MultiIndex]iterator-specificpartition_point-related functions
From: Joaquin M Lopez Munoz (joaquin_at_[hidden])
Date: 2008-11-27 16:14:17


Arno Schödl wrote:
>
> So here is the implementation, as it is running in our production code. As
> far as I can see, there is no boost::partition_point, so I rolled my own.
> The code is only half-boostified. Ignore the make_XXX_range functions.
> BOOST_CUSTOM_PARTITION is currently a macro, because IMO that is the only
> way to be able to add it to existing iterators. If Boost.Iterator and
> Boost.MultiIndex are both willing to include it into their iterators, I am
> happy to make it a base class a la iterator_facade and integrate it into
> the existing code base.
>

Hi Arno, I've had a look at your code and am a bit puzzled about some
details:

Your BOOST_CUSTOM_PARTITION macro overloads lower_bound, etc
for the iterator type of interest: as far as I can see, this is not
necessary
since boost::lower_bound could use partition_point through ADL, which is
the only customization point we need. To put it more succintly,
why can't you just have

namespace boost{

template<typename _It,typename Val,typenameBinPred>
_It lower_bound(_It itBegin,_It itEnd,const Val &x,BinPred pred){
  using namespace boost;
  return partition_point(itBegin,itEnd,!boost::bind(pred,_1,x)); // ADL used
}

}

and let users overload partition_point when needed?

template<typename FilterPred,typename It,typename UnaryPred>
filter_iterator<FilterPred,It> partition_point(
  filter_iterator<FilterPred,It> itBegin,
  filter_iterator<FilterPred,It> itEnd,
  UnaryPred pred ){
  using namespace boost;
  return make_filter_iterator(
    itBegin.predicate(),
    partition_point(
      itBegin.base(),
      itEnd.base(),
      pred
    ),
    itBegin.end()
  );
}

This would't have to use fancy overloading macros or base classes,
and it covers all the use cases your current scaffolding does.

Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo

-- 
View this message in context: http://www.nabble.com/-MultiIndex--STL-algorithm-support-for-multi_index_containers-tp20406458p20725686.html
Sent from the Boost - Dev mailing list archive at Nabble.com.

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk