00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __DTITVINF_H__
00013 #define __DTITVINF_H__
00014
00015 #include "unicode/utypes.h"
00016
00022 #if !UCONFIG_NO_FORMATTING
00023
00024 #include "unicode/udat.h"
00025 #include "unicode/locid.h"
00026 #include "unicode/ucal.h"
00027 #include "unicode/dtptngen.h"
00028
00029 U_NAMESPACE_BEGIN
00030
00151 class U_I18N_API DateIntervalInfo U_FINAL : public UObject {
00152 public:
00153 #ifndef U_HIDE_INTERNAL_API
00154
00167 DateIntervalInfo(UErrorCode& status);
00168 #endif
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
00342 friend struct DateIntervalSink;
00343
00349 enum IntervalPatternIndex
00350 {
00351 kIPI_ERA,
00352 kIPI_YEAR,
00353 kIPI_MONTH,
00354 kIPI_DATE,
00355 kIPI_AM_PM,
00356 kIPI_HOUR,
00357 kIPI_MINUTE,
00358 kIPI_SECOND,
00359 kIPI_MAX_INDEX
00360 };
00361 public:
00362 #ifndef U_HIDE_INTERNAL_API
00363
00367 enum {
00368 kMaxIntervalPatternIndex = kIPI_MAX_INDEX
00369 };
00370 #endif
00371 private:
00372
00373
00379 void initializeData(const Locale& locale, UErrorCode& status);
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392 void setIntervalPatternInternally(const UnicodeString& skeleton,
00393 UCalendarDateFields lrgDiffCalUnit,
00394 const UnicodeString& intervalPattern,
00395 UErrorCode& status);
00396
00397
00416 const UnicodeString* getBestSkeleton(const UnicodeString& skeleton,
00417 int8_t& bestMatchDistanceInfo) const;
00418
00419
00427 static void U_EXPORT2 parseSkeleton(const UnicodeString& skeleton,
00428 int32_t* skeletonFieldWidth);
00429
00430
00442 static UBool U_EXPORT2 stringNumeric(int32_t fieldWidth,
00443 int32_t anotherFieldWidth,
00444 char patternLetter);
00445
00446
00460 static IntervalPatternIndex U_EXPORT2 calendarFieldToIntervalIndex(
00461 UCalendarDateFields field,
00462 UErrorCode& status);
00463
00464
00470 void deleteHash(Hashtable* hTable);
00471
00472
00479 Hashtable* initHash(UErrorCode& status);
00480
00481
00482
00490 void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
00491
00492
00493
00494
00495 UnicodeString fFallbackIntervalPattern;
00496
00497 UBool fFirstDateInPtnIsLaterDate;
00498
00499
00500
00501 Hashtable* fIntervalPatterns;
00502
00503 };
00504
00505
00506 inline UBool
00507 DateIntervalInfo::operator!=(const DateIntervalInfo& other) const {
00508 return !operator==(other);
00509 }
00510
00511
00512 U_NAMESPACE_END
00513
00514 #endif
00515
00516 #endif
00517