poll for properties
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Tue Jul 28 16:59:30 PDT 2009
bearophile wrote:
> Bill Baxter:
>> The rationale for .empty is that .length could be an O(n) operation
>> for some containers, but .empty should always be O(1). So, the
>> negation of .length is not a general replacement for .empty.
>
> I didn't know isEmpty() or opBool() must be O(1). But I remember
> Andrei (and maybe other people too) strongly refuse my len() function
> that sometimes returns length (in O(1)) and sometimes iterates all
> items of a lazy iterable and returns their number in O(n) or more. So
> you may be wrong.
The way Phobos does things is the following:
a) You must define .empty which completes in O(1).
b) If you can define .length with O(1), define it, otherwise don't.
Then Phobos defines walkLength() on a best-effort basis which is
guaranteed to finish in O(n) but may finish faster. It uses .length if
defined, or else it just iterates the range to exhaustion.
I think this is cleaner than what STL does.
Andrei
More information about the Digitalmars-d
mailing list