On Mon, 19 Sep 2011 11:17:01 -0400, Kagamin <s...@here.lot> wrote:

Steven Schveighoffer Wrote:

auto set = new TreeSet!uint(1, 3, 5, 7, 9);
assert(set.length == 5);
auto range = set[1..set.length];

assert(walkLength(range) == 2); // probably not what you expected

Where you got that "1"?

1 is the first element in the set.

How to slice it from begin to 7?

set[set.begin .. 7]

This does not include the element at position 7. To get that element too, you have to do something funky:

auto cur = set.elemAt(7);
cur.popFront();

set[set.begin .. cur];

I haven't thought of an easy way to signify find me the element After X.

Looks like an operator overload abuse. Slicing is an array's feature. If a collection doesn't support array interface, it's questionable whether it should support slicing as it's defined in D. By stretching slicing to non-array collections you break its semantics. Good for voodoo, bad for engineering.

I emphatically disagree. Slicing is the method of extracting a range from a collection given two reference points. For arrays, that happens to be indexes. For node-based containers, it would be references to those nodes (in dcollections, those are called cursors). I don't see why slicing should be restricted to ints, otherwise, why have opSlice compile with anything other than ints?

-Steve

Reply via email to