Complexity nomenclature

BLM768 via Digitalmars-d digitalmars-d at puremagic.com
Fri Dec 4 16:13:02 PST 2015


On Friday, 4 December 2015 at 22:17:21 UTC, Jonathan M Davis 
wrote:
> Either of those would be better than stableLinearRemove or 
> stable.linear.remove. The UDAs would be more documentation 
> friendly, though being able to pass around template arguments 
> could be valuable for the cases where you're trying to enforce 
> specific complexity requirements.

It should be possible to unify the template and UDA forms. 
Assuming a template supportsComplexity(func, complexity) that 
determines whether a function or method has the specified 
complexity UDA (or a "faster" one), it's not hard to implement 
something like this:

void removeWithComplexity(T, complexity)(T collection, size_t 
index) if(supportsComplexity!(T.remove, complexity) {
     collection.remove(idx);
}

List!int list;
//...
list.removeWithComplexity(Complexity.linear, 3);

---

Of course, this implementation has issues with collection 
operations which are defined as UFCS functions (as opposed to 
methods), but it should be possible to get around that issue.




More information about the Digitalmars-d mailing list