The last changes to range
Steven Schveighoffer
schveiguy at yahoo.com
Tue Jun 1 05:40:37 PDT 2010
On Sat, 29 May 2010 12:45:54 -0400, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
> I plan to make two more (hopefully the last two) changes to the range
> abstraction this morning.
>
> 1. First, I want to define this:
>
> // inside range type SomeRange
> @property SomeRange save();
>
> That simply returns a copy of the range. Most implementations look like
> this:
>
> // inside range type SomeRange
> @property SomeRange save() { return this; }
>
> If SomeRange is a class or interface, you'd write:
>
> // inside range type SomeRange
> @property SomeRange save() { return this->clone(); }
>
> The idea is that save() provides a guaranteed means to take a snapshot
> in a range's state. The notable absents are input ranges - they are
> unable to define save(), and therefore some algorithms won't apply to
> them.
In fact, I'd say you'd want to not define save unless it is the trivial
case (your example for classes/interfaces shouldn't exist either). The
reason being, ranges may be copied multiple times in algorithms, it's
generally expected that the copying does not figure into the complexity of
an algorithm. I assume that a non-trivial save will be expensive. Expect
to see your algorithm blow up in runtime if save is not trivial.
-Steve
More information about the Digitalmars-d
mailing list