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