recursive equal, and firstDifference functions
simendsjo
simendsjo at gmail.com
Tue Mar 19 01:46:40 PDT 2013
On Tuesday, 19 March 2013 at 08:25:45 UTC, timotheecour wrote:
> we need a std.algorithm.equalRecurse(T1,T2)(T1 a, T2 b) that
> compares recursively a and b;
>
> its behavior should be:
>
> if opEqual is defined, call it
> else, if its a range, call std.algorithm.equal (ie compare nb
> elements, then each element for equality)
> else, if it's a class/struct, make sure types are same and call
> it recursively on each field.
> else if it's a numerical type, call "=="
> else (is there an else?)
Not recursively, but how about something like this?
1) One type, one other
-> false
2) Both types
-> is(A == B)
3) Both symbols && __traits(isSame)
-> true
4) A symbol && __traits(compiles, (A.opEquals(B)))
-> A.opEquals(B)
5) B symbol && __traits(compiles, (B.opEquals(A)))
-> B.opEquals(A)
6) A symbol && __traits(compiles, (A.equals(B)))
-> A.equals(B)
7) B symbol && __traits(compiles, (B.equals(A)))
-> B.equals(A)
8) Both symbols or values && __traits(compiles, A == B)
-> A == B
9) assert(0)
More information about the Digitalmars-d-learn
mailing list