]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/unicode/measunit.h
ICU-551.24.tar.gz
[apple/icu.git] / icuSources / i18n / unicode / measunit.h
index 9a210e659575c009f923888ed65b5177e0f92bd1..b1da2d59aabc84e588fb1ec02052502c26453610 100644 (file)
@@ -1,6 +1,6 @@
 /*
 **********************************************************************
-* Copyright (c) 2004-2006, International Business Machines
+* Copyright (c) 2004-2015, International Business Machines
 * Corporation and others.  All Rights Reserved.
 **********************************************************************
 * Author: Alan Liu
@@ -15,7 +15,7 @@
 
 #if !UCONFIG_NO_FORMATTING
 
-#include "unicode/fmtable.h"
+#include "unicode/unistr.h"
 
 /**
  * \file 
  
 U_NAMESPACE_BEGIN
 
+class StringEnumeration;
+
 /**
  * A unit such as length, mass, volume, currency, etc.  A unit is
  * coupled with a numeric amount to produce a Measure.
  *
- * <p>This is an abstract class.
- *
  * @author Alan Liu
  * @stable ICU 3.0
  */
 class U_I18N_API MeasureUnit: public UObject {
  public:
+
+    /**
+     * Default constructor.
+     * @stable ICU 3.0
+     */
+    MeasureUnit() : fTypeId(0), fSubTypeId(0) { 
+        fCurrency[0] = 0;
+    }
+    
+    /**
+     * Copy constructor.
+     * @stable ICU 3.0
+     */
+    MeasureUnit(const MeasureUnit &other);
+        
     /**
-     * Return a polymorphic clone of this object.  The result will
+     * Assignment operator.
+     * @stable ICU 3.0
+     */
+    MeasureUnit &operator=(const MeasureUnit &other);
+
+    /**
+     * Returns a polymorphic clone of this object.  The result will
      * have the same class as returned by getDynamicClassID().
      * @stable ICU 3.0
      */
-    virtual UObject* clone() const = 0;
+    virtual UObject* clone() const;
 
     /**
      * Destructor
      * @stable ICU 3.0
      */
     virtual ~MeasureUnit();
-    
+
     /**
      * Equality operator.  Return true if this object is equal
      * to the given object.
      * @stable ICU 3.0
      */
-    virtual UBool operator==(const UObject& other) const = 0;
+    virtual UBool operator==(const UObject& other) const;
+
+    /**
+     * Inequality operator.  Return true if this object is not equal
+     * to the given object.
+     * @stable ICU 53
+     */
+    UBool operator!=(const UObject& other) const {
+        return !(*this == other);
+    }
+
+    /**
+     * Get the type.
+     * @stable ICU 53
+     */
+    const char *getType() const;
+
+    /**
+     * Get the sub type.
+     * @stable ICU 53
+     */
+    const char *getSubtype() const;
+
+    /**
+     * getAvailable gets all of the available units.
+     * If there are too many units to fit into destCapacity then the
+     * error code is set to U_BUFFER_OVERFLOW_ERROR.
+     *
+     * @param destArray destination buffer.
+     * @param destCapacity number of MeasureUnit instances available at dest.
+     * @param errorCode ICU error code.
+     * @return number of available units.
+     * @stable ICU 53
+     */
+    static int32_t getAvailable(
+            MeasureUnit *destArray,
+            int32_t destCapacity,
+            UErrorCode &errorCode);
+
+    /**
+     * getAvailable gets all of the available units for a specific type.
+     * If there are too many units to fit into destCapacity then the
+     * error code is set to U_BUFFER_OVERFLOW_ERROR.
+     *
+     * @param type the type
+     * @param destArray destination buffer.
+     * @param destCapacity number of MeasureUnit instances available at dest.
+     * @param errorCode ICU error code.
+     * @return number of available units for type.
+     * @stable ICU 53
+     */
+    static int32_t getAvailable(
+            const char *type,
+            MeasureUnit *destArray,
+            int32_t destCapacity,
+            UErrorCode &errorCode);
+
+    /**
+     * getAvailableTypes gets all of the available types. Caller owns the
+     * returned StringEnumeration and must delete it when finished using it.
+     *
+     * @param errorCode ICU error code.
+     * @return the types.
+     * @stable ICU 53
+     */
+    static StringEnumeration* getAvailableTypes(UErrorCode &errorCode);
+
+    /**
+     * 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;
+
+#ifndef U_HIDE_INTERNAL_API
+    /**
+     * ICU use only.
+     * Returns associated array index for this measure unit. Only valid for
+     * non-currency measure units.
+     * @internal
+     */
+    int32_t getIndex() const;
+
+    /**
+     * ICU use only.
+     * Returns maximum value from getIndex plus 1.
+     * @internal
+     */
+    static int32_t getIndexCount();
+
+    /**
+     * ICU use only.
+     * @internal
+     */
+    static MeasureUnit *resolveUnitPerUnit(
+            const MeasureUnit &unit, const MeasureUnit &perUnit);
+#endif /* U_HIDE_INTERNAL_API */
+
+// All code between the "Start generated createXXX methods" comment and
+// the "End generated createXXX methods" comment is auto generated code
+// and must not be edited manually. For instructions on how to correctly
+// update this code, refer to:
+// http://site.icu-project.org/design/formatting/measureformat/updating-measure-unit
+//
+// Start generated createXXX methods
+
+    /**
+     * Returns unit of acceleration: g-force.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createGForce(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of acceleration: meter-per-second-squared.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMeterPerSecondSquared(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of angle: arc-minute.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createArcMinute(UErrorCode &status);
+
+    /**
+     * Returns unit of angle: arc-second.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createArcSecond(UErrorCode &status);
+
+    /**
+     * Returns unit of angle: degree.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createDegree(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of angle: radian.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createRadian(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of area: acre.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createAcre(UErrorCode &status);
+
+    /**
+     * Returns unit of area: hectare.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createHectare(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of area: square-centimeter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createSquareCentimeter(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of area: square-foot.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createSquareFoot(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of area: square-inch.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createSquareInch(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of area: square-kilometer.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createSquareKilometer(UErrorCode &status);
+
+    /**
+     * Returns unit of area: square-meter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createSquareMeter(UErrorCode &status);
+
+    /**
+     * Returns unit of area: square-mile.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createSquareMile(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of area: square-yard.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createSquareYard(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of consumption: liter-per-kilometer.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createLiterPerKilometer(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of consumption: mile-per-gallon.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMilePerGallon(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of digital: bit.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createBit(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of digital: byte.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createByte(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of digital: gigabit.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createGigabit(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of digital: gigabyte.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createGigabyte(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of digital: kilobit.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createKilobit(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of digital: kilobyte.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createKilobyte(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of digital: megabit.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMegabit(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of digital: megabyte.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMegabyte(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of digital: terabit.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createTerabit(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of digital: terabyte.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createTerabyte(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of duration: day.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createDay(UErrorCode &status);
+
+    /**
+     * Returns unit of duration: hour.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createHour(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of duration: microsecond.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMicrosecond(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of duration: millisecond.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createMillisecond(UErrorCode &status);
+
+    /**
+     * Returns unit of duration: minute.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createMinute(UErrorCode &status);
+
+    /**
+     * Returns unit of duration: month.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createMonth(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of duration: nanosecond.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createNanosecond(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of duration: second.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createSecond(UErrorCode &status);
+
+    /**
+     * Returns unit of duration: week.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createWeek(UErrorCode &status);
+
+    /**
+     * Returns unit of duration: year.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createYear(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of electric: ampere.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createAmpere(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of electric: milliampere.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMilliampere(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of electric: ohm.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createOhm(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of electric: volt.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createVolt(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of energy: calorie.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createCalorie(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of energy: foodcalorie.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createFoodcalorie(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of energy: joule.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createJoule(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of energy: kilocalorie.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createKilocalorie(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of energy: kilojoule.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createKilojoule(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of energy: kilowatt-hour.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createKilowattHour(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of frequency: gigahertz.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createGigahertz(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of frequency: hertz.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createHertz(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of frequency: kilohertz.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createKilohertz(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of frequency: megahertz.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMegahertz(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of length: astronomical-unit.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createAstronomicalUnit(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of length: centimeter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createCentimeter(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of length: decimeter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createDecimeter(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of length: fathom.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createFathom(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of length: foot.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createFoot(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of length: furlong.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createFurlong(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of length: inch.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createInch(UErrorCode &status);
+
+    /**
+     * Returns unit of length: kilometer.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createKilometer(UErrorCode &status);
+
+    /**
+     * Returns unit of length: light-year.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createLightYear(UErrorCode &status);
+
+    /**
+     * Returns unit of length: meter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createMeter(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of length: micrometer.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMicrometer(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of length: mile.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createMile(UErrorCode &status);
+
+    /**
+     * Returns unit of length: millimeter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createMillimeter(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of length: nanometer.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createNanometer(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of length: nautical-mile.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createNauticalMile(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of length: parsec.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createParsec(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of length: picometer.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createPicometer(UErrorCode &status);
+
+    /**
+     * Returns unit of length: yard.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createYard(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of light: lux.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createLux(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of mass: carat.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createCarat(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of mass: gram.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createGram(UErrorCode &status);
+
+    /**
+     * Returns unit of mass: kilogram.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createKilogram(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of mass: metric-ton.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMetricTon(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of mass: microgram.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMicrogram(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of mass: milligram.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMilligram(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of mass: ounce.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createOunce(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of mass: ounce-troy.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createOunceTroy(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of mass: pound.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createPound(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of mass: stone.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createStone(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of mass: ton.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createTon(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of power: gigawatt.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createGigawatt(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of power: horsepower.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createHorsepower(UErrorCode &status);
+
+    /**
+     * Returns unit of power: kilowatt.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createKilowatt(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of power: megawatt.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMegawatt(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of power: milliwatt.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMilliwatt(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of power: watt.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createWatt(UErrorCode &status);
+
+    /**
+     * Returns unit of pressure: hectopascal.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createHectopascal(UErrorCode &status);
+
+    /**
+     * Returns unit of pressure: inch-hg.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createInchHg(UErrorCode &status);
+
+    /**
+     * Returns unit of pressure: millibar.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createMillibar(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of pressure: millimeter-of-mercury.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMillimeterOfMercury(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of pressure: pound-per-square-inch.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createPoundPerSquareInch(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of proportion: karat.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createKarat(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of speed: kilometer-per-hour.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createKilometerPerHour(UErrorCode &status);
+
+    /**
+     * Returns unit of speed: meter-per-second.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createMeterPerSecond(UErrorCode &status);
+
+    /**
+     * Returns unit of speed: mile-per-hour.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createMilePerHour(UErrorCode &status);
+
+    /**
+     * Returns unit of temperature: celsius.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createCelsius(UErrorCode &status);
+
+    /**
+     * Returns unit of temperature: fahrenheit.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createFahrenheit(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of temperature: kelvin.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createKelvin(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Apple-specific for now
+     * Returns unit of temperature: generic temperature.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @internal
+     */
+    static MeasureUnit *createGenericTemperature(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: acre-foot.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createAcreFoot(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: bushel.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createBushel(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: centiliter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createCentiliter(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: cubic-centimeter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createCubicCentimeter(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: cubic-foot.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createCubicFoot(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: cubic-inch.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createCubicInch(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of volume: cubic-kilometer.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createCubicKilometer(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: cubic-meter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createCubicMeter(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of volume: cubic-mile.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createCubicMile(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: cubic-yard.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createCubicYard(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: cup.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createCup(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: deciliter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createDeciliter(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: fluid-ounce.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createFluidOunce(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: gallon.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createGallon(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: hectoliter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createHectoliter(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+    /**
+     * Returns unit of volume: liter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @stable ICU 53
+     */
+    static MeasureUnit *createLiter(UErrorCode &status);
+
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: megaliter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMegaliter(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: milliliter.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createMilliliter(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: pint.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createPint(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: quart.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createQuart(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: tablespoon.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createTablespoon(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * Returns unit of volume: teaspoon.
+     * Caller owns returned value and must free it.
+     * @param status ICU error code.
+     * @draft ICU 54
+     */
+    static MeasureUnit *createTeaspoon(UErrorCode &status);
+
+#endif /* U_HIDE_DRAFT_API */
+
+// End generated createXXX methods
 
  protected:
+
+#ifndef U_HIDE_INTERNAL_API
     /**
-     * Default constructor.
-     * @stable ICU 3.0
+     * For ICU use only.
+     * @internal
      */
-    MeasureUnit();
+    void initTime(const char *timeId);
+
+    /**
+     * For ICU use only.
+     * @internal
+     */
+    void initCurrency(const char *isoCurrency);
+
+#endif  /* U_HIDE_INTERNAL_API */
+
+private:
+    int32_t fTypeId;
+    int32_t fSubTypeId;
+    char fCurrency[4];
+
+    MeasureUnit(int32_t typeId, int32_t subTypeId) : fTypeId(typeId), fSubTypeId(subTypeId) {
+        fCurrency[0] = 0;
+    }
+    void setTo(int32_t typeId, int32_t subTypeId);
+    int32_t getOffset() const;
+    static MeasureUnit *create(int typeId, int subTypeId, UErrorCode &status);
 };
 
 U_NAMESPACE_END
 
-// NOTE: There is no measunit.cpp. For implementation, see measure.cpp. [alan]
-
-#endif // !UCONFIG_NO_FORMATTING
+#endif // !UNCONFIG_NO_FORMATTING
 #endif // __MEASUREUNIT_H__