On Thursday, 3 April 2014 at 07:16:53 UTC, simendsjo wrote:
On 04/03/2014 09:03 AM, dnspies wrote:
If two dynamic arrays point to the same place in memory, is it fast to compare them for equality? or does every element still have to be compared?

Equals will first check for memory location.
This is from the runtime:

bool opEquals(Object lhs, Object rhs)
{
    // If aliased to the same object or both null => equal
    if (lhs is rhs) return true;

    // If either is null => non-equal
    if (lhs is null || rhs is null) return false;

    // If same exact type => one call to method opEquals
if (typeid(lhs) is typeid(rhs) || typeid(lhs).opEquals(typeid(rhs)))
        return lhs.opEquals(rhs);

    // General case => symmetric calls to method opEquals
    return lhs.opEquals(rhs) && rhs.opEquals(lhs);
}

But this only applies to objects with a class type. A dynamic array isn't an object with a class type, it's a builtin type. Does it use this opEquals? Can a dynamic array even be cast to an Object? I don't see that "lhs is rhs" will return true since the array startptr-length pairs may still occupy different places in memory even if the contents of those arrays occupy the same place.

Reply via email to