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

Your BOOST_CUSTOM_PARTITION macro overloads lower_bound, etc
for the iterator type of interest: as far as I can see, this is not
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(

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:
Sent from the Boost - Dev mailing list archive at

Boost list run by bdawes at, gregod at, cpdaniel at, john at