BinaryHeap is a range so it goes in std.range. Agree?
Steven Schveighoffer
schveiguy at yahoo.com
Tue Jun 8 08:04:17 PDT 2010
On Tue, 08 Jun 2010 10:47:33 -0400, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
> I finalized BinaryHeap. It's pretty cool - it builds a forward range on
> top of a random-access range - typically T[] - or a random-access
> container - typically Array!T.
>
> The difference is simple - if you build on top of a range the heap can't
> grow beyond the size of that range. Building on top of a container makes
> the heap growable.
>
> Making BinaryHeap a range is actually pretty cool - just walking the
> heap is tantamount to lazily sorting the container. (Of course
> BinaryHeap has primitives in addition to the four range primitives.)
>
> Do you agree with putting BinaryHeap in std.range (as opposed to
> std.container)?
If BinaryHeap can be added to, how is it a range? I would suspect that
BinaryHeap can be in std.range, but a BinaryHeap that takes a container as
an input is definitely not a range IMO. You might say the same about an
array, but an array is special in that if I append to one array, it does
not affect the other.
I don't know where it belongs. To me, a range is a type that in itself
cannot affect the topology of the data structure. It's like a window into
the data structure that provides a common interface. A container is the
owner of the data structure, and can provide ranges over its data. This
may be an inadequate view, but its worked for me so far.
-Steve
More information about the Digitalmars-d
mailing list