]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/measure.cpp
ICU-62107.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / measure.cpp
index 361c1facb07b5c231c37d79158e7198080ecfd89..d9084f87db2baa1d77146aa1e7da4bebf67ba866 100644 (file)
@@ -1,6 +1,8 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
 /*
 **********************************************************************
-* Copyright (c) 2004-2008, International Business Machines
+* Copyright (c) 2004-2014, International Business Machines
 * Corporation and others.  All Rights Reserved.
 **********************************************************************
 * Author: Alan Liu
@@ -8,6 +10,8 @@
 * Since: ICU 3.0
 **********************************************************************
 */
+#include "utypeinfo.h"  // for 'typeid' to work
+
 #include "unicode/utypes.h"
 
 #if !UCONFIG_NO_FORMATTING
@@ -17,6 +21,8 @@
 
 U_NAMESPACE_BEGIN
 
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Measure)
+
 Measure::Measure() {}
 
 Measure::Measure(const Formattable& _number, MeasureUnit* adoptedUnit,
@@ -42,24 +48,27 @@ Measure& Measure::operator=(const Measure& other) {
     return *this;
 }
 
+UObject *Measure::clone() const {
+    return new Measure(*this);
+}
+
 Measure::~Measure() {
     delete unit;
 }
 
 UBool Measure::operator==(const UObject& other) const {
-    const Measure* m = (const Measure*) &other;
-    return getDynamicClassID() == other.getDynamicClassID() &&
-        number == m->getNumber() && 
-        (unit != NULL && *unit == m->getUnit());
+    if (this == &other) {  // Same object, equal
+        return TRUE;
+    }
+    if (typeid(*this) != typeid(other)) { // Different types, not equal
+        return FALSE;
+    }
+    const Measure &m = static_cast<const Measure&>(other);
+    return number == m.number &&
+        ((unit == NULL) == (m.unit == NULL)) &&
+        (unit == NULL || *unit == *m.unit);
 }
 
-//----------------------------------------------------------------------
-// MeasureUnit implementation
-
-MeasureUnit:: MeasureUnit() {}
-
-MeasureUnit::~MeasureUnit() {}
-
 U_NAMESPACE_END
 
 #endif // !UCONFIG_NO_FORMATTING