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