17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
3f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert * Copyright (C) 2004-2015, Google Inc, International Business Machines        *
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Corporation and others. All Rights Reserved.                                *
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.util;
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.Externalizable;
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.IOException;
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.ObjectInput;
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.ObjectOutput;
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.ObjectStreamException;
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.Serializable;
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Collections;
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Enumeration;
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.HashMap;
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.HashSet;
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Map;
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.MissingResourceException;
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Set;
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.ICUResourceBundle;
24f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubertimport com.ibm.icu.impl.Pair;
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.UnicodeSet;
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * A unit such as length, mass, volume, currency, etc.  A unit is
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * coupled with a numeric amount to produce a Measure. MeasureUnit objects are immutable.
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * All subclasses must guarantee that. (However, subclassing is discouraged.)
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @see com.ibm.icu.util.Measure
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @author Alan Liu
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @stable ICU 3.0
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class MeasureUnit implements Serializable {
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static final long serialVersionUID = -1839973855554750484L;
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // Used to pre-fill the cache. These same constants appear in MeasureFormat too.
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static final String[] unitKeys = new String[]{"units", "unitsShort", "unitsNarrow"};
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static final Map<String, Map<String,MeasureUnit>> cache
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    = new HashMap<String, Map<String,MeasureUnit>>();
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @internal
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @deprecated This API is ICU internal only.
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Deprecated
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    protected final String type;
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @internal
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @deprecated This API is ICU internal only.
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Deprecated
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    protected final String subType;
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @internal
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @deprecated This API is ICU internal only.
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Deprecated
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    protected MeasureUnit(String type, String subType) {
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        this.type = type;
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        this.subType = subType;
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Get the type, such as "length"
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
73f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public String getType() {
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return type;
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Get the subType, such as “foot”.
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
83f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public String getSubtype() {
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return subType;
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
92f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * {@inheritDoc}
93f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     *
94f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public int hashCode() {
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return 31 * type.hashCode() + subType.hashCode();
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
102f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * {@inheritDoc}
103f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     *
104f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public boolean equals(Object rhs) {
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (rhs == this) {
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return true;
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (!(rhs instanceof MeasureUnit)) {
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return false;
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        MeasureUnit c = (MeasureUnit) rhs;
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return type.equals(c.type) && subType.equals(c.subType);
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
119f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * {@inheritDoc}
120f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     *
121f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public String toString() {
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return type + "-" + subType;
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Get all of the available units' types. Returned set is unmodifiable.
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
131f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public synchronized static Set<String> getAvailableTypes() {
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return Collections.unmodifiableSet(cache.keySet());
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * For the given type, return the available units.
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @param type the type
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @return the available units for type. Returned set is unmodifiable.
141f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public synchronized static Set<MeasureUnit> getAvailable(String type) {
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Map<String, MeasureUnit> units = cache.get(type);
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Train users not to modify returned set from the start giving us more
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // flexibility for implementation.
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return units == null ? Collections.<MeasureUnit>emptySet()
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                : Collections.unmodifiableSet(new HashSet<MeasureUnit>(units.values()));
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Get all of the available units. Returned set is unmodifiable.
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
154f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public synchronized static Set<MeasureUnit> getAvailable() {
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Set<MeasureUnit> result = new HashSet<MeasureUnit>();
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (String type : new HashSet<String>(MeasureUnit.getAvailableTypes())) {
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (MeasureUnit unit : MeasureUnit.getAvailable(type)) {
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                result.add(unit);
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Train users not to modify returned set from the start giving us more
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // flexibility for implementation.
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return Collections.unmodifiableSet(result);
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Create a MeasureUnit instance (creates a singleton instance).
1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * <p>
1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Normally this method should not be used, since there will be no formatting data
1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * available for it, and it may not be returned by getAvailable().
1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * However, for special purposes (such as CLDR tooling), it is available.
1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @internal
1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @deprecated This API is ICU internal only.
1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Deprecated
1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static MeasureUnit internalGetInstance(String type, String subType) {
1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (type == null || subType == null) {
1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            throw new NullPointerException("Type and subType must be non-null");
1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (!"currency".equals(type)) {
1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (!ASCII.containsAll(type) || !ASCII_HYPHEN.containsAll(subType)) {
1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                throw new IllegalArgumentException("The type or subType are invalid.");
1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Factory factory;
1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if ("currency".equals(type)) {
1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            factory = CURRENCY_FACTORY;
1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if ("duration".equals(type)) {
1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            factory = TIMEUNIT_FACTORY;
1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            factory = UNIT_FACTORY;
1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return MeasureUnit.addUnit(type, subType, factory);
1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
198f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert
199f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    /**
200f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * For ICU use only.
201f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @internal
202f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @deprecated This API is ICU internal only.
203f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
204f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    @Deprecated
205f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    public static MeasureUnit resolveUnitPerUnit(MeasureUnit unit, MeasureUnit perUnit) {
206f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        return unitPerUnitToSingleUnit.get(Pair.of(unit, perUnit));
207f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    }
2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    static final UnicodeSet ASCII = new UnicodeSet('a', 'z').freeze();
2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    static final UnicodeSet ASCII_HYPHEN = new UnicodeSet('-', '-', 'a', 'z').freeze();
2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @internal
2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @deprecated This API is ICU internal only.
2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Deprecated
2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    protected interface Factory {
2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        /**
2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         * @internal
2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         * @deprecated This API is ICU internal only.
2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         */
2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        @Deprecated
2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        MeasureUnit create(String type, String subType);
2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static Factory UNIT_FACTORY = new Factory() {
2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public MeasureUnit create(String type, String subType) {
2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return new MeasureUnit(type, subType);
2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    static Factory CURRENCY_FACTORY = new Factory() {
2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public MeasureUnit create(String unusedType, String subType) {
2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return new Currency(subType);
2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    static Factory TIMEUNIT_FACTORY = new Factory() {
2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public MeasureUnit create(String type, String subType) {
2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           return new TimeUnit(type, subType);
2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    static {
2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // load all of the units for English, since we know that that is a superset.
2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        /**
2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         *     units{
2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         *            duration{
2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         *                day{
2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         *                    one{"{0} ден"}
2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         *                    other{"{0} дена"}
2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         *                }
2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         */
2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        ICUResourceBundle resource = (ICUResourceBundle)UResourceBundle.getBundleInstance(ICUResourceBundle.ICU_BASE_NAME, "en");
2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (String key : unitKeys) {
2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            try {
2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                ICUResourceBundle unitsTypeRes = resource.getWithFallback(key);
2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                int size = unitsTypeRes.getSize();
2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                for ( int index = 0; index < size; ++index) {
2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    UResourceBundle unitsRes = unitsTypeRes.get(index);
2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    String type = unitsRes.getKey();
2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    if (type.equals("compound")) {
2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        continue; // special type, does not have any unit plurals
2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    }
2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    int unitsSize = unitsRes.getSize();
2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    for ( int index2 = 0; index2 < unitsSize; ++index2) {
2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        ICUResourceBundle unitNameRes = (ICUResourceBundle)unitsRes.get(index2);
2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        if (unitNameRes.get("other") != null) {
2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            internalGetInstance(type, unitNameRes.getKey());
2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        }
2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    }
2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } catch ( MissingResourceException e ) {
2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                continue;
2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // preallocate currencies
2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            UResourceBundle bundle = UResourceBundle.getBundleInstance(
2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    ICUResourceBundle.ICU_BASE_NAME,
2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    "currencyNumericCodes",
2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    ICUResourceBundle.ICU_DATA_CLASS_LOADER);
2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            UResourceBundle codeMap = bundle.get("codeMap");
2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (Enumeration<String> it = codeMap.getKeys(); it.hasMoreElements();) {
2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                MeasureUnit.internalGetInstance("currency", it.nextElement());
2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (MissingResourceException e) {
2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // fall through
2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // Must only be called at static initialization, or inside synchronized block.
2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @internal
2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @deprecated This API is ICU internal only.
2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Deprecated
2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    protected synchronized static MeasureUnit addUnit(String type, String unitName, Factory factory) {
2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Map<String, MeasureUnit> tmp = cache.get(type);
3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (tmp == null) {
3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            cache.put(type, tmp = new HashMap<String, MeasureUnit>());
3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // "intern" the type by setting to first item's type.
3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            type = tmp.entrySet().iterator().next().getValue().type;
3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        MeasureUnit unit = tmp.get(unitName);
3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (unit == null) {
3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            tmp.put(unitName, unit = factory.create(type, unitName));
3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return unit;
3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*
3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Useful constants. Not necessarily complete: see {@link #getAvailable()}.
3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// All code between the "Start generated MeasureUnit constants" comment and
3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// the "End generated MeasureUnit constants" comment is auto generated code
3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// and must not be edited manually. For instructions on how to correctly
3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// update this code, refer to:
322f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert// http://site.icu-project.org/design/formatting/measureformat/updating-measure-unit
3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//
3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // Start generated MeasureUnit constants
3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of acceleration: g-force
328f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
329f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit G_FORCE = MeasureUnit.internalGetInstance("acceleration", "g-force");
3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of acceleration: meter-per-second-squared
3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
336f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit METER_PER_SECOND_SQUARED = MeasureUnit.internalGetInstance("acceleration", "meter-per-second-squared");
3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of angle: arc-minute
341f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
342f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit ARC_MINUTE = MeasureUnit.internalGetInstance("angle", "arc-minute");
3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of angle: arc-second
347f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
348f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit ARC_SECOND = MeasureUnit.internalGetInstance("angle", "arc-second");
3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of angle: degree
353f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
354f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit DEGREE = MeasureUnit.internalGetInstance("angle", "degree");
3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of angle: radian
3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
361f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit RADIAN = MeasureUnit.internalGetInstance("angle", "radian");
3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: acre
366f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
367f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit ACRE = MeasureUnit.internalGetInstance("area", "acre");
3697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: hectare
372f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
373f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit HECTARE = MeasureUnit.internalGetInstance("area", "hectare");
3757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-centimeter
3787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
3797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
380f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_CENTIMETER = MeasureUnit.internalGetInstance("area", "square-centimeter");
3827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-foot
385f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
386f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_FOOT = MeasureUnit.internalGetInstance("area", "square-foot");
3887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-inch
3917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
3927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
393f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_INCH = MeasureUnit.internalGetInstance("area", "square-inch");
3957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-kilometer
398f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
399f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_KILOMETER = MeasureUnit.internalGetInstance("area", "square-kilometer");
4017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-meter
404f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
405f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_METER = MeasureUnit.internalGetInstance("area", "square-meter");
4077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-mile
410f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
411f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_MILE = MeasureUnit.internalGetInstance("area", "square-mile");
4137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-yard
4167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
4177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
418f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_YARD = MeasureUnit.internalGetInstance("area", "square-yard");
4207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of consumption: liter-per-kilometer
4237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
4247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
425f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit LITER_PER_KILOMETER = MeasureUnit.internalGetInstance("consumption", "liter-per-kilometer");
4277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of consumption: mile-per-gallon
4307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
4317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
432f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILE_PER_GALLON = MeasureUnit.internalGetInstance("consumption", "mile-per-gallon");
4347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: bit
4377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
4387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
439f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit BIT = MeasureUnit.internalGetInstance("digital", "bit");
4417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: byte
4447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
4457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
446f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit BYTE = MeasureUnit.internalGetInstance("digital", "byte");
4487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: gigabit
4517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
4527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
453f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit GIGABIT = MeasureUnit.internalGetInstance("digital", "gigabit");
4557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: gigabyte
4587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
4597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
460f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit GIGABYTE = MeasureUnit.internalGetInstance("digital", "gigabyte");
4627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: kilobit
4657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
4667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
467f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOBIT = MeasureUnit.internalGetInstance("digital", "kilobit");
4697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: kilobyte
4727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
4737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
474f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOBYTE = MeasureUnit.internalGetInstance("digital", "kilobyte");
4767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: megabit
4797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
4807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
481f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MEGABIT = MeasureUnit.internalGetInstance("digital", "megabit");
4837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: megabyte
4867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
4877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
488f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MEGABYTE = MeasureUnit.internalGetInstance("digital", "megabyte");
4907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: terabit
4937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
4947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
495f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit TERABIT = MeasureUnit.internalGetInstance("digital", "terabit");
4977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: terabyte
5007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
5017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
502f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit TERABYTE = MeasureUnit.internalGetInstance("digital", "terabyte");
5047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: day
5077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
508f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit DAY = (TimeUnit) MeasureUnit.internalGetInstance("duration", "day");
5107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: hour
5137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
514f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit HOUR = (TimeUnit) MeasureUnit.internalGetInstance("duration", "hour");
5167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: microsecond
5197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
5207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
521f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MICROSECOND = MeasureUnit.internalGetInstance("duration", "microsecond");
5237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: millisecond
526f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
527f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLISECOND = MeasureUnit.internalGetInstance("duration", "millisecond");
5297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: minute
5327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
533f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit MINUTE = (TimeUnit) MeasureUnit.internalGetInstance("duration", "minute");
5357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: month
538f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     *
5397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
540f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit MONTH = (TimeUnit) MeasureUnit.internalGetInstance("duration", "month");
5427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: nanosecond
5457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
5467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
547f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit NANOSECOND = MeasureUnit.internalGetInstance("duration", "nanosecond");
5497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: second
5527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
553f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit SECOND = (TimeUnit) MeasureUnit.internalGetInstance("duration", "second");
5557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: week
5587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
559f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit WEEK = (TimeUnit) MeasureUnit.internalGetInstance("duration", "week");
5617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: year
5647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
565f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit YEAR = (TimeUnit) MeasureUnit.internalGetInstance("duration", "year");
5677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of electric: ampere
5707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
5717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
572f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit AMPERE = MeasureUnit.internalGetInstance("electric", "ampere");
5747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of electric: milliampere
5777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
5787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
579f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLIAMPERE = MeasureUnit.internalGetInstance("electric", "milliampere");
5817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of electric: ohm
5847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
5857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
586f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit OHM = MeasureUnit.internalGetInstance("electric", "ohm");
5887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of electric: volt
5917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
5927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
593f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit VOLT = MeasureUnit.internalGetInstance("electric", "volt");
5957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of energy: calorie
5987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
5997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
600f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CALORIE = MeasureUnit.internalGetInstance("energy", "calorie");
6027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of energy: foodcalorie
6057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
6067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
607f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit FOODCALORIE = MeasureUnit.internalGetInstance("energy", "foodcalorie");
6097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of energy: joule
6127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
6137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
614f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit JOULE = MeasureUnit.internalGetInstance("energy", "joule");
6167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of energy: kilocalorie
6197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
6207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
621f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOCALORIE = MeasureUnit.internalGetInstance("energy", "kilocalorie");
6237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of energy: kilojoule
6267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
6277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
628f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOJOULE = MeasureUnit.internalGetInstance("energy", "kilojoule");
6307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of energy: kilowatt-hour
6337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
6347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
635f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOWATT_HOUR = MeasureUnit.internalGetInstance("energy", "kilowatt-hour");
6377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of frequency: gigahertz
6407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
6417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
642f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit GIGAHERTZ = MeasureUnit.internalGetInstance("frequency", "gigahertz");
6447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of frequency: hertz
6477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
6487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
649f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit HERTZ = MeasureUnit.internalGetInstance("frequency", "hertz");
6517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of frequency: kilohertz
6547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
6557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
656f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOHERTZ = MeasureUnit.internalGetInstance("frequency", "kilohertz");
6587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of frequency: megahertz
6617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
6627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
663f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MEGAHERTZ = MeasureUnit.internalGetInstance("frequency", "megahertz");
6657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: astronomical-unit
6687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
6697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
670f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit ASTRONOMICAL_UNIT = MeasureUnit.internalGetInstance("length", "astronomical-unit");
6727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: centimeter
675f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
676f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CENTIMETER = MeasureUnit.internalGetInstance("length", "centimeter");
6787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: decimeter
6817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
6827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
683f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit DECIMETER = MeasureUnit.internalGetInstance("length", "decimeter");
6857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: fathom
6887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
6897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
690f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit FATHOM = MeasureUnit.internalGetInstance("length", "fathom");
6927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: foot
695f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
696f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit FOOT = MeasureUnit.internalGetInstance("length", "foot");
6987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: furlong
7017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
7027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
703f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit FURLONG = MeasureUnit.internalGetInstance("length", "furlong");
7057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: inch
708f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
709f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit INCH = MeasureUnit.internalGetInstance("length", "inch");
7117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: kilometer
714f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
715f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOMETER = MeasureUnit.internalGetInstance("length", "kilometer");
7177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: light-year
720f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
721f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit LIGHT_YEAR = MeasureUnit.internalGetInstance("length", "light-year");
7237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: meter
726f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
727f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit METER = MeasureUnit.internalGetInstance("length", "meter");
7297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: micrometer
7327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
7337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
734f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MICROMETER = MeasureUnit.internalGetInstance("length", "micrometer");
7367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: mile
739f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
740f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILE = MeasureUnit.internalGetInstance("length", "mile");
7427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: millimeter
745f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
746f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLIMETER = MeasureUnit.internalGetInstance("length", "millimeter");
7487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: nanometer
7517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
7527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
753f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit NANOMETER = MeasureUnit.internalGetInstance("length", "nanometer");
7557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: nautical-mile
7587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
7597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
760f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit NAUTICAL_MILE = MeasureUnit.internalGetInstance("length", "nautical-mile");
7627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: parsec
7657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
7667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
767f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit PARSEC = MeasureUnit.internalGetInstance("length", "parsec");
7697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: picometer
772f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
773f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit PICOMETER = MeasureUnit.internalGetInstance("length", "picometer");
7757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: yard
778f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
779f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit YARD = MeasureUnit.internalGetInstance("length", "yard");
7817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of light: lux
7847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
7857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
786f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit LUX = MeasureUnit.internalGetInstance("light", "lux");
7887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: carat
7917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
7927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
793f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CARAT = MeasureUnit.internalGetInstance("mass", "carat");
7957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: gram
798f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
799f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit GRAM = MeasureUnit.internalGetInstance("mass", "gram");
8017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: kilogram
804f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
805f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOGRAM = MeasureUnit.internalGetInstance("mass", "kilogram");
8077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: metric-ton
8107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
8117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
812f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit METRIC_TON = MeasureUnit.internalGetInstance("mass", "metric-ton");
8147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: microgram
8177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
8187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
819f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MICROGRAM = MeasureUnit.internalGetInstance("mass", "microgram");
8217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: milligram
8247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
8257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
826f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLIGRAM = MeasureUnit.internalGetInstance("mass", "milligram");
8287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: ounce
831f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
832f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit OUNCE = MeasureUnit.internalGetInstance("mass", "ounce");
8347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: ounce-troy
8377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
8387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
839f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit OUNCE_TROY = MeasureUnit.internalGetInstance("mass", "ounce-troy");
8417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: pound
844f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
845f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit POUND = MeasureUnit.internalGetInstance("mass", "pound");
8477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: stone
8507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
8517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
852f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit STONE = MeasureUnit.internalGetInstance("mass", "stone");
8547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: ton
8577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
8587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
859f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit TON = MeasureUnit.internalGetInstance("mass", "ton");
8617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of power: gigawatt
8647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
8657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
866f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit GIGAWATT = MeasureUnit.internalGetInstance("power", "gigawatt");
8687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of power: horsepower
871f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
872f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit HORSEPOWER = MeasureUnit.internalGetInstance("power", "horsepower");
8747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of power: kilowatt
877f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
878f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOWATT = MeasureUnit.internalGetInstance("power", "kilowatt");
8807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of power: megawatt
8837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
8847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
885f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MEGAWATT = MeasureUnit.internalGetInstance("power", "megawatt");
8877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of power: milliwatt
8907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
8917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
892f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLIWATT = MeasureUnit.internalGetInstance("power", "milliwatt");
8947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of power: watt
897f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
898f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit WATT = MeasureUnit.internalGetInstance("power", "watt");
9007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of pressure: hectopascal
903f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
904f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit HECTOPASCAL = MeasureUnit.internalGetInstance("pressure", "hectopascal");
9067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of pressure: inch-hg
909f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
910f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit INCH_HG = MeasureUnit.internalGetInstance("pressure", "inch-hg");
9127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of pressure: millibar
915f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
916f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLIBAR = MeasureUnit.internalGetInstance("pressure", "millibar");
9187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of pressure: millimeter-of-mercury
9217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
9227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
923f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLIMETER_OF_MERCURY = MeasureUnit.internalGetInstance("pressure", "millimeter-of-mercury");
9257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of pressure: pound-per-square-inch
9287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
9297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
930f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit POUND_PER_SQUARE_INCH = MeasureUnit.internalGetInstance("pressure", "pound-per-square-inch");
9327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of proportion: karat
9357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
9367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
937f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KARAT = MeasureUnit.internalGetInstance("proportion", "karat");
9397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of speed: kilometer-per-hour
942f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
943f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOMETER_PER_HOUR = MeasureUnit.internalGetInstance("speed", "kilometer-per-hour");
9457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of speed: meter-per-second
948f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
949f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit METER_PER_SECOND = MeasureUnit.internalGetInstance("speed", "meter-per-second");
9517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of speed: mile-per-hour
954f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
955f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILE_PER_HOUR = MeasureUnit.internalGetInstance("speed", "mile-per-hour");
9577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of temperature: celsius
960f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
961f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CELSIUS = MeasureUnit.internalGetInstance("temperature", "celsius");
9637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of temperature: fahrenheit
966f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
967f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit FAHRENHEIT = MeasureUnit.internalGetInstance("temperature", "fahrenheit");
9697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of temperature: kelvin
9727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
9737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
974f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KELVIN = MeasureUnit.internalGetInstance("temperature", "kelvin");
9767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: acre-foot
9797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
9807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
981f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit ACRE_FOOT = MeasureUnit.internalGetInstance("volume", "acre-foot");
9837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: bushel
9867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
9877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
988f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit BUSHEL = MeasureUnit.internalGetInstance("volume", "bushel");
9907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: centiliter
9937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
9947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
995f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CENTILITER = MeasureUnit.internalGetInstance("volume", "centiliter");
9977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-centimeter
10007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
10017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1002f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_CENTIMETER = MeasureUnit.internalGetInstance("volume", "cubic-centimeter");
10047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-foot
10077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
10087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1009f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_FOOT = MeasureUnit.internalGetInstance("volume", "cubic-foot");
10117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-inch
10147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
10157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1016f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_INCH = MeasureUnit.internalGetInstance("volume", "cubic-inch");
10187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-kilometer
1021f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1022f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_KILOMETER = MeasureUnit.internalGetInstance("volume", "cubic-kilometer");
10247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-meter
10277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
10287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1029f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_METER = MeasureUnit.internalGetInstance("volume", "cubic-meter");
10317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-mile
1034f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1035f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_MILE = MeasureUnit.internalGetInstance("volume", "cubic-mile");
10377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-yard
10407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
10417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1042f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_YARD = MeasureUnit.internalGetInstance("volume", "cubic-yard");
10447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cup
10477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
10487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1049f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUP = MeasureUnit.internalGetInstance("volume", "cup");
10517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: deciliter
10547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
10557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1056f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit DECILITER = MeasureUnit.internalGetInstance("volume", "deciliter");
10587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: fluid-ounce
10617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
10627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1063f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit FLUID_OUNCE = MeasureUnit.internalGetInstance("volume", "fluid-ounce");
10657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: gallon
10687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
10697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1070f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit GALLON = MeasureUnit.internalGetInstance("volume", "gallon");
10727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: hectoliter
10757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
10767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1077f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit HECTOLITER = MeasureUnit.internalGetInstance("volume", "hectoliter");
10797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: liter
1082f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1083f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit LITER = MeasureUnit.internalGetInstance("volume", "liter");
10857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: megaliter
10887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
10897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1090f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MEGALITER = MeasureUnit.internalGetInstance("volume", "megaliter");
10927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: milliliter
10957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
10967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1097f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLILITER = MeasureUnit.internalGetInstance("volume", "milliliter");
10997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
11017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: pint
11027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
11037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1104f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
11057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit PINT = MeasureUnit.internalGetInstance("volume", "pint");
11067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
11087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: quart
11097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
11107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1111f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
11127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit QUART = MeasureUnit.internalGetInstance("volume", "quart");
11137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
11157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: tablespoon
11167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
11177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1118f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
11197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit TABLESPOON = MeasureUnit.internalGetInstance("volume", "tablespoon");
11207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
11227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: teaspoon
11237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @draft ICU 54
11247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1125f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
11267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit TEASPOON = MeasureUnit.internalGetInstance("volume", "teaspoon");
11277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1128f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    private static HashMap<Pair<MeasureUnit, MeasureUnit>, MeasureUnit>unitPerUnitToSingleUnit =
1129f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert            new HashMap<Pair<MeasureUnit, MeasureUnit>, MeasureUnit>();
1130f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert
1131f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    static {
1132f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        unitPerUnitToSingleUnit.put(Pair.<MeasureUnit, MeasureUnit>of(MeasureUnit.KILOMETER, MeasureUnit.HOUR), MeasureUnit.KILOMETER_PER_HOUR);
1133f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        unitPerUnitToSingleUnit.put(Pair.<MeasureUnit, MeasureUnit>of(MeasureUnit.MILE, MeasureUnit.GALLON), MeasureUnit.MILE_PER_GALLON);
1134f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        unitPerUnitToSingleUnit.put(Pair.<MeasureUnit, MeasureUnit>of(MeasureUnit.MILE, MeasureUnit.HOUR), MeasureUnit.MILE_PER_HOUR);
1135f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        unitPerUnitToSingleUnit.put(Pair.<MeasureUnit, MeasureUnit>of(MeasureUnit.METER, MeasureUnit.SECOND), MeasureUnit.METER_PER_SECOND);
1136f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        unitPerUnitToSingleUnit.put(Pair.<MeasureUnit, MeasureUnit>of(MeasureUnit.LITER, MeasureUnit.KILOMETER), MeasureUnit.LITER_PER_KILOMETER);
1137f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        unitPerUnitToSingleUnit.put(Pair.<MeasureUnit, MeasureUnit>of(MeasureUnit.POUND, MeasureUnit.SQUARE_INCH), MeasureUnit.POUND_PER_SQUARE_INCH);
1138f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    }
1139f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert
11407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // End generated MeasureUnit constants
11417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /* Private */
11427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private Object writeReplace() throws ObjectStreamException {
11447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return new MeasureUnitProxy(type, subType);
11457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
11467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    static final class MeasureUnitProxy implements Externalizable {
11487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        private static final long serialVersionUID = -3910681415330989598L;
11497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        private String type;
11517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        private String subType;
11527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public MeasureUnitProxy(String type, String subType) {
11547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            this.type = type;
11557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            this.subType = subType;
11567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
11577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Must have public constructor, to enable Externalizable
11597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public MeasureUnitProxy() {
11607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
11617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public void writeExternal(ObjectOutput out) throws IOException {
11637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.writeByte(0); // version
11647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.writeUTF(type);
11657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.writeUTF(subType);
11667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.writeShort(0); // allow for more data.
11677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
11687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
11707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            /* byte version = */ in.readByte(); // version
11717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            type = in.readUTF();
11727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            subType = in.readUTF();
11737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // allow for more data from future version
11747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            int extra = in.readShort();
11757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (extra > 0) {
11767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                byte[] extraBytes = new byte[extra];
11777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                in.read(extraBytes, 0, extra);
11787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
11797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
11807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        private Object readResolve() throws ObjectStreamException {
11827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return MeasureUnit.internalGetInstance(type, subType);
11837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
11847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
11857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
1186