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*/ 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef __MEASURE_H__ 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define __MEASURE_H__ 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * \file 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * \brief C++ API: MeasureUnit object. 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/fmtable.h" 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass MeasureUnit; 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * An amount of a specified unit, consisting of a number and a Unit. 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * For example, a length measure consists of a number and a length 32fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * unit, such as feet or meters. 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 34fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * <p>Measure objects are formatted by MeasureFormat. 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * <p>Measure objects are immutable. 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @author Alan Liu 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @stable ICU 3.0 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass U_I18N_API Measure: public UObject { 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Construct an object with the given numeric amount and the given 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * unit. After this call, the caller must not delete the given 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * unit object. 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param number a numeric object; amount.isNumeric() must be TRUE 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param adoptedUnit the unit object, which must not be NULL 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param ec input-output error code. If the amount or the unit 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * is invalid, then this will be set to a failing value. 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @stable ICU 3.0 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Measure(const Formattable& number, MeasureUnit* adoptedUnit, 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode& ec); 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Copy constructor 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @stable ICU 3.0 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Measure(const Measure& other); 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Assignment operator 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @stable ICU 3.0 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Measure& operator=(const Measure& other); 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Return a polymorphic clone of this object. The result will 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * have the same class as returned by getDynamicClassID(). 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @stable ICU 3.0 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 73fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius virtual UObject* clone() const; 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Destructor 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @stable ICU 3.0 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual ~Measure(); 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Equality operator. Return true if this object is equal 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * to the given object. 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @stable ICU 3.0 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool operator==(const UObject& other) const; 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Return a reference to the numeric value of this object. The 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * numeric value may be of any numeric type supported by 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Formattable. 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @stable ICU 3.0 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline const Formattable& getNumber() const; 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Return a reference to the unit of this object. 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @stable ICU 3.0 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline const MeasureUnit& getUnit() const; 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 102fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius /** 103fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Return the class ID for this class. This is useful only for comparing to 104fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * a return value from getDynamicClassID(). For example: 105fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * <pre> 106fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * . Base* polymorphic_pointer = createPolymorphicObject(); 107fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * . if (polymorphic_pointer->getDynamicClassID() == 108fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * . erived::getStaticClassID()) ... 109fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * </pre> 110fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @return The class ID for all objects of this class. 111fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @draft ICU 53 112fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius */ 113fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static UClassID U_EXPORT2 getStaticClassID(void); 114fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 115fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius /** 116fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This 117fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * method is to implement a simple version of RTTI, since not all C++ 118fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * compilers support genuine RTTI. Polymorphic operator==() and clone() 119fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * methods call this method. 120fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * 121fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @return The class ID for this object. All objects of a 122fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * given class have the same class ID. Objects of 123fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * other classes have different class IDs. 124fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @draft ICU 53 125fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius */ 126fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius virtual UClassID getDynamicClassID(void) const; 127fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru protected: 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Default constructor. 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @stable ICU 3.0 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Measure(); 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru private: 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * The numeric value of this object, e.g. 2.54 or 100. 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Formattable number; 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * The unit of this object, e.g., "millimeter" or "JPY". This is 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * owned by this object. 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru MeasureUnit* unit; 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline const Formattable& Measure::getNumber() const { 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return number; 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline const MeasureUnit& Measure::getUnit() const { 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return *unit; 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif // !UCONFIG_NO_FORMATTING 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif // __MEASURE_H__ 160