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
00153 class U_I18N_API DateIntervalInfo U_FINAL : public UObject {
00154 public:
00168 DateIntervalInfo(UErrorCode& status);
00169
00170
00178 DateIntervalInfo(const Locale& locale, UErrorCode& status);
00179
00180
00185 DateIntervalInfo(const DateIntervalInfo&);
00186
00191 DateIntervalInfo& operator=(const DateIntervalInfo&);
00192
00199 virtual DateIntervalInfo* clone(void) const;
00200
00206 virtual ~DateIntervalInfo();
00207
00208
00216 virtual UBool operator==(const DateIntervalInfo& other) const;
00217
00225 UBool operator!=(const DateIntervalInfo& other) const;
00226
00227
00228
00261 void setIntervalPattern(const UnicodeString& skeleton,
00262 UCalendarDateFields lrgDiffCalUnit,
00263 const UnicodeString& intervalPattern,
00264 UErrorCode& status);
00265
00276 UnicodeString& getIntervalPattern(const UnicodeString& skeleton,
00277 UCalendarDateFields field,
00278 UnicodeString& result,
00279 UErrorCode& status) const;
00280
00287 UnicodeString& getFallbackIntervalPattern(UnicodeString& result) const;
00288
00289
00303 void setFallbackIntervalPattern(const UnicodeString& fallbackPattern,
00304 UErrorCode& status);
00305
00306
00313 UBool getDefaultOrder() const;
00314
00315
00321 virtual UClassID getDynamicClassID() const;
00322
00328 static UClassID U_EXPORT2 getStaticClassID();
00329
00330
00331 private:
00340 friend class DateIntervalFormat;
00341
00345 struct DateIntervalSink;
00346
00352 enum IntervalPatternIndex
00353 {
00354 kIPI_ERA,
00355 kIPI_YEAR,
00356 kIPI_MONTH,
00357 kIPI_DATE,
00358 kIPI_AM_PM,
00359 kIPI_HOUR,
00360 kIPI_MINUTE,
00361 kIPI_SECOND,
00362 kIPI_MAX_INDEX
00363 };
00364 public:
00365 #ifndef U_HIDE_INTERNAL_API
00366
00370 enum {
00371 kMaxIntervalPatternIndex = kIPI_MAX_INDEX
00372 };
00373 #endif
00374 private:
00375
00376
00382 void initializeData(const Locale& locale, UErrorCode& status);
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395 void setIntervalPatternInternally(const UnicodeString& skeleton,
00396 UCalendarDateFields lrgDiffCalUnit,
00397 const UnicodeString& intervalPattern,
00398 UErrorCode& status);
00399
00400
00419 const UnicodeString* getBestSkeleton(const UnicodeString& skeleton,
00420 int8_t& bestMatchDistanceInfo) const;
00421
00422
00430 static void U_EXPORT2 parseSkeleton(const UnicodeString& skeleton,
00431 int32_t* skeletonFieldWidth);
00432
00433
00445 static UBool U_EXPORT2 stringNumeric(int32_t fieldWidth,
00446 int32_t anotherFieldWidth,
00447 char patternLetter);
00448
00449
00463 static IntervalPatternIndex U_EXPORT2 calendarFieldToIntervalIndex(
00464 UCalendarDateFields field,
00465 UErrorCode& status);
00466
00467
00473 void deleteHash(Hashtable* hTable);
00474
00475
00482 Hashtable* initHash(UErrorCode& status);
00483
00484
00485
00493 void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
00494
00495
00496
00497
00498 UnicodeString fFallbackIntervalPattern;
00499
00500 UBool fFirstDateInPtnIsLaterDate;
00501
00502
00503
00504 Hashtable* fIntervalPatterns;
00505
00506 };
00507
00508
00509 inline UBool
00510 DateIntervalInfo::operator!=(const DateIntervalInfo& other) const {
00511 return !operator==(other);
00512 }
00513
00514
00515 U_NAMESPACE_END
00516
00517 #endif
00518
00519 #endif
00520