How to implement opCmp?
Honey via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Jun 13 11:17:02 PDT 2017
On Tuesday, 13 June 2017 at 14:51:40 UTC, Steven Schveighoffer
wrote:
> Yes, I saw that when I was looking (you can see from my reply
> that you quoted below).
Yes, I had missed that point.
> Yes I think it makes sense to have such a comparison function
> for non-ranges. Yes it probably belongs there, as there are
> other functions (e.g. swap) that are not specific to ranges in
> std.algorithm. It should probably not be called cmp, as it will
> be a default comparison (with the default ordering), although
> if we did something like:
>
> int cmp(alias pred = "a < b", T)(T t1, T t2) if(!isInputRange!T)
> {
> static if(pred == "a < b") { /* do default optimized way */ }
> else { /* more generic mechanism using pred */ }
> }
>
> it might be nice. Need to think about the API ramifications.
I retracted my earlier proposal after I had realized my
confusion. I had thought that cmp would implement three way range
comparison based on three way element comparison. Then I realized
that it is based on "a < b" or alike. The latter is certainly
useful but I am afraid that this approach does not always lead to
optimal performance.
I gathered a few ideas about the subject. I have to sit down and
write it down.
> I agree. It's a thing also that can be optimized in unintuitive
> ways. I think Andrei has a nice way to do opCmp for integers
> that's a simple subtraction and negation or something like that.
I observed that compiler optimizers are pretty smart about
comparison of individual integers. I guess that we do not need to
be clever, here.
More information about the Digitalmars-d-learn
mailing list