|
Boost : |
From: Matias Capeletto (matias.capeletto_at_[hidden])
Date: 2007-05-23 17:19:33
Hi,
Boost.MultiIndex and Boost.Bimap implements a function named range. It
is designed to integrate well with the new Boost.Range framework.
The actual signature is:
template< class LowerBound, class UpperBound >
std::pair<iterator,iterator> range(LowerBound lower, UpperBound upper);
template< class LowerBound, class UpperBound >
std::pair<const_iterator, const_iterator> range(LowerBound lower,
UpperBound upper) const;
In bimap docs it is stated that the way to use it is:
typedef bimap<string,int> bm_type;
bm_type bm;
//...
std::pair<bm_type::left_iterator, bm_type::left_iterator>r =
bm.left.range(...,...);
I want to know if this is the best approach.
Boost.Range defines two range classes (iterator_range and sub_range)
http://www.boost.org/libs/range/doc/utility_class.html
It is said that they are better abstraction for ranges that std::pair<iter,iter>
1) Do you think that the range functions should return a sub_range<map_type>
instead of a std::pair<iter,iter>?
The signature will be:
template< class LowerBound, class UpperBound >
sub_range<map_type> range(LowerBound lower, UpperBound upper);
template< class LowerBound, class UpperBound >
const sub_range<map_type> range(LowerBound lower, UpperBound upper) const;
2) In any case do you think that including typedef for the returned
range type will make code more readable?
The idea is to define:
typedef -range_type- sub_range; // the name can be different
typedef -const_range_type- const_sub_range;
So the user code will look like this:
typedef bimap<string,int> bm_type;
bm_type bm;
//...
bm_type::left_sub_range r = bm.left.range(...,...);
Best regards
Matias
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk