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_MAX_INDEX
00364 };
00365 public:
00366 #ifndef U_HIDE_INTERNAL_API
00367
00371 enum {
00372 kMaxIntervalPatternIndex = kIPI_MAX_INDEX
00373 };
00374 #endif
00375 private:
00376
00377
00383 void initializeData(const Locale& locale, UErrorCode& status);
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396 void setIntervalPatternInternally(const UnicodeString& skeleton,
00397 UCalendarDateFields lrgDiffCalUnit,
00398 const UnicodeString& intervalPattern,
00399 UErrorCode& status);
00400
00401
00420 const UnicodeString* getBestSkeleton(const UnicodeString& skeleton,
00421 int8_t& bestMatchDistanceInfo) const;
00422
00423
00431 static void U_EXPORT2 parseSkeleton(const UnicodeString& skeleton,
00432 int32_t* skeletonFieldWidth);
00433
00434
00446 static UBool U_EXPORT2 stringNumeric(int32_t fieldWidth,
00447 int32_t anotherFieldWidth,
00448 char patternLetter);
00449
00450
00464 static IntervalPatternIndex U_EXPORT2 calendarFieldToIntervalIndex(
00465 UCalendarDateFields field,
00466 UErrorCode& status);
00467
00468
00474 void deleteHash(Hashtable* hTable);
00475
00476
00483 Hashtable* initHash(UErrorCode& status);
00484
00485
00486
00494 void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
00495
00496
00497
00498
00499 UnicodeString fFallbackIntervalPattern;
00500
00501 UBool fFirstDateInPtnIsLaterDate;
00502
00503
00504
00505 Hashtable* fIntervalPatterns;
00506
00507 };
00508
00509
00510 inline UBool
00511 DateIntervalInfo::operator!=(const DateIntervalInfo& other) const {
00512 return !operator==(other);
00513 }
00514
00515
00516 U_NAMESPACE_END
00517
00518 #endif
00519
00520 #endif
00521
00522 #endif
00523