123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362 |
- #ifndef RBTZ_H
- #define RBTZ_H
- #include "unicode/utypes.h"
- #if !UCONFIG_NO_FORMATTING
- #include "unicode/basictz.h"
- #include "unicode/unistr.h"
- U_NAMESPACE_BEGIN
- class UVector;
- struct Transition;
- /**
- * a BasicTimeZone subclass implemented in terms of InitialTimeZoneRule and TimeZoneRule instances
- * @see BasicTimeZone
- * @see InitialTimeZoneRule
- * @see TimeZoneRule
- */
- class U_I18N_API RuleBasedTimeZone : public BasicTimeZone {
- public:
-
- RuleBasedTimeZone(const UnicodeString& id, InitialTimeZoneRule* initialRule);
-
- RuleBasedTimeZone(const RuleBasedTimeZone& source);
-
- virtual ~RuleBasedTimeZone();
-
- RuleBasedTimeZone& operator=(const RuleBasedTimeZone& right);
-
- virtual UBool operator==(const TimeZone& that) const;
-
- virtual UBool operator!=(const TimeZone& that) const;
-
- void addTransitionRule(TimeZoneRule* rule, UErrorCode& status);
-
- void complete(UErrorCode& status);
-
- virtual TimeZone* clone(void) const;
-
- virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
- uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
-
- virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
- uint8_t dayOfWeek, int32_t millis,
- int32_t monthLength, UErrorCode& status) const;
-
- virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
- int32_t& dstOffset, UErrorCode& ec) const;
-
- virtual void setRawOffset(int32_t offsetMillis);
-
- virtual int32_t getRawOffset(void) const;
-
- virtual UBool useDaylightTime(void) const;
-
- virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
-
- virtual UBool hasSameRules(const TimeZone& other) const;
-
- virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
-
- virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
-
- virtual int32_t countTransitionRules(UErrorCode& status) const;
-
- virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
- const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
-
- virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
- int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const;
- private:
- void deleteRules(void);
- void deleteTransitions(void);
- UVector* copyRules(UVector* source);
- TimeZoneRule* findRuleInFinal(UDate date, UBool local,
- int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
- UBool findNext(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const;
- UBool findPrev(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const;
- int32_t getLocalDelta(int32_t rawBefore, int32_t dstBefore, int32_t rawAfter, int32_t dstAfter,
- int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
- UDate getTransitionTime(Transition* transition, UBool local,
- int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
- void getOffsetInternal(UDate date, UBool local, int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt,
- int32_t& rawOffset, int32_t& dstOffset, UErrorCode& ec) const;
- void completeConst(UErrorCode &status) const;
- InitialTimeZoneRule *fInitialRule;
- UVector *fHistoricRules;
- UVector *fFinalRules;
- UVector *fHistoricTransitions;
- UBool fUpToDate;
- public:
-
- static UClassID U_EXPORT2 getStaticClassID(void);
-
- virtual UClassID getDynamicClassID(void) const;
- };
- U_NAMESPACE_END
- #endif
- #endif
|