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