rbtz.h

Go to the documentation of this file.
00001 /*
00002 *******************************************************************************
00003 * Copyright (C) 2007, International Business Machines Corporation and    *
00004 * others. All Rights Reserved.                                                *
00005 *******************************************************************************
00006 */
00007 #ifndef RBTZ_H
00008 #define RBTZ_H
00009 
00010 #include "unicode/utypes.h"
00011 
00017 #if !UCONFIG_NO_FORMATTING
00018 
00019 #include "unicode/basictz.h"
00020 #include "unicode/unistr.h"
00021 
00022 U_NAMESPACE_BEGIN
00023 
00024 // forward declaration
00025 class UVector;
00026 struct Transition;
00027 
00028 class U_I18N_API RuleBasedTimeZone : public BasicTimeZone {
00029 public:
00039     RuleBasedTimeZone(const UnicodeString& id, InitialTimeZoneRule* initialRule);
00040 
00046     RuleBasedTimeZone(const RuleBasedTimeZone& source);
00047 
00052     virtual ~RuleBasedTimeZone();
00053 
00059     RuleBasedTimeZone& operator=(const RuleBasedTimeZone& right);
00060 
00069     virtual UBool operator==(const TimeZone& that) const;
00070 
00079     virtual UBool operator!=(const TimeZone& that) const;
00080 
00096     void addTransitionRule(TimeZoneRule* rule, UErrorCode& status);
00097 
00107     void complete(UErrorCode& status);
00108 
00116     virtual TimeZone* clone(void) const;
00117 
00142     virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00143                               uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
00144 
00164     virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00165                            uint8_t dayOfWeek, int32_t millis,
00166                            int32_t monthLength, UErrorCode& status) const;
00167 
00190     virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
00191                            int32_t& dstOffset, UErrorCode& ec) const;
00192 
00200     virtual void setRawOffset(int32_t offsetMillis);
00201 
00209     virtual int32_t getRawOffset(void) const;
00210 
00217     virtual UBool useDaylightTime(void) const;
00218 
00232     virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
00233 
00242     virtual UBool hasSameRules(const TimeZone& other) const;
00243 
00252     virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
00253 
00262     virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
00263 
00272     virtual int32_t countTransitionRules(UErrorCode& status) /*const*/;
00273 
00290     virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
00291         const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/;
00292 
00297     virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
00298         int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) /*const*/;
00299 
00300 private:
00301     void deleteRules(void);
00302     void deleteTransitions(void);
00303     UVector* copyRules(UVector* source);
00304     TimeZoneRule* findRuleInFinal(UDate date, UBool local,
00305         int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
00306     UBool findNext(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const;
00307     UBool findPrev(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const;
00308     int32_t getLocalDelta(int32_t rawBefore, int32_t dstBefore, int32_t rawAfter, int32_t dstAfter,
00309         int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
00310     UDate getTransitionTime(Transition* transition, UBool local,
00311         int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
00312     void getOffsetInternal(UDate date, UBool local, int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt,
00313         int32_t& rawOffset, int32_t& dstOffset, UErrorCode& ec) const;
00314 
00315     InitialTimeZoneRule *fInitialRule;
00316     UVector             *fHistoricRules;
00317     UVector             *fFinalRules;
00318     UVector             *fHistoricTransitions;
00319     UBool               fUpToDate;
00320 
00321 public:
00333     static UClassID U_EXPORT2 getStaticClassID(void);
00334 
00346     virtual UClassID getDynamicClassID(void) const;
00347 };
00348 
00349 U_NAMESPACE_END
00350 
00351 #endif /* #if !UCONFIG_NO_FORMATTING */
00352 
00353 #endif // RBTZ_H
00354 
00355 //eof

Generated on Tue Mar 11 22:12:00 2008 for ICU 3.8.1 by  doxygen 1.5.1