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