Boost logo

Boost :

From: Thorsten Ottosen (nesotto_at_[hidden])
Date: 2005-04-28 10:31:45


"Eric Niebler" <eric_at_[hidden]> wrote in message
news:4270F421.8040806_at_boost-consulting.com...
| Thorsten Ottosen wrote:
| > "Eric Niebler" <eric_at_[hidden]> wrote in message
| > news:4270186E.20907_at_boost-consulting.com...
| >
| > | I should also point out that FOREACH is ready and useful today, whereas
| > | range_ex has major outstanding design questions.
| >
| > which are those btw?
| >
| > -Thorsten
| >
|
|
| Documented here: http://tinyurl.com/957z9, but in short:
|
| * Output ranges or output iterators?

We have eg.

template<class InIt, class OutIt>
OutIt copy(InIt first, InIt last, OutIt dest);

template<typename Rng, typename OutIter>
OutIter copy(Rng const &, OutIter);

Should the latter then take an OutputRange (whatever that means)?

I guess that is not a bad idea; Let's say an out-put Range defines this
function:

template< class I >
iterator insert( I beg, I end );

Then we could define copy() like this:

template< class InputRng, class OutputRng >
typename range_iterator<OutputRng>::type copy( const InputRng& in, OuputRng
out )
{
    out.insert( begin(in), end(in) );
}

Then we could call copy() it like this:

list<int> in;
vector<int> out;
copy( in, range_back_inserter(out) );

list<int> in;
int array[] = { ... };
copy( in, range_overwriter( array ) );

always safe and fast.

Alternatively, we could introduce a new function in the output iterator a. la.
insert() above; then
we could define a tag and require algorithms to dispatch to different
implementation of the
algos. This might not seem like too clever.

| * For algos that take 2 sequences, take 2 ranges or a range and an iterator?

Like in

  template<typename Rng1, typename Rng2>
    BOOST_DEDUCED_TYPENAME boost::range_iterator< Rng1 >::type
    search(Rng1 &, Rng2 const &);

? What use would it be to only have an iterator?

| * Should find(map) call map.find()?

no IMO. The algorithms are different in complexity.

| * When using the range algos to copy chars, do we try to ensure
| null-termination?

As I see it, we just have to pick one default and stick with that. Boost.Range
does not
include the null in the length of the string; I think that is acceptable.

Perhaps a special adapter that automatically searches for a null and/or
includes it in the range
can be provided:

copy( null_string_range( a_string ), ... );

-Thorsten


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