bool CPointerTypeInfo::Equals(TConstObjectPtr object1, TConstObjectPtr object2, ESerialRecursionMode how) const { TConstObjectPtr data1 = GetObjectPointer(object1); TConstObjectPtr data2 = GetObjectPointer(object2); if ( how != eRecursive ) { return how == eShallow ? (data1 == data2) : (data1 == 0 || data2 == 0); } else if ( data1 == 0 ) { return data2 == 0; } else { if ( data2 == 0 ) return false; TTypeInfo type1 = GetRealDataTypeInfo(data1); TTypeInfo type2 = GetRealDataTypeInfo(data2); return type1 == type2 && type1->Equals(data1, data2, how); } }
void CAliasTypeInfo::Assign(TObjectPtr dst, TConstObjectPtr src, ESerialRecursionMode how) const { #if 1 GetPointedType()->Assign(dst, src, how); #else TConstObjectPtr data = GetObjectPointer(src); TTypeInfo type = GetRealDataTypeInfo(data); TObjectPtr object = GetObjectPointer(dst); type->Assign(object, data, how); #endif }
void CPointerTypeInfo::Assign(TObjectPtr dst, TConstObjectPtr src, ESerialRecursionMode how) const { TConstObjectPtr data = GetObjectPointer(src); if ( how != eRecursive ) { SetObjectPointer(dst, how == eShallow ? (const_cast<void*>(data)) : 0); } else if ( data == 0) { SetObjectPointer(dst, 0); } else { TTypeInfo type = GetRealDataTypeInfo(data); TObjectPtr object = type->Create(); type->Assign(object, data, how); SetObjectPointer(dst, object); } }