ICU 73.2  73.2
rbtz.h
Go to the documentation of this file.
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