]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/unicode/measure.h
ICU-59117.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / unicode / measure.h
index 10f6daf83453a736bd2f7256c68f402ade993a51..a5a82f26b9be580bd8bfa2ff73dd3cfd6da4fac8 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, International Business Machines
+* Copyright (c) 2004-2015, International Business Machines
 * Corporation and others.  All Rights Reserved.
 **********************************************************************
 * Author: Alan Liu
 
 #include "unicode/utypes.h"
 
+/**
+ * \file 
+ * \brief C++ API: MeasureUnit object.
+ */
 #if !UCONFIG_NO_FORMATTING
 
 #include "unicode/fmtable.h"
 
+#if U_SHOW_CPLUSPLUS_API
 U_NAMESPACE_BEGIN
 
 class MeasureUnit;
@@ -24,18 +32,14 @@ class MeasureUnit;
 /**
  * An amount of a specified unit, consisting of a number and a Unit.
  * For example, a length measure consists of a number and a length
- * unit, such as feet or meters.  This is an abstract class.
- * Subclasses specify a concrete Unit type.
+ * unit, such as feet or meters.
  *
- * <p>Measure objects are parsed and formatted by subclasses of
- * MeasureFormat.
+ * <p>Measure objects are formatted by MeasureFormat.
  *
  * <p>Measure objects are immutable.
  *
- * <p>This is an abstract class.
- *
  * @author Alan Liu
- * @draft ICU 3.0
+ * @stable ICU 3.0
  */
 class U_I18N_API Measure: public UObject {
  public:
@@ -47,40 +51,40 @@ class U_I18N_API Measure: public UObject {
      * @param adoptedUnit the unit object, which must not be NULL
      * @param ec input-output error code. If the amount or the unit
      * is invalid, then this will be set to a failing value.
-     * @draft ICU 3.0
+     * @stable ICU 3.0
      */
     Measure(const Formattable& number, MeasureUnit* adoptedUnit,
             UErrorCode& ec);
 
     /**
      * Copy constructor
-     * @draft ICU 3.0
+     * @stable ICU 3.0
      */
     Measure(const Measure& other);
 
     /**
      * Assignment operator
-     * @draft ICU 3.0
+     * @stable ICU 3.0
      */
     Measure& operator=(const Measure& other);
 
     /**
      * Return a polymorphic clone of this object.  The result will
      * have the same class as returned by getDynamicClassID().
-     * @draft ICU 3.0
+     * @stable ICU 3.0
      */
-    virtual UObject* clone() const = 0;
+    virtual UObject* clone() const;
 
     /**
      * Destructor
-     * @draft ICU 3.0
+     * @stable ICU 3.0
      */
     virtual ~Measure();
     
     /**
      * Equality operator.  Return true if this object is equal
      * to the given object.
-     * @draft ICU 3.0
+     * @stable ICU 3.0
      */
     UBool operator==(const UObject& other) const;
 
@@ -88,20 +92,46 @@ class U_I18N_API Measure: public UObject {
      * Return a reference to the numeric value of this object.  The
      * numeric value may be of any numeric type supported by
      * Formattable.
-     * @draft ICU 3.0
+     * @stable ICU 3.0
      */
     inline const Formattable& getNumber() const;
 
     /**
      * Return a reference to the unit of this object.
-     * @draft ICU 3.0
+     * @stable ICU 3.0
      */
     inline const MeasureUnit& getUnit() const;
 
+    /**
+     * Return the class ID for this class. This is useful only for comparing to
+     * a return value from getDynamicClassID(). For example:
+     * <pre>
+     * .   Base* polymorphic_pointer = createPolymorphicObject();
+     * .   if (polymorphic_pointer->getDynamicClassID() ==
+     * .       erived::getStaticClassID()) ...
+     * </pre>
+     * @return          The class ID for all objects of this class.
+     * @stable ICU 53
+     */
+    static UClassID U_EXPORT2 getStaticClassID(void);
+
+    /**
+     * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
+     * method is to implement a simple version of RTTI, since not all C++
+     * compilers support genuine RTTI. Polymorphic operator==() and clone()
+     * methods call this method.
+     *
+     * @return          The class ID for this object. All objects of a
+     *                  given class have the same class ID.  Objects of
+     *                  other classes have different class IDs.
+     * @stable ICU 53
+     */
+    virtual UClassID getDynamicClassID(void) const;
+
  protected:
     /**
      * Default constructor.
-     * @draft ICU 3.0
+     * @stable ICU 3.0
      */
     Measure();
 
@@ -127,6 +157,7 @@ inline const MeasureUnit& Measure::getUnit() const {
 }
 
 U_NAMESPACE_END
+#endif // U_SHOW_CPLUSPLUS_API
 
 #endif // !UCONFIG_NO_FORMATTING
 #endif // __MEASURE_H__