On 12/24/10 4:19 PM, Ali Çehreli wrote:
isRandomAccessRange at

http://digitalmars.com/d/2.0/phobos/std_range.html#isRandomAccessRange

describes what a RandomAccessRange is:

<quote>

A random-access range is a bidirectional range that also offers the
primitive opIndex, OR an infinite forward range that offers opIndex. In
either case, the range must either offer length or be infinite. The
following code should compile for any random-access range.

R r;
static assert(isForwardRange!(R)); // range is forward
static assert(isBidirectionalRange!(R) || isInfinite!(R));
// range is bidirectional or infinite
auto e = r[1]; // can index

</quote>

The part that starts with "In either case" does not make sense to me
(and the sample code does not cover all possible cases). It seems to
suggest that a RandomAccessRange may be an infinite BidirectionalRange.

Since a BidirectionalRange defines both front() and back(), its being
infinite can only come from asymptoting at one or more points in between
the two ends. Is that useful?

Does the document need correction or my understanding? :)

Ali

The document I think. Essentially I meant to define the conceptual hierarchy as in this figure:

http://ptgmedia.pearsoncmg.com/images/art_alexandrescu3_iterators/elementLinks/alexandrescu3_fig03.jpg

and as described in the associated article http://www.informit.com/articles/printerfriendly.aspx?p=1407357

So what would be a better formulation?


Andrei

Reply via email to