|
Boost : |
From: David Abrahams (dave_at_[hidden])
Date: 2006-02-03 16:56:40
Thorsten Ottosen <tottosen_at_[hidden]> writes:
> David Abrahams wrote:
>> Thorsten Ottosen <tottosen_at_[hidden]> writes:
>
> That is true that eg. std::list<T>::size() might be O(1).
>
> But how do you detect that? (A: you can't).
Sure you can; you just look at your implementation and if it is O(1)
you write a specialization of the metafunction (or whatever).
> IIRC, you where one of the people who were very conserned about
> the performance discontinuity induced by boost::size() is its
> original form. I now totally agree that such discontinuities
> are more harmful than useful.
Good.
> Anyway, what issue are you really talking about. I must
> be missing something.
If there's an O(1) size available you can do loop unrolling; otherwise
you have to test the iterators every time through the loop.
>> No, a more general range concept is a property map and two cursors,
>> rather than just two iterators.
>
> Ok, but it still appears to me that you basically replace iterators
> with cursors.
No, with cursors + a property map. Cursors don't access data.
> Boost.range is merely a utility layer on top of a more
> generic fabric. It shouldn't matter what lies underneith. For example,
> if I write
>
> boost::unique( rng )
>
> I don't care about if it is cursors or iterators doing the hard work.
>
> Unlike some, I fully support your and Dietmars efforts to develop the
> cursor/pm abstraction. But I don't see how it is relevant to boost.range
> right now.
Look at the big picture. A generalized algorithm suite will be
written in terms of property maps and cursors, not in terms of
iterators.
-- Dave Abrahams Boost Consulting www.boost-consulting.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk