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