00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __DTITVINF_H__
00015 #define __DTITVINF_H__
00016
00017 #include "unicode/utypes.h"
00018
00024 #if !UCONFIG_NO_FORMATTING
00025
00026 #include "unicode/udat.h"
00027 #include "unicode/locid.h"
00028 #include "unicode/ucal.h"
00029 #include "unicode/dtptngen.h"
00030
00031 U_NAMESPACE_BEGIN
00032
00152 class U_I18N_API DateIntervalInfo U_FINAL : public UObject {
00153 public:
00167 DateIntervalInfo(UErrorCode& status);
00168
00169
00177 DateIntervalInfo(const Locale& locale, UErrorCode& status);
00178
00179
00184 DateIntervalInfo(const DateIntervalInfo&);
00185
00190 DateIntervalInfo& operator=(const DateIntervalInfo&);
00191
00198 virtual DateIntervalInfo* clone(void) const;
00199
00205 virtual ~DateIntervalInfo();
00206
00207
00215 virtual UBool operator==(const DateIntervalInfo& other) const;
00216
00224 UBool operator!=(const DateIntervalInfo& other) const;
00225
00226
00227
00260 void setIntervalPattern(const UnicodeString& skeleton,
00261 UCalendarDateFields lrgDiffCalUnit,
00262 const UnicodeString& intervalPattern,
00263 UErrorCode& status);
00264
00275 UnicodeString& getIntervalPattern(const UnicodeString& skeleton,
00276 UCalendarDateFields field,
00277 UnicodeString& result,
00278 UErrorCode& status) const;
00279
00286 UnicodeString& getFallbackIntervalPattern(UnicodeString& result) const;
00287
00288
00302 void setFallbackIntervalPattern(const UnicodeString& fallbackPattern,
00303 UErrorCode& status);
00304
00305
00312 UBool getDefaultOrder() const;
00313
00314
00320 virtual UClassID getDynamicClassID() const;
00321
00327 static UClassID U_EXPORT2 getStaticClassID();
00328
00329
00330 private:
00339 friend class DateIntervalFormat;
00340
00344 struct DateIntervalSink;
00345
00351 enum IntervalPatternIndex
00352 {
00353 kIPI_ERA,
00354 kIPI_YEAR,
00355 kIPI_MONTH,
00356 kIPI_DATE,
00357 kIPI_AM_PM,
00358 kIPI_HOUR,
00359 kIPI_MINUTE,
00360 kIPI_SECOND,
00361 kIPI_MAX_INDEX
00362 };
00363 public:
00364 #ifndef U_HIDE_INTERNAL_API
00365
00369 enum {
00370 kMaxIntervalPatternIndex = kIPI_MAX_INDEX
00371 };
00372 #endif
00373 private:
00374
00375
00381 void initializeData(const Locale& locale, UErrorCode& status);
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394 void setIntervalPatternInternally(const UnicodeString& skeleton,
00395 UCalendarDateFields lrgDiffCalUnit,
00396 const UnicodeString& intervalPattern,
00397 UErrorCode& status);
00398
00399
00418 const UnicodeString* getBestSkeleton(const UnicodeString& skeleton,
00419 int8_t& bestMatchDistanceInfo) const;
00420
00421
00429 static void U_EXPORT2 parseSkeleton(const UnicodeString& skeleton,
00430 int32_t* skeletonFieldWidth);
00431
00432
00444 static UBool U_EXPORT2 stringNumeric(int32_t fieldWidth,
00445 int32_t anotherFieldWidth,
00446 char patternLetter);
00447
00448
00462 static IntervalPatternIndex U_EXPORT2 calendarFieldToIntervalIndex(
00463 UCalendarDateFields field,
00464 UErrorCode& status);
00465
00466
00472 void deleteHash(Hashtable* hTable);
00473
00474
00481 Hashtable* initHash(UErrorCode& status);
00482
00483
00484
00492 void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
00493
00494
00495
00496
00497 UnicodeString fFallbackIntervalPattern;
00498
00499 UBool fFirstDateInPtnIsLaterDate;
00500
00501
00502
00503 Hashtable* fIntervalPatterns;
00504
00505 };
00506
00507
00508 inline UBool
00509 DateIntervalInfo::operator!=(const DateIntervalInfo& other) const {
00510 return !operator==(other);
00511 }
00512
00513
00514 U_NAMESPACE_END
00515
00516 #endif
00517
00518 #endif
00519