| Index: icu46/source/i18n/unicode/tmutfmt.h
|
| ===================================================================
|
| --- icu46/source/i18n/unicode/tmutfmt.h (revision 0)
|
| +++ icu46/source/i18n/unicode/tmutfmt.h (revision 0)
|
| @@ -0,0 +1,272 @@
|
| +/*
|
| + *******************************************************************************
|
| + * Copyright (C) 2010, Google, International Business Machines Corporation and *
|
| + * others. All Rights Reserved. *
|
| + *******************************************************************************
|
| + */
|
| +
|
| +#ifndef __TMUTFMT_H__
|
| +#define __TMUTFMT_H__
|
| +
|
| +#include "unicode/utypes.h"
|
| +
|
| +/**
|
| + * \file
|
| + * \brief C++ API: Format and parse duration in single time unit
|
| + */
|
| +
|
| +
|
| +#if !UCONFIG_NO_FORMATTING
|
| +
|
| +#include "unicode/unistr.h"
|
| +#include "unicode/tmunit.h"
|
| +#include "unicode/tmutamt.h"
|
| +#include "unicode/measfmt.h"
|
| +#include "unicode/numfmt.h"
|
| +#include "unicode/plurrule.h"
|
| +
|
| +/**
|
| + * @internal ICU 4.2
|
| + */
|
| +
|
| +union UHashTok;
|
| +
|
| +U_NAMESPACE_BEGIN
|
| +
|
| +class Hashtable;
|
| +
|
| +
|
| +/**
|
| + * Format or parse a TimeUnitAmount, using plural rules for the units where available.
|
| + *
|
| + * <P>
|
| + * Code Sample:
|
| + * <pre>
|
| + * // create time unit amount instance - a combination of Number and time unit
|
| + * UErrorCode status = U_ZERO_ERROR;
|
| + * TimeUnitAmount* source = new TimeUnitAmount(2, TimeUnit::UTIMEUNIT_YEAR, status);
|
| + * // create time unit format instance
|
| + * TimeUnitFormat* format = new TimeUnitFormat(Locale("en"), status);
|
| + * // format a time unit amount
|
| + * UnicodeString formatted;
|
| + * Formattable formattable;
|
| + * if (U_SUCCESS(status)) {
|
| + * formattable.adoptObject(source);
|
| + * formatted = ((Format*)format)->format(formattable, formatted, status);
|
| + * Formattable result;
|
| + * ((Format*)format)->parseObject(formatted, result, status);
|
| + * if (U_SUCCESS(status)) {
|
| + * assert (result == formattable);
|
| + * }
|
| + * }
|
| + * </pre>
|
| + *
|
| + * <P>
|
| + * @see TimeUnitAmount
|
| + * @see TimeUnitFormat
|
| + * @draft ICU 4.2
|
| + */
|
| +class U_I18N_API TimeUnitFormat: public MeasureFormat {
|
| +public:
|
| +
|
| + /**
|
| + * Constants for various styles.
|
| + * There are 2 styles: full name and abbreviated name.
|
| + * For example, for English, the full name for hour duration is "3 hours",
|
| + * and the abbreviated name is "3 hrs".
|
| + * @draft ICU 4.2
|
| + */
|
| + enum EStyle {
|
| + kFull = 0,
|
| + kAbbreviate = 1,
|
| + kTotal = kAbbreviate + 1
|
| + };
|
| +
|
| + /**
|
| + * Create TimeUnitFormat with default locale, and full name style.
|
| + * Use setLocale and/or setFormat to modify.
|
| + * @stable ICU 4.2
|
| + */
|
| + TimeUnitFormat(UErrorCode& status);
|
| +
|
| + /**
|
| + * Create TimeUnitFormat given locale, and full name style.
|
| + * @stable ICU 4.2
|
| + */
|
| + TimeUnitFormat(const Locale& locale, UErrorCode& status);
|
| +
|
| + /**
|
| + * Create TimeUnitFormat given locale and style.
|
| + * @draft ICU 4.2
|
| + */
|
| + TimeUnitFormat(const Locale& locale, EStyle style, UErrorCode& status);
|
| +
|
| + /**
|
| + * Copy constructor.
|
| + * @stable ICU 4.2
|
| + */
|
| + TimeUnitFormat(const TimeUnitFormat&);
|
| +
|
| + /**
|
| + * deconstructor
|
| + * @stable ICU 4.2
|
| + */
|
| + virtual ~TimeUnitFormat();
|
| +
|
| + /**
|
| + * Clone this Format object polymorphically. The caller owns the result and
|
| + * should delete it when done.
|
| + * @return A copy of the object.
|
| + * @stable ICU 4.2
|
| + */
|
| + virtual Format* clone(void) const;
|
| +
|
| + /**
|
| + * Assignment operator
|
| + * @stable ICU 4.2
|
| + */
|
| + TimeUnitFormat& operator=(const TimeUnitFormat& other);
|
| +
|
| +
|
| + /**
|
| + * Return true if the given Format objects are semantically equal. Objects
|
| + * of different subclasses are considered unequal.
|
| + * @param other the object to be compared with.
|
| + * @return true if the given Format objects are semantically equal.
|
| + * @stable ICU 4.2
|
| + */
|
| + virtual UBool operator==(const Format& other) const;
|
| +
|
| + /**
|
| + * Return true if the given Format objects are not semantically equal.
|
| + * Objects of different subclasses are considered unequal.
|
| + * @param other the object to be compared with.
|
| + * @return true if the given Format objects are not semantically equal.
|
| + * @stable ICU 4.2
|
| + */
|
| + UBool operator!=(const Format& other) const;
|
| +
|
| + /**
|
| + * Set the locale used for formatting or parsing.
|
| + * @param locale the locale to be set
|
| + * @param status output param set to success/failure code on exit
|
| + * @stable ICU 4.2
|
| + */
|
| + void setLocale(const Locale& locale, UErrorCode& status);
|
| +
|
| +
|
| + /**
|
| + * Set the number format used for formatting or parsing.
|
| + * @param format the number formatter to be set
|
| + * @param status output param set to success/failure code on exit
|
| + * @stable ICU 4.2
|
| + */
|
| + void setNumberFormat(const NumberFormat& format, UErrorCode& status);
|
| +
|
| +
|
| + using MeasureFormat::format;
|
| +
|
| + /**
|
| + * Format a TimeUnitAmount.
|
| + * If the formattable object is not a time unit amount object,
|
| + * or the number in time unit amount is not a double type or long type
|
| + * numeric, it returns a failing status: U_ILLEGAL_ARGUMENT_ERROR.
|
| + * @see Format#format(const Formattable&, UnicodeString&, FieldPosition&, UErrorCode&) const
|
| + * @stable ICU 4.2
|
| + */
|
| + virtual UnicodeString& format(const Formattable& obj,
|
| + UnicodeString& toAppendTo,
|
| + FieldPosition& pos,
|
| + UErrorCode& status) const;
|
| +
|
| + /**
|
| + * Parse a TimeUnitAmount.
|
| + * @see Format#parseObject(const UnicodeString&, Formattable&, ParsePosition&) const;
|
| + * @stable ICU 4.2
|
| + */
|
| + virtual void parseObject(const UnicodeString& source,
|
| + Formattable& result,
|
| + ParsePosition& pos) const;
|
| +
|
| + /**
|
| + * Return the class ID for this class. This is useful only for comparing to
|
| + * a return value from getDynamicClassID(). For example:
|
| + * <pre>
|
| + * . Base* polymorphic_pointer = createPolymorphicObject();
|
| + * . if (polymorphic_pointer->getDynamicClassID() ==
|
| + * . erived::getStaticClassID()) ...
|
| + * </pre>
|
| + * @return The class ID for all objects of this class.
|
| + * @stable ICU 4.2
|
| + */
|
| + static UClassID U_EXPORT2 getStaticClassID(void);
|
| +
|
| + /**
|
| + * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
|
| + * method is to implement a simple version of RTTI, since not all C++
|
| + * compilers support genuine RTTI. Polymorphic operator==() and clone()
|
| + * methods call this method.
|
| + *
|
| + * @return The class ID for this object. All objects of a
|
| + * given class have the same class ID. Objects of
|
| + * other classes have different class IDs.
|
| + * @stable ICU 4.2
|
| + */
|
| + virtual UClassID getDynamicClassID(void) const;
|
| +
|
| +private:
|
| + NumberFormat* fNumberFormat;
|
| + Locale fLocale;
|
| + Hashtable* fTimeUnitToCountToPatterns[TimeUnit::UTIMEUNIT_FIELD_COUNT];
|
| + PluralRules* fPluralRules;
|
| + EStyle fStyle;
|
| +
|
| + void create(const Locale& locale, EStyle style, UErrorCode& status);
|
| +
|
| + // it might actually be simpler to make them Decimal Formats later.
|
| + // initialize all private data members
|
| + void setup(UErrorCode& status);
|
| +
|
| + // initialize data member without fill in data for fTimeUnitToCountToPattern
|
| + void initDataMembers(UErrorCode& status);
|
| +
|
| + // initialize fTimeUnitToCountToPatterns from current locale's resource.
|
| + void readFromCurrentLocale(EStyle style, const char* key, UErrorCode& status);
|
| +
|
| + // check completeness of fTimeUnitToCountToPatterns against all time units,
|
| + // and all plural rules, fill in fallback as necessary.
|
| + void checkConsistency(EStyle style, const char* key, UErrorCode& status);
|
| +
|
| + // fill in fTimeUnitToCountToPatterns from locale fall-back chain
|
| + void searchInLocaleChain(EStyle style, const char* key, const char* localeName,
|
| + TimeUnit::UTimeUnitFields field, const char*,
|
| + const char*, Hashtable*, UErrorCode&);
|
| +
|
| + // initialize hash table
|
| + Hashtable* initHash(UErrorCode& status);
|
| +
|
| + // delete hash table
|
| + void deleteHash(Hashtable* htable);
|
| +
|
| + // copy hash table
|
| + void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
|
| + // get time unit name, such as "year", from time unit field enum, such as
|
| + // UTIMEUNIT_YEAR.
|
| + static const char* getTimeUnitName(TimeUnit::UTimeUnitFields field, UErrorCode& status);
|
| +};
|
| +
|
| +
|
| +
|
| +inline UBool
|
| +TimeUnitFormat::operator!=(const Format& other) const {
|
| + return !operator==(other);
|
| +}
|
| +
|
| +
|
| +
|
| +U_NAMESPACE_END
|
| +
|
| +#endif /* #if !UCONFIG_NO_FORMATTING */
|
| +
|
| +#endif // __TMUTFMT_H__
|
| +//eof
|
|
|
| Property changes on: icu46/source/i18n/unicode/tmutfmt.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|