Line data Source code
1 : // © 2016 and later: Unicode, Inc. and others.
2 : // License & terms of use: http://www.unicode.org/copyright.html
3 : /*
4 : **********************************************************************
5 : * Copyright (c) 2004-2014, International Business Machines
6 : * Corporation and others. All Rights Reserved.
7 : **********************************************************************
8 : * Author: Alan Liu
9 : * Created: April 26, 2004
10 : * Since: ICU 3.0
11 : **********************************************************************
12 : */
13 : #include "utypeinfo.h" // for 'typeid' to work
14 :
15 : #include "unicode/utypes.h"
16 :
17 : #if !UCONFIG_NO_FORMATTING
18 :
19 : #include "unicode/measure.h"
20 : #include "unicode/measunit.h"
21 :
22 : U_NAMESPACE_BEGIN
23 :
24 0 : UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Measure)
25 :
26 0 : Measure::Measure() {}
27 :
28 0 : Measure::Measure(const Formattable& _number, MeasureUnit* adoptedUnit,
29 0 : UErrorCode& ec) :
30 0 : number(_number), unit(adoptedUnit) {
31 0 : if (U_SUCCESS(ec) &&
32 0 : (!number.isNumeric() || adoptedUnit == 0)) {
33 0 : ec = U_ILLEGAL_ARGUMENT_ERROR;
34 : }
35 0 : }
36 :
37 0 : Measure::Measure(const Measure& other) :
38 0 : UObject(other), unit(0) {
39 0 : *this = other;
40 0 : }
41 :
42 0 : Measure& Measure::operator=(const Measure& other) {
43 0 : if (this != &other) {
44 0 : delete unit;
45 0 : number = other.number;
46 0 : unit = (MeasureUnit*) other.unit->clone();
47 : }
48 0 : return *this;
49 : }
50 :
51 0 : UObject *Measure::clone() const {
52 0 : return new Measure(*this);
53 : }
54 :
55 0 : Measure::~Measure() {
56 0 : delete unit;
57 0 : }
58 :
59 0 : UBool Measure::operator==(const UObject& other) const {
60 0 : if (this == &other) { // Same object, equal
61 0 : return TRUE;
62 : }
63 0 : if (typeid(*this) != typeid(other)) { // Different types, not equal
64 0 : return FALSE;
65 : }
66 0 : const Measure &m = static_cast<const Measure&>(other);
67 0 : return number == m.number &&
68 0 : ((unit == NULL) == (m.unit == NULL)) &&
69 0 : (unit == NULL || *unit == *m.unit);
70 : }
71 :
72 : U_NAMESPACE_END
73 :
74 : #endif // !UCONFIG_NO_FORMATTING
|