1b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/* 2b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ******************************************************************************* 3b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (C) 2008-2011, Google, International Business Machines Corporation 4b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * and others. All Rights Reserved. 5b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ******************************************************************************* 6b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 7b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 8b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifndef __TMUTFMT_H__ 9b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define __TMUTFMT_H__ 10b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 11b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/utypes.h" 12b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 13b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/** 14b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * \file 15b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * \brief C++ API: Format and parse duration in single time unit 16b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 17b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 18b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 19b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 20b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 21b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/unistr.h" 22b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/tmunit.h" 23b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/tmutamt.h" 24b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/measfmt.h" 25b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/numfmt.h" 26b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/plurrule.h" 27b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 28b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/** 29b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Constants for various styles. 30b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * There are 2 styles: full name and abbreviated name. 31b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * For example, for English, the full name for hour duration is "3 hours", 32b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * and the abbreviated name is "3 hrs". 33b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * @draft ICU 4.8 34b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 35b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoenum UTimeUnitFormatStyle { 36b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /** @draft ICU 4.8 */ 37b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UTMUTFMT_FULL_STYLE, 38b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /** @draft ICU 4.8 */ 39b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UTMUTFMT_ABBREVIATED_STYLE, 40b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /** @draft ICU 4.8 */ 41b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UTMUTFMT_FORMAT_STYLE_COUNT 42b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 43b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef enum UTimeUnitFormatStyle UTimeUnitFormatStyle; /**< @draft ICU 4.8 */ 44b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 45b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruU_NAMESPACE_BEGIN 46b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 47b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruclass Hashtable; 48b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 49b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 50b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/** 51b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Format or parse a TimeUnitAmount, using plural rules for the units where available. 52b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * 53b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * <P> 5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Code Sample: 55b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * <pre> 56b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * // create time unit amount instance - a combination of Number and time unit 57b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * UErrorCode status = U_ZERO_ERROR; 58b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * TimeUnitAmount* source = new TimeUnitAmount(2, TimeUnit::UTIMEUNIT_YEAR, status); 59b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * // create time unit format instance 60b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * TimeUnitFormat* format = new TimeUnitFormat(Locale("en"), status); 61b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * // format a time unit amount 62b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * UnicodeString formatted; 63b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Formattable formattable; 64b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * if (U_SUCCESS(status)) { 65b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * formattable.adoptObject(source); 66b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * formatted = ((Format*)format)->format(formattable, formatted, status); 67b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Formattable result; 68b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * ((Format*)format)->parseObject(formatted, result, status); 69b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * if (U_SUCCESS(status)) { 7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * assert (result == formattable); 71b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * } 72b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * } 73b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * </pre> 74b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * 75b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * <P> 76b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @see TimeUnitAmount 77b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @see TimeUnitFormat 78b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @draft ICU 4.2 79b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 80b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruclass U_I18N_API TimeUnitFormat: public MeasureFormat { 81b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querupublic: 82b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 83b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 8450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Create TimeUnitFormat with default locale, and full name style. 85b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Use setLocale and/or setFormat to modify. 8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 87b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 88b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TimeUnitFormat(UErrorCode& status); 89b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 90b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 91b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Create TimeUnitFormat given locale, and full name style. 9250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 93b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 94b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TimeUnitFormat(const Locale& locale, UErrorCode& status); 95b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 96b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 97b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Create TimeUnitFormat given locale and style. 98b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * @draft ICU 4.8 99b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 100b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TimeUnitFormat(const Locale& locale, UTimeUnitFormatStyle style, UErrorCode& status); 101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Copy constructor. 10450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TimeUnitFormat(const TimeUnitFormat&); 107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * deconstructor 11050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru virtual ~TimeUnitFormat(); 113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Clone this Format object polymorphically. The caller owns the result and 116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * should delete it when done. 117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @return A copy of the object. 11850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru virtual Format* clone(void) const; 121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Assignment operator 12450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TimeUnitFormat& operator=(const TimeUnitFormat& other); 127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Return true if the given Format objects are semantically equal. Objects 131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * of different subclasses are considered unequal. 132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param other the object to be compared with. 133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @return true if the given Format objects are semantically equal. 13450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru virtual UBool operator==(const Format& other) const; 137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 13950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Return true if the given Format objects are not semantically equal. 140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Objects of different subclasses are considered unequal. 141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param other the object to be compared with. 142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @return true if the given Format objects are not semantically equal. 14350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UBool operator!=(const Format& other) const; 146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Set the locale used for formatting or parsing. 149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param locale the locale to be set 150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param status output param set to success/failure code on exit 15150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru void setLocale(const Locale& locale, UErrorCode& status); 154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 15750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Set the number format used for formatting or parsing. 158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param format the number formatter to be set 159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param status output param set to success/failure code on exit 16050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru void setNumberFormat(const NumberFormat& format, UErrorCode& status); 163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 16450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 16550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho using MeasureFormat::format; 16650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Format a TimeUnitAmount. 169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * If the formattable object is not a time unit amount object, 170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * or the number in time unit amount is not a double type or long type 171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * numeric, it returns a failing status: U_ILLEGAL_ARGUMENT_ERROR. 172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @see Format#format(const Formattable&, UnicodeString&, FieldPosition&, UErrorCode&) const 17350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 17550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual UnicodeString& format(const Formattable& obj, 176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString& toAppendTo, 17750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPosition& pos, 17850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode& status) const; 179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Parse a TimeUnitAmount. 182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @see Format#parseObject(const UnicodeString&, Formattable&, ParsePosition&) const; 18350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 18550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual void parseObject(const UnicodeString& source, 186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable& result, 187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ParsePosition& pos) const; 188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Return the class ID for this class. This is useful only for comparing to 191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * a return value from getDynamicClassID(). For example: 192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * <pre> 193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * . Base* polymorphic_pointer = createPolymorphicObject(); 194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * . if (polymorphic_pointer->getDynamicClassID() == 195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * . erived::getStaticClassID()) ... 196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * </pre> 197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @return The class ID for all objects of this class. 19850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru static UClassID U_EXPORT2 getStaticClassID(void); 201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This 204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * method is to implement a simple version of RTTI, since not all C++ 205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * compilers support genuine RTTI. Polymorphic operator==() and clone() 206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * methods call this method. 207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * 208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @return The class ID for this object. All objects of a 209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * given class have the same class ID. Objects of 210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * other classes have different class IDs. 21150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @stable ICU 4.2 212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru virtual UClassID getDynamicClassID(void) const; 214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruprivate: 216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat* fNumberFormat; 217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale fLocale; 218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Hashtable* fTimeUnitToCountToPatterns[TimeUnit::UTIMEUNIT_FIELD_COUNT]; 219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru PluralRules* fPluralRules; 220b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UTimeUnitFormatStyle fStyle; 221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 222b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho void create(const Locale& locale, UTimeUnitFormatStyle style, UErrorCode& status); 223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // it might actually be simpler to make them Decimal Formats later. 225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // initialize all private data members 22650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setup(UErrorCode& status); 22750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // initialize data member without fill in data for fTimeUnitToCountToPattern 229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru void initDataMembers(UErrorCode& status); 230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // initialize fTimeUnitToCountToPatterns from current locale's resource. 232b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho void readFromCurrentLocale(UTimeUnitFormatStyle style, const char* key, UErrorCode& status); 233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // check completeness of fTimeUnitToCountToPatterns against all time units, 235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // and all plural rules, fill in fallback as necessary. 236b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho void checkConsistency(UTimeUnitFormatStyle style, const char* key, UErrorCode& status); 237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // fill in fTimeUnitToCountToPatterns from locale fall-back chain 239b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho void searchInLocaleChain(UTimeUnitFormatStyle style, const char* key, const char* localeName, 240b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TimeUnit::UTimeUnitFields field, const UnicodeString&, 241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char*, Hashtable*, UErrorCode&); 242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // initialize hash table 244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Hashtable* initHash(UErrorCode& status); 245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // delete hash table 247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru void deleteHash(Hashtable* htable); 248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // copy hash table 250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status); 251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // get time unit name, such as "year", from time unit field enum, such as 252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // UTIMEUNIT_YEAR. 253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru static const char* getTimeUnitName(TimeUnit::UTimeUnitFields field, UErrorCode& status); 254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}; 255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruinline UBool 259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruTimeUnitFormat::operator!=(const Format& other) const { 260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return !operator==(other); 261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruU_NAMESPACE_END 266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif // __TMUTFMT_H__ 270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//eof 271