|
ICU 73.2
73.2
|
00001 // © 2016 and later: Unicode, Inc. and others. 00002 // License & terms of use: http://www.unicode.org/copyright.html 00003 /* 00004 ******************************************************************************* 00005 * Copyright (C) 2007-2013, International Business Machines Corporation and * 00006 * others. All Rights Reserved. * 00007 ******************************************************************************* 00008 */ 00009 #ifndef RBTZ_H 00010 #define RBTZ_H 00011 00012 #include "unicode/utypes.h" 00013 00014 #if U_SHOW_CPLUSPLUS_API 00015 00021 #if !UCONFIG_NO_FORMATTING 00022 00023 #include "unicode/basictz.h" 00024 #include "unicode/unistr.h" 00025 00026 U_NAMESPACE_BEGIN 00027 00028 // forward declaration 00029 class UVector; 00030 struct Transition; 00031 00038 class U_I18N_API RuleBasedTimeZone : public BasicTimeZone { 00039 public: 00049 RuleBasedTimeZone(const UnicodeString& id, InitialTimeZoneRule* initialRule); 00050 00056 RuleBasedTimeZone(const RuleBasedTimeZone& source); 00057 00062 virtual ~RuleBasedTimeZone(); 00063 00069 RuleBasedTimeZone& operator=(const RuleBasedTimeZone& right); 00070 00079 virtual bool operator==(const TimeZone& that) const override; 00080 00089 virtual bool operator!=(const TimeZone& that) const; 00090 00107 void addTransitionRule(TimeZoneRule* rule, UErrorCode& status); 00108 00118 void complete(UErrorCode& status); 00119 00127 virtual RuleBasedTimeZone* clone() const override; 00128 00153 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, 00154 uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const override; 00155 00175 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, 00176 uint8_t dayOfWeek, int32_t millis, 00177 int32_t monthLength, UErrorCode& status) const override; 00178 00201 virtual void getOffset(UDate date, UBool local, int32_t& rawOffset, 00202 int32_t& dstOffset, UErrorCode& ec) const override; 00203 00211 virtual void setRawOffset(int32_t offsetMillis) override; 00212 00220 virtual int32_t getRawOffset(void) const override; 00221 00228 virtual UBool useDaylightTime(void) const override; 00229 00230 #ifndef U_FORCE_HIDE_DEPRECATED_API 00231 00244 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const override; 00245 #endif // U_FORCE_HIDE_DEPRECATED_API 00246 00255 virtual UBool hasSameRules(const TimeZone& other) const override; 00256 00265 virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override; 00266 00275 virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override; 00276 00285 virtual int32_t countTransitionRules(UErrorCode& status) const override; 00286 00303 virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial, 00304 const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const override; 00305 00310 virtual void getOffsetFromLocal( 00311 UDate date, UTimeZoneLocalOption nonExistingTimeOpt, 00312 UTimeZoneLocalOption duplicatedTimeOpt, 00313 int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const override; 00314 00315 private: 00316 void deleteRules(void); 00317 void deleteTransitions(void); 00318 UVector* copyRules(UVector* source); 00319 TimeZoneRule* findRuleInFinal(UDate date, UBool local, 00320 int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const; 00321 UBool findNext(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const; 00322 UBool findPrev(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const; 00323 int32_t getLocalDelta(int32_t rawBefore, int32_t dstBefore, int32_t rawAfter, int32_t dstAfter, 00324 int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const; 00325 UDate getTransitionTime(Transition* transition, UBool local, 00326 int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const; 00327 void getOffsetInternal(UDate date, UBool local, int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt, 00328 int32_t& rawOffset, int32_t& dstOffset, UErrorCode& ec) const; 00329 void completeConst(UErrorCode &status) const; 00330 00331 InitialTimeZoneRule *fInitialRule; 00332 UVector *fHistoricRules; 00333 UVector *fFinalRules; 00334 UVector *fHistoricTransitions; 00335 UBool fUpToDate; 00336 00337 public: 00349 static UClassID U_EXPORT2 getStaticClassID(void); 00350 00362 virtual UClassID getDynamicClassID(void) const override; 00363 }; 00364 00365 U_NAMESPACE_END 00366 00367 #endif /* #if !UCONFIG_NO_FORMATTING */ 00368 00369 #endif /* U_SHOW_CPLUSPLUS_API */ 00370 00371 #endif // RBTZ_H 00372 00373 //eof
1.7.6.1