bool Object::equal(const Object& v2) const { if (m_px == v2.get()) { return true; } if (!m_px || !v2.get()) { return false; } if (m_px->isCollection()) { return collectionEquals(m_px, v2.get()); } if (UNLIKELY(m_px->instanceof(SystemLib::s_DateTimeInterfaceClass))) { return c_DateTime::GetTimestamp(*this) == c_DateTime::GetTimestamp(v2); } if (v2.get()->getVMClass() != m_px->getVMClass()) { return false; } if (UNLIKELY(m_px->instanceof(SystemLib::s_ArrayObjectClass))) { // Compare the whole object, not just the array representation Array ar1(ArrayData::Create()); Array ar2(ArrayData::Create()); m_px->o_getArray(ar1, false); v2->o_getArray(ar2, false); return ar1->equal(ar2.get(), false); } return toArray().equal(v2.toArray()); }
bool Object::equal(CObjRef v2) const { if (m_px == v2.get()) { return true; } if (!m_px || !v2.get()) { return false; } if (v2.get()->getVMClass() != m_px->getVMClass()) { return false; } if (m_px->isCollection()) { return collectionEquals(m_px, v2.get()); } return toArray().equal(v2.toArray()); }