00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __TMUTFMT_H__
00009 #define __TMUTFMT_H__
00010
00011 #include "unicode/utypes.h"
00012
00019 #if !UCONFIG_NO_FORMATTING
00020
00021 #include "unicode/unistr.h"
00022 #include "unicode/tmunit.h"
00023 #include "unicode/tmutamt.h"
00024 #include "unicode/measfmt.h"
00025 #include "unicode/numfmt.h"
00026 #include "unicode/plurrule.h"
00027
00032 union UHashTok;
00033
00034 U_NAMESPACE_BEGIN
00035
00036 U_CDECL_BEGIN
00037
00041 static UBool U_CALLCONV hashTableValueComparator(UHashTok val1, UHashTok val2) ;
00042
00043 U_CDECL_END
00044
00045
00046 class Hashtable;
00047
00048
00079 class U_I18N_API TimeUnitFormat: public MeasureFormat {
00080 public:
00081
00089 enum EStyle {
00090 kFull = 0,
00091 kAbbreviate = 1,
00092 kTotal = kAbbreviate + 1
00093 };
00094
00100 TimeUnitFormat(UErrorCode& status);
00101
00106 TimeUnitFormat(const Locale& locale, UErrorCode& status);
00107
00112 TimeUnitFormat(const Locale& locale, EStyle style, UErrorCode& status);
00113
00118 TimeUnitFormat(const TimeUnitFormat&);
00119
00124 virtual ~TimeUnitFormat();
00125
00132 virtual Format* clone(void) const;
00133
00138 TimeUnitFormat& operator=(const TimeUnitFormat& other);
00139
00140
00148 virtual UBool operator==(const Format& other) const;
00149
00157 UBool operator!=(const Format& other) const;
00158
00165 void setLocale(const Locale& locale, UErrorCode& status);
00166
00167
00174 void setNumberFormat(const NumberFormat& format, UErrorCode& status);
00175
00184 virtual UnicodeString& format(const Formattable& obj,
00185 UnicodeString& toAppendTo,
00186 FieldPosition& pos,
00187 UErrorCode& status) const;
00188
00194 virtual void parseObject(const UnicodeString& source,
00195 Formattable& result,
00196 ParsePosition& pos) const;
00197
00209 static UClassID U_EXPORT2 getStaticClassID(void);
00210
00222 virtual UClassID getDynamicClassID(void) const;
00223
00224 private:
00225 NumberFormat* fNumberFormat;
00226 Locale fLocale;
00227 Hashtable* fTimeUnitToCountToPatterns[TimeUnit::UTIMEUNIT_FIELD_COUNT];
00228 PluralRules* fPluralRules;
00229 EStyle fStyle;
00230
00231 friend UBool U_CALLCONV hashTableValueComparator(UHashTok val1, UHashTok val2);
00232
00233 void create(const Locale& locale, EStyle style, UErrorCode& status);
00234
00235
00236
00237 void setup(UErrorCode& status);
00238
00239
00240 void initDataMembers(UErrorCode& status);
00241
00242
00243 void readFromCurrentLocale(EStyle style, const char* key, UErrorCode& status);
00244
00245
00246
00247 void checkConsistency(EStyle style, const char* key, UErrorCode& status);
00248
00249
00250 void searchInLocaleChain(EStyle style, const char* key,
00251 TimeUnit::UTimeUnitFields field, const char*,
00252 const char*, Hashtable*, UErrorCode&);
00253
00254
00255 Hashtable* initHash(UErrorCode& status);
00256
00257
00258 void deleteHash(Hashtable* htable);
00259
00260
00261 void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
00262
00263
00264 static const char* getTimeUnitName(TimeUnit::UTimeUnitFields field, UErrorCode& status);
00265 };
00266
00267
00268
00269 inline UBool
00270 TimeUnitFormat::operator!=(const Format& other) const {
00271 return !operator==(other);
00272 }
00273
00274
00275
00276 U_NAMESPACE_END
00277
00278 #endif
00279
00280 #endif // __TMUTFMT_H__
00281