intl/icu/source/i18n/unicode/tzrule.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /*
     2 *******************************************************************************
     3 * Copyright (C) 2007-2008, International Business Machines Corporation and    *
     4 * others. All Rights Reserved.                                                *
     5 *******************************************************************************
     6 */
     7 #ifndef TZRULE_H
     8 #define TZRULE_H
    10 /**
    11  * \file 
    12  * \brief C++ API: Time zone rule classes
    13  */
    15 #include "unicode/utypes.h"
    17 #if !UCONFIG_NO_FORMATTING
    19 #include "unicode/uobject.h"
    20 #include "unicode/unistr.h"
    21 #include "unicode/dtrule.h"
    23 U_NAMESPACE_BEGIN
    25 /**
    26  * <code>TimeZoneRule</code> is a class representing a rule for time zone.
    27  * <code>TimeZoneRule</code> has a set of time zone attributes, such as zone name,
    28  * raw offset (UTC offset for standard time) and daylight saving time offset.
    29  * 
    30  * @stable ICU 3.8
    31  */
    32 class U_I18N_API TimeZoneRule : public UObject {
    33 public:
    34     /**
    35      * Destructor.
    36      * @stable ICU 3.8
    37      */
    38     virtual ~TimeZoneRule();
    40     /**
    41      * Clone this TimeZoneRule object polymorphically. The caller owns the result and
    42      * should delete it when done.
    43      * @return  A copy of the object.
    44      * @stable ICU 3.8
    45      */
    46     virtual TimeZoneRule* clone(void) const = 0;
    48     /**
    49      * Return true if the given <code>TimeZoneRule</code> objects are semantically equal. Objects
    50      * of different subclasses are considered unequal.
    51      * @param that  The object to be compared with.
    52      * @return  true if the given <code>TimeZoneRule</code> objects are semantically equal.
    53      * @stable ICU 3.8
    54      */
    55     virtual UBool operator==(const TimeZoneRule& that) const;
    57     /**
    58      * Return true if the given <code>TimeZoneRule</code> objects are semantically unequal. Objects
    59      * of different subclasses are considered unequal.
    60      * @param that  The object to be compared with.
    61      * @return  true if the given <code>TimeZoneRule</code> objects are semantically unequal.
    62      * @stable ICU 3.8
    63      */
    64     virtual UBool operator!=(const TimeZoneRule& that) const;
    66     /**
    67      * Fills in "name" with the name of this time zone.
    68      * @param name  Receives the name of this time zone.
    69      * @return  A reference to "name"
    70      * @stable ICU 3.8
    71      */
    72     UnicodeString& getName(UnicodeString& name) const;
    74     /**
    75      * Gets the standard time offset.
    76      * @return  The standard time offset from UTC in milliseconds.
    77      * @stable ICU 3.8
    78      */
    79     int32_t getRawOffset(void) const;
    81     /**
    82      * Gets the amount of daylight saving delta time from the standard time.
    83      * @return  The amount of daylight saving offset used by this rule
    84      *          in milliseconds.
    85      * @stable ICU 3.8
    86      */
    87     int32_t getDSTSavings(void) const;
    89     /**
    90      * Returns if this rule represents the same rule and offsets as another.
    91      * When two <code>TimeZoneRule</code> objects differ only its names, this method
    92      * returns true.
    93      * @param other The <code>TimeZoneRule</code> object to be compared with.
    94      * @return  true if the other <code>TimeZoneRule</code> is the same as this one.
    95      * @stable ICU 3.8
    96      */
    97     virtual UBool isEquivalentTo(const TimeZoneRule& other) const;
    99     /**
   100      * Gets the very first time when this rule takes effect.
   101      * @param prevRawOffset     The standard time offset from UTC before this rule
   102      *                          takes effect in milliseconds.
   103      * @param prevDSTSavings    The amount of daylight saving offset from the
   104      *                          standard time.
   105      * @param result            Receives the very first time when this rule takes effect.
   106      * @return  true if the start time is available.  When false is returned, output parameter
   107      *          "result" is unchanged.
   108      * @stable ICU 3.8
   109      */
   110     virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const = 0;
   112     /**
   113      * Gets the final time when this rule takes effect.
   114      * @param prevRawOffset     The standard time offset from UTC before this rule
   115      *                          takes effect in milliseconds.
   116      * @param prevDSTSavings    The amount of daylight saving offset from the
   117      *                          standard time.
   118      * @param result            Receives the final time when this rule takes effect.
   119      * @return  true if the start time is available.  When false is returned, output parameter
   120      *          "result" is unchanged.
   121      * @stable ICU 3.8
   122      */
   123     virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const = 0;
   125     /**
   126      * Gets the first time when this rule takes effect after the specified time.
   127      * @param base              The first start time after this base time will be returned.
   128      * @param prevRawOffset     The standard time offset from UTC before this rule
   129      *                          takes effect in milliseconds.
   130      * @param prevDSTSavings    The amount of daylight saving offset from the
   131      *                          standard time.
   132      * @param inclusive         Whether the base time is inclusive or not.
   133      * @param result            Receives The first time when this rule takes effect after
   134      *                          the specified base time.
   135      * @return  true if the start time is available.  When false is returned, output parameter
   136      *          "result" is unchanged.
   137      * @stable ICU 3.8
   138      */
   139     virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
   140         UBool inclusive, UDate& result) const = 0;
   142     /**
   143      * Gets the most recent time when this rule takes effect before the specified time.
   144      * @param base              The most recent time before this base time will be returned.
   145      * @param prevRawOffset     The standard time offset from UTC before this rule
   146      *                          takes effect in milliseconds.
   147      * @param prevDSTSavings    The amount of daylight saving offset from the
   148      *                          standard time.
   149      * @param inclusive         Whether the base time is inclusive or not.
   150      * @param result            Receives The most recent time when this rule takes effect before
   151      *                          the specified base time.
   152      * @return  true if the start time is available.  When false is returned, output parameter
   153      *          "result" is unchanged.
   154      * @stable ICU 3.8
   155      */
   156     virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
   157         UBool inclusive, UDate& result) const = 0;
   159 protected:
   161     /**
   162      * Constructs a <code>TimeZoneRule</code> with the name, the GMT offset of its
   163      * standard time and the amount of daylight saving offset adjustment.
   164      * @param name          The time zone name.
   165      * @param rawOffset     The UTC offset of its standard time in milliseconds.
   166      * @param dstSavings    The amount of daylight saving offset adjustment in milliseconds.
   167      *                      If this ia a rule for standard time, the value of this argument is 0.
   168      * @stable ICU 3.8
   169      */
   170     TimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings);
   172     /**
   173      * Copy constructor.
   174      * @param source    The TimeZoneRule object to be copied.
   175      * @stable ICU 3.8
   176      */
   177     TimeZoneRule(const TimeZoneRule& source);
   179     /**
   180      * Assignment operator.
   181      * @param right The object to be copied.
   182      * @stable ICU 3.8
   183      */
   184     TimeZoneRule& operator=(const TimeZoneRule& right);
   186 private:
   187     UnicodeString fName; // time name
   188     int32_t fRawOffset;  // UTC offset of the standard time in milliseconds
   189     int32_t fDSTSavings; // DST saving amount in milliseconds
   190 };
   192 /**
   193  * <code>InitialTimeZoneRule</code> represents a time zone rule
   194  * representing a time zone effective from the beginning and
   195  * has no actual start times.
   196  * @stable ICU 3.8
   197  */
   198 class U_I18N_API InitialTimeZoneRule : public TimeZoneRule {
   199 public:
   200     /**
   201      * Constructs an <code>InitialTimeZoneRule</code> with the name, the GMT offset of its
   202      * standard time and the amount of daylight saving offset adjustment.
   203      * @param name          The time zone name.
   204      * @param rawOffset     The UTC offset of its standard time in milliseconds.
   205      * @param dstSavings    The amount of daylight saving offset adjustment in milliseconds.
   206      *                      If this ia a rule for standard time, the value of this argument is 0.
   207      * @stable ICU 3.8
   208      */
   209     InitialTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings);
   211     /**
   212      * Copy constructor.
   213      * @param source    The InitialTimeZoneRule object to be copied.
   214      * @stable ICU 3.8
   215      */
   216     InitialTimeZoneRule(const InitialTimeZoneRule& source);
   218     /**
   219      * Destructor.
   220      * @stable ICU 3.8
   221      */
   222     virtual ~InitialTimeZoneRule();
   224     /**
   225      * Clone this InitialTimeZoneRule object polymorphically. The caller owns the result and
   226      * should delete it when done.
   227      * @return    A copy of the object.
   228      * @stable ICU 3.8
   229      */
   230     virtual InitialTimeZoneRule* clone(void) const;
   232     /**
   233      * Assignment operator.
   234      * @param right The object to be copied.
   235      * @stable ICU 3.8
   236      */
   237     InitialTimeZoneRule& operator=(const InitialTimeZoneRule& right);
   239     /**
   240      * Return true if the given <code>TimeZoneRule</code> objects are semantically equal. Objects
   241      * of different subclasses are considered unequal.
   242      * @param that  The object to be compared with.
   243      * @return  true if the given <code>TimeZoneRule</code> objects are semantically equal.
   244      * @stable ICU 3.8
   245      */
   246     virtual UBool operator==(const TimeZoneRule& that) const;
   248     /**
   249      * Return true if the given <code>TimeZoneRule</code> objects are semantically unequal. Objects
   250      * of different subclasses are considered unequal.
   251      * @param that  The object to be compared with.
   252      * @return  true if the given <code>TimeZoneRule</code> objects are semantically unequal.
   253      * @stable ICU 3.8
   254      */
   255     virtual UBool operator!=(const TimeZoneRule& that) const;
   257     /**
   258      * Gets the time when this rule takes effect in the given year.
   259      * @param year              The Gregorian year, with 0 == 1 BCE, -1 == 2 BCE, etc.
   260      * @param prevRawOffset     The standard time offset from UTC before this rule
   261      *                          takes effect in milliseconds.
   262      * @param prevDSTSavings    The amount of daylight saving offset from the
   263      *                          standard time.
   264      * @param result            Receives the start time in the year.
   265      * @return  true if this rule takes effect in the year and the result is set to
   266      *          "result".
   267      * @stable ICU 3.8
   268      */
   269     UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
   271     /**
   272      * Returns if this rule represents the same rule and offsets as another.
   273      * When two <code>TimeZoneRule</code> objects differ only its names, this method
   274      * returns true.
   275      * @param that  The <code>TimeZoneRule</code> object to be compared with.
   276      * @return  true if the other <code>TimeZoneRule</code> is equivalent to this one.
   277      * @stable ICU 3.8
   278      */
   279     virtual UBool isEquivalentTo(const TimeZoneRule& that) const;
   281     /**
   282      * Gets the very first time when this rule takes effect.
   283      * @param prevRawOffset     The standard time offset from UTC before this rule
   284      *                          takes effect in milliseconds.
   285      * @param prevDSTSavings    The amount of daylight saving offset from the
   286      *                          standard time.
   287      * @param result            Receives the very first time when this rule takes effect.
   288      * @return  true if the start time is available.  When false is returned, output parameter
   289      *          "result" is unchanged.
   290      * @stable ICU 3.8
   291      */
   292     virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
   294     /**
   295      * Gets the final time when this rule takes effect.
   296      * @param prevRawOffset     The standard time offset from UTC before this rule
   297      *                          takes effect in milliseconds.
   298      * @param prevDSTSavings    The amount of daylight saving offset from the
   299      *                          standard time.
   300      * @param result            Receives the final time when this rule takes effect.
   301      * @return  true if the start time is available.  When false is returned, output parameter
   302      *          "result" is unchanged.
   303      * @stable ICU 3.8
   304      */
   305     virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
   307     /**
   308      * Gets the first time when this rule takes effect after the specified time.
   309      * @param base              The first start time after this base time will be returned.
   310      * @param prevRawOffset     The standard time offset from UTC before this rule
   311      *                          takes effect in milliseconds.
   312      * @param prevDSTSavings    The amount of daylight saving offset from the
   313      *                          standard time.
   314      * @param inclusive         Whether the base time is inclusive or not.
   315      * @param result            Receives The first time when this rule takes effect after
   316      *                          the specified base time.
   317      * @return  true if the start time is available.  When false is returned, output parameter
   318      *          "result" is unchanged.
   319      * @stable ICU 3.8
   320      */
   321     virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
   322         UBool inclusive, UDate& result) const;
   324     /**
   325      * Gets the most recent time when this rule takes effect before the specified time.
   326      * @param base              The most recent time before this base time will be returned.
   327      * @param prevRawOffset     The standard time offset from UTC before this rule
   328      *                          takes effect in milliseconds.
   329      * @param prevDSTSavings    The amount of daylight saving offset from the
   330      *                          standard time.
   331      * @param inclusive         Whether the base time is inclusive or not.
   332      * @param result            Receives The most recent time when this rule takes effect before
   333      *                          the specified base time.
   334      * @return  true if the start time is available.  When false is returned, output parameter
   335      *          "result" is unchanged.
   336      * @stable ICU 3.8
   337      */
   338     virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
   339         UBool inclusive, UDate& result) const;
   341 public:
   342     /**
   343      * Return the class ID for this class. This is useful only for comparing to
   344      * a return value from getDynamicClassID(). For example:
   345      * <pre>
   346      * .   Base* polymorphic_pointer = createPolymorphicObject();
   347      * .   if (polymorphic_pointer->getDynamicClassID() ==
   348      * .       erived::getStaticClassID()) ...
   349      * </pre>
   350      * @return          The class ID for all objects of this class.
   351      * @stable ICU 3.8
   352      */
   353     static UClassID U_EXPORT2 getStaticClassID(void);
   355     /**
   356      * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
   357      * method is to implement a simple version of RTTI, since not all C++
   358      * compilers support genuine RTTI. Polymorphic operator==() and clone()
   359      * methods call this method.
   360      *
   361      * @return          The class ID for this object. All objects of a
   362      *                  given class have the same class ID.  Objects of
   363      *                  other classes have different class IDs.
   364      * @stable ICU 3.8
   365      */
   366     virtual UClassID getDynamicClassID(void) const;
   367 };
   369 /**
   370  * <code>AnnualTimeZoneRule</code> is a class used for representing a time zone
   371  * rule which takes effect annually.  The calenday system used for the rule is
   372  * is based on Gregorian calendar
   373  * 
   374  * @stable ICU 3.8
   375  */
   376 class U_I18N_API AnnualTimeZoneRule : public TimeZoneRule {
   377 public:
   378     /**
   379      * The constant representing the maximum year used for designating
   380      * a rule is permanent.
   381      */
   382     static const int32_t MAX_YEAR;
   384     /**
   385      * Constructs a <code>AnnualTimeZoneRule</code> with the name, the GMT offset of its
   386      * standard time, the amount of daylight saving offset adjustment, the annual start
   387      * time rule and the start/until years.  The input DateTimeRule is copied by this
   388      * constructor, so the caller remains responsible for deleting the object.
   389      * @param name          The time zone name.
   390      * @param rawOffset     The GMT offset of its standard time in milliseconds.
   391      * @param dstSavings    The amount of daylight saving offset adjustment in
   392      *                      milliseconds.  If this ia a rule for standard time,
   393      *                      the value of this argument is 0.
   394      * @param dateTimeRule  The start date/time rule repeated annually.
   395      * @param startYear     The first year when this rule takes effect.
   396      * @param endYear       The last year when this rule takes effect.  If this
   397      *                      rule is effective forever in future, specify MAX_YEAR.
   398      * @stable ICU 3.8
   399      */
   400     AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings,
   401             const DateTimeRule& dateTimeRule, int32_t startYear, int32_t endYear);
   403     /**
   404      * Constructs a <code>AnnualTimeZoneRule</code> with the name, the GMT offset of its
   405      * standard time, the amount of daylight saving offset adjustment, the annual start
   406      * time rule and the start/until years.  The input DateTimeRule object is adopted
   407      * by this object, therefore, the caller must not delete the object.
   408      * @param name          The time zone name.
   409      * @param rawOffset     The GMT offset of its standard time in milliseconds.
   410      * @param dstSavings    The amount of daylight saving offset adjustment in
   411      *                      milliseconds.  If this ia a rule for standard time,
   412      *                      the value of this argument is 0.
   413      * @param dateTimeRule  The start date/time rule repeated annually.
   414      * @param startYear     The first year when this rule takes effect.
   415      * @param endYear       The last year when this rule takes effect.  If this
   416      *                      rule is effective forever in future, specify MAX_YEAR.
   417      * @stable ICU 3.8
   418      */
   419     AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings,
   420             DateTimeRule* dateTimeRule, int32_t startYear, int32_t endYear);
   422     /**
   423      * Copy constructor.
   424      * @param source    The AnnualTimeZoneRule object to be copied.
   425      * @stable ICU 3.8
   426      */
   427     AnnualTimeZoneRule(const AnnualTimeZoneRule& source);
   429     /**
   430      * Destructor.
   431      * @stable ICU 3.8
   432      */
   433     virtual ~AnnualTimeZoneRule();
   435     /**
   436      * Clone this AnnualTimeZoneRule object polymorphically. The caller owns the result and
   437      * should delete it when done.
   438      * @return    A copy of the object.
   439      * @stable ICU 3.8
   440      */
   441     virtual AnnualTimeZoneRule* clone(void) const;
   443     /**
   444      * Assignment operator.
   445      * @param right The object to be copied.
   446      * @stable ICU 3.8
   447      */
   448     AnnualTimeZoneRule& operator=(const AnnualTimeZoneRule& right);
   450     /**
   451      * Return true if the given <code>TimeZoneRule</code> objects are semantically equal. Objects
   452      * of different subclasses are considered unequal.
   453      * @param that  The object to be compared with.
   454      * @return  true if the given <code>TimeZoneRule</code> objects are semantically equal.
   455      * @stable ICU 3.8
   456      */
   457     virtual UBool operator==(const TimeZoneRule& that) const;
   459     /**
   460      * Return true if the given <code>TimeZoneRule</code> objects are semantically unequal. Objects
   461      * of different subclasses are considered unequal.
   462      * @param that  The object to be compared with.
   463      * @return  true if the given <code>TimeZoneRule</code> objects are semantically unequal.
   464      * @stable ICU 3.8
   465      */
   466     virtual UBool operator!=(const TimeZoneRule& that) const;
   468     /**
   469      * Gets the start date/time rule used by this rule.
   470      * @return  The <code>AnnualDateTimeRule</code> which represents the start date/time
   471      *          rule used by this time zone rule.
   472      * @stable ICU 3.8
   473      */
   474     const DateTimeRule* getRule(void) const;
   476     /**
   477      * Gets the first year when this rule takes effect.
   478      * @return  The start year of this rule.  The year is in Gregorian calendar
   479      *          with 0 == 1 BCE, -1 == 2 BCE, etc.
   480      * @stable ICU 3.8
   481      */
   482     int32_t getStartYear(void) const;
   484     /**
   485      * Gets the end year when this rule takes effect.
   486      * @return  The end year of this rule (inclusive). The year is in Gregorian calendar
   487      *          with 0 == 1 BCE, -1 == 2 BCE, etc.
   488      * @stable ICU 3.8
   489      */
   490     int32_t getEndYear(void) const;
   492     /**
   493      * Gets the time when this rule takes effect in the given year.
   494      * @param year              The Gregorian year, with 0 == 1 BCE, -1 == 2 BCE, etc.
   495      * @param prevRawOffset     The standard time offset from UTC before this rule
   496      *                          takes effect in milliseconds.
   497      * @param prevDSTSavings    The amount of daylight saving offset from the
   498      *                          standard time.
   499      * @param result            Receives the start time in the year.
   500      * @return  true if this rule takes effect in the year and the result is set to
   501      *          "result".
   502      * @stable ICU 3.8
   503      */
   504     UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
   506     /**
   507      * Returns if this rule represents the same rule and offsets as another.
   508      * When two <code>TimeZoneRule</code> objects differ only its names, this method
   509      * returns true.
   510      * @param that  The <code>TimeZoneRule</code> object to be compared with.
   511      * @return  true if the other <code>TimeZoneRule</code> is equivalent to this one.
   512      * @stable ICU 3.8
   513      */
   514     virtual UBool isEquivalentTo(const TimeZoneRule& that) const;
   516     /**
   517      * Gets the very first time when this rule takes effect.
   518      * @param prevRawOffset     The standard time offset from UTC before this rule
   519      *                          takes effect in milliseconds.
   520      * @param prevDSTSavings    The amount of daylight saving offset from the
   521      *                          standard time.
   522      * @param result            Receives the very first time when this rule takes effect.
   523      * @return  true if the start time is available.  When false is returned, output parameter
   524      *          "result" is unchanged.
   525      * @stable ICU 3.8
   526      */
   527     virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
   529     /**
   530      * Gets the final time when this rule takes effect.
   531      * @param prevRawOffset     The standard time offset from UTC before this rule
   532      *                          takes effect in milliseconds.
   533      * @param prevDSTSavings    The amount of daylight saving offset from the
   534      *                          standard time.
   535      * @param result            Receives the final time when this rule takes effect.
   536      * @return  true if the start time is available.  When false is returned, output parameter
   537      *          "result" is unchanged.
   538      * @stable ICU 3.8
   539      */
   540     virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
   542     /**
   543      * Gets the first time when this rule takes effect after the specified time.
   544      * @param base              The first start time after this base time will be returned.
   545      * @param prevRawOffset     The standard time offset from UTC before this rule
   546      *                          takes effect in milliseconds.
   547      * @param prevDSTSavings    The amount of daylight saving offset from the
   548      *                          standard time.
   549      * @param inclusive         Whether the base time is inclusive or not.
   550      * @param result            Receives The first time when this rule takes effect after
   551      *                          the specified base time.
   552      * @return  true if the start time is available.  When false is returned, output parameter
   553      *          "result" is unchanged.
   554      * @stable ICU 3.8
   555      */
   556     virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
   557         UBool inclusive, UDate& result) const;
   559     /**
   560      * Gets the most recent time when this rule takes effect before the specified time.
   561      * @param base              The most recent time before this base time will be returned.
   562      * @param prevRawOffset     The standard time offset from UTC before this rule
   563      *                          takes effect in milliseconds.
   564      * @param prevDSTSavings    The amount of daylight saving offset from the
   565      *                          standard time.
   566      * @param inclusive         Whether the base time is inclusive or not.
   567      * @param result            Receives The most recent time when this rule takes effect before
   568      *                          the specified base time.
   569      * @return  true if the start time is available.  When false is returned, output parameter
   570      *          "result" is unchanged.
   571      * @stable ICU 3.8
   572      */
   573     virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
   574         UBool inclusive, UDate& result) const;
   577 private:
   578     DateTimeRule* fDateTimeRule;
   579     int32_t fStartYear;
   580     int32_t fEndYear;
   582 public:
   583     /**
   584      * Return the class ID for this class. This is useful only for comparing to
   585      * a return value from getDynamicClassID(). For example:
   586      * <pre>
   587      * .   Base* polymorphic_pointer = createPolymorphicObject();
   588      * .   if (polymorphic_pointer->getDynamicClassID() ==
   589      * .       erived::getStaticClassID()) ...
   590      * </pre>
   591      * @return          The class ID for all objects of this class.
   592      * @stable ICU 3.8
   593      */
   594     static UClassID U_EXPORT2 getStaticClassID(void);
   596     /**
   597      * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
   598      * method is to implement a simple version of RTTI, since not all C++
   599      * compilers support genuine RTTI. Polymorphic operator==() and clone()
   600      * methods call this method.
   601      *
   602      * @return          The class ID for this object. All objects of a
   603      *                  given class have the same class ID.  Objects of
   604      *                  other classes have different class IDs.
   605      * @stable ICU 3.8
   606      */
   607     virtual UClassID getDynamicClassID(void) const;
   608 };
   610 /**
   611  * <code>TimeArrayTimeZoneRule</code> represents a time zone rule whose start times are
   612  * defined by an array of milliseconds since the standard base time.
   613  * 
   614  * @stable ICU 3.8
   615  */
   616 class U_I18N_API TimeArrayTimeZoneRule : public TimeZoneRule {
   617 public:
   618     /**
   619      * Constructs a <code>TimeArrayTimeZoneRule</code> with the name, the GMT offset of its
   620      * standard time, the amount of daylight saving offset adjustment and
   621      * the array of times when this rule takes effect.
   622      * @param name          The time zone name.
   623      * @param rawOffset     The UTC offset of its standard time in milliseconds.
   624      * @param dstSavings    The amount of daylight saving offset adjustment in
   625      *                      milliseconds.  If this ia a rule for standard time,
   626      *                      the value of this argument is 0.
   627      * @param startTimes    The array start times in milliseconds since the base time
   628      *                      (January 1, 1970, 00:00:00).
   629      * @param numStartTimes The number of elements in the parameter "startTimes"
   630      * @param timeRuleType  The time type of the start times, which is one of
   631      *                      <code>DataTimeRule::WALL_TIME</code>, <code>STANDARD_TIME</code>
   632      *                      and <code>UTC_TIME</code>.
   633      * @stable ICU 3.8
   634      */
   635     TimeArrayTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings,
   636         const UDate* startTimes, int32_t numStartTimes, DateTimeRule::TimeRuleType timeRuleType);
   638     /**
   639      * Copy constructor.
   640      * @param source    The TimeArrayTimeZoneRule object to be copied.
   641      * @stable ICU 3.8
   642      */
   643     TimeArrayTimeZoneRule(const TimeArrayTimeZoneRule& source);
   645     /**
   646      * Destructor.
   647      * @stable ICU 3.8
   648      */
   649     virtual ~TimeArrayTimeZoneRule();
   651     /**
   652      * Clone this TimeArrayTimeZoneRule object polymorphically. The caller owns the result and
   653      * should delete it when done.
   654      * @return    A copy of the object.
   655      * @stable ICU 3.8
   656      */
   657     virtual TimeArrayTimeZoneRule* clone(void) const;
   659     /**
   660      * Assignment operator.
   661      * @param right The object to be copied.
   662      * @stable ICU 3.8
   663      */
   664     TimeArrayTimeZoneRule& operator=(const TimeArrayTimeZoneRule& right);
   666     /**
   667      * Return true if the given <code>TimeZoneRule</code> objects are semantically equal. Objects
   668      * of different subclasses are considered unequal.
   669      * @param that  The object to be compared with.
   670      * @return  true if the given <code>TimeZoneRule</code> objects are semantically equal.
   671      * @stable ICU 3.8
   672      */
   673     virtual UBool operator==(const TimeZoneRule& that) const;
   675     /**
   676      * Return true if the given <code>TimeZoneRule</code> objects are semantically unequal. Objects
   677      * of different subclasses are considered unequal.
   678      * @param that  The object to be compared with.
   679      * @return  true if the given <code>TimeZoneRule</code> objects are semantically unequal.
   680      * @stable ICU 3.8
   681      */
   682     virtual UBool operator!=(const TimeZoneRule& that) const;
   684     /**
   685      * Gets the time type of the start times used by this rule.  The return value
   686      * is either <code>DateTimeRule::WALL_TIME</code> or <code>STANDARD_TIME</code>
   687      * or <code>UTC_TIME</code>.
   688      * 
   689      * @return The time type used of the start times used by this rule.
   690      * @stable ICU 3.8
   691      */
   692     DateTimeRule::TimeRuleType getTimeType(void) const;
   694     /**
   695      * Gets a start time at the index stored in this rule.
   696      * @param index     The index of start times
   697      * @param result    Receives the start time at the index
   698      * @return  true if the index is within the valid range and
   699      *          and the result is set.  When false, the output
   700      *          parameger "result" is unchanged.
   701      * @stable ICU 3.8
   702      */
   703     UBool getStartTimeAt(int32_t index, UDate& result) const;
   705     /**
   706      * Returns the number of start times stored in this rule
   707      * @return The number of start times.
   708      * @stable ICU 3.8
   709      */
   710     int32_t countStartTimes(void) const;
   712     /**
   713      * Returns if this rule represents the same rule and offsets as another.
   714      * When two <code>TimeZoneRule</code> objects differ only its names, this method
   715      * returns true.
   716      * @param that  The <code>TimeZoneRule</code> object to be compared with.
   717      * @return  true if the other <code>TimeZoneRule</code> is equivalent to this one.
   718      * @stable ICU 3.8
   719      */
   720     virtual UBool isEquivalentTo(const TimeZoneRule& that) const;
   722     /**
   723      * Gets the very first time when this rule takes effect.
   724      * @param prevRawOffset     The standard time offset from UTC before this rule
   725      *                          takes effect in milliseconds.
   726      * @param prevDSTSavings    The amount of daylight saving offset from the
   727      *                          standard time.
   728      * @param result            Receives the very first time when this rule takes effect.
   729      * @return  true if the start time is available.  When false is returned, output parameter
   730      *          "result" is unchanged.
   731      * @stable ICU 3.8
   732      */
   733     virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
   735     /**
   736      * Gets the final time when this rule takes effect.
   737      * @param prevRawOffset     The standard time offset from UTC before this rule
   738      *                          takes effect in milliseconds.
   739      * @param prevDSTSavings    The amount of daylight saving offset from the
   740      *                          standard time.
   741      * @param result            Receives the final time when this rule takes effect.
   742      * @return  true if the start time is available.  When false is returned, output parameter
   743      *          "result" is unchanged.
   744      * @stable ICU 3.8
   745      */
   746     virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
   748     /**
   749      * Gets the first time when this rule takes effect after the specified time.
   750      * @param base              The first start time after this base time will be returned.
   751      * @param prevRawOffset     The standard time offset from UTC before this rule
   752      *                          takes effect in milliseconds.
   753      * @param prevDSTSavings    The amount of daylight saving offset from the
   754      *                          standard time.
   755      * @param inclusive         Whether the base time is inclusive or not.
   756      * @param result            Receives The first time when this rule takes effect after
   757      *                          the specified base time.
   758      * @return  true if the start time is available.  When false is returned, output parameter
   759      *          "result" is unchanged.
   760      * @stable ICU 3.8
   761      */
   762     virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
   763         UBool inclusive, UDate& result) const;
   765     /**
   766      * Gets the most recent time when this rule takes effect before the specified time.
   767      * @param base              The most recent time before this base time will be returned.
   768      * @param prevRawOffset     The standard time offset from UTC before this rule
   769      *                          takes effect in milliseconds.
   770      * @param prevDSTSavings    The amount of daylight saving offset from the
   771      *                          standard time.
   772      * @param inclusive         Whether the base time is inclusive or not.
   773      * @param result            Receives The most recent time when this rule takes effect before
   774      *                          the specified base time.
   775      * @return  true if the start time is available.  When false is returned, output parameter
   776      *          "result" is unchanged.
   777      * @stable ICU 3.8
   778      */
   779     virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
   780         UBool inclusive, UDate& result) const;
   783 private:
   784     enum { TIMEARRAY_STACK_BUFFER_SIZE = 32 };
   785     UBool initStartTimes(const UDate source[], int32_t size, UErrorCode& ec);
   786     UDate getUTC(UDate time, int32_t raw, int32_t dst) const;
   788     DateTimeRule::TimeRuleType  fTimeRuleType;
   789     int32_t fNumStartTimes;
   790     UDate*  fStartTimes;
   791     UDate   fLocalStartTimes[TIMEARRAY_STACK_BUFFER_SIZE];
   793 public:
   794     /**
   795      * Return the class ID for this class. This is useful only for comparing to
   796      * a return value from getDynamicClassID(). For example:
   797      * <pre>
   798      * .   Base* polymorphic_pointer = createPolymorphicObject();
   799      * .   if (polymorphic_pointer->getDynamicClassID() ==
   800      * .       erived::getStaticClassID()) ...
   801      * </pre>
   802      * @return          The class ID for all objects of this class.
   803      * @stable ICU 3.8
   804      */
   805     static UClassID U_EXPORT2 getStaticClassID(void);
   807     /**
   808      * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
   809      * method is to implement a simple version of RTTI, since not all C++
   810      * compilers support genuine RTTI. Polymorphic operator==() and clone()
   811      * methods call this method.
   812      *
   813      * @return          The class ID for this object. All objects of a
   814      *                  given class have the same class ID.  Objects of
   815      *                  other classes have different class IDs.
   816      * @stable ICU 3.8
   817      */
   818     virtual UClassID getDynamicClassID(void) const;
   819 };
   822 U_NAMESPACE_END
   824 #endif /* #if !UCONFIG_NO_FORMATTING */
   826 #endif // TZRULE_H
   828 //eof

mercurial