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
00019 #if U_SHOW_CPLUSPLUS_API
00020
00026 #if !UCONFIG_NO_FORMATTING
00027
00028 #include "unicode/udat.h"
00029 #include "unicode/locid.h"
00030 #include "unicode/ucal.h"
00031 #include "unicode/dtptngen.h"
00032
00033 U_NAMESPACE_BEGIN
00034
00154 class U_I18N_API DateIntervalInfo U_FINAL : public UObject {
00155 public:
00169 DateIntervalInfo(UErrorCode& status);
00170
00171
00179 DateIntervalInfo(const Locale& locale, UErrorCode& status);
00180
00181
00186 DateIntervalInfo(const DateIntervalInfo&);
00187
00192 DateIntervalInfo& operator=(const DateIntervalInfo&);
00193
00200 virtual DateIntervalInfo* clone() const;
00201
00207 virtual ~DateIntervalInfo();
00208
00209
00217 virtual UBool operator==(const DateIntervalInfo& other) const;
00218
00226 UBool operator!=(const DateIntervalInfo& other) const;
00227
00228
00229
00262 void setIntervalPattern(const UnicodeString& skeleton,
00263 UCalendarDateFields lrgDiffCalUnit,
00264 const UnicodeString& intervalPattern,
00265 UErrorCode& status);
00266
00277 UnicodeString& getIntervalPattern(const UnicodeString& skeleton,
00278 UCalendarDateFields field,
00279 UnicodeString& result,
00280 UErrorCode& status) const;
00281
00288 UnicodeString& getFallbackIntervalPattern(UnicodeString& result) const;
00289
00290
00304 void setFallbackIntervalPattern(const UnicodeString& fallbackPattern,
00305 UErrorCode& status);
00306
00307
00314 UBool getDefaultOrder() const;
00315
00316
00322 virtual UClassID getDynamicClassID() const;
00323
00329 static UClassID U_EXPORT2 getStaticClassID();
00330
00331
00332 private:
00341 friend class DateIntervalFormat;
00342
00346 struct DateIntervalSink;
00347
00353 enum IntervalPatternIndex
00354 {
00355 kIPI_ERA,
00356 kIPI_YEAR,
00357 kIPI_MONTH,
00358 kIPI_DATE,
00359 kIPI_AM_PM,
00360 kIPI_HOUR,
00361 kIPI_MINUTE,
00362 kIPI_SECOND,
00363 kIPI_MILLISECOND,
00364 kIPI_MAX_INDEX
00365 };
00366 public:
00367 #ifndef U_HIDE_INTERNAL_API
00368
00372 enum {
00373 kMaxIntervalPatternIndex = kIPI_MAX_INDEX
00374 };
00375 #endif
00376 private:
00377
00378
00384 void initializeData(const Locale& locale, UErrorCode& status);
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397 void setIntervalPatternInternally(const UnicodeString& skeleton,
00398 UCalendarDateFields lrgDiffCalUnit,
00399 const UnicodeString& intervalPattern,
00400 UErrorCode& status);
00401
00402
00421 const UnicodeString* getBestSkeleton(const UnicodeString& skeleton,
00422 int8_t& bestMatchDistanceInfo) const;
00423
00424
00432 static void U_EXPORT2 parseSkeleton(const UnicodeString& skeleton,
00433 int32_t* skeletonFieldWidth);
00434
00435
00447 static UBool U_EXPORT2 stringNumeric(int32_t fieldWidth,
00448 int32_t anotherFieldWidth,
00449 char patternLetter);
00450
00451
00465 static IntervalPatternIndex U_EXPORT2 calendarFieldToIntervalIndex(
00466 UCalendarDateFields field,
00467 UErrorCode& status);
00468
00469
00475 void deleteHash(Hashtable* hTable);
00476
00477
00484 Hashtable* initHash(UErrorCode& status);
00485
00486
00487
00495 void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
00496
00497
00498
00499
00500 UnicodeString fFallbackIntervalPattern;
00501
00502 UBool fFirstDateInPtnIsLaterDate;
00503
00504
00505
00506 Hashtable* fIntervalPatterns;
00507
00508 };
00509
00510
00511 inline UBool
00512 DateIntervalInfo::operator!=(const DateIntervalInfo& other) const {
00513 return !operator==(other);
00514 }
00515
00516
00517 U_NAMESPACE_END
00518
00519 #endif
00520
00521 #endif
00522
00523 #endif
00524