DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (d38398e5144e)

VCS Links

TimeZoneTransition

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
* Copyright (C) 2007-2008, International Business Machines Corporation and         *
* others. All Rights Reserved.                                                *
*******************************************************************************
*/
#ifndef TZTRANS_H
#define TZTRANS_H

/**
 * \file 
 * \brief C++ API: Time zone transition
 */

#include "unicode/utypes.h"

#if !UCONFIG_NO_FORMATTING

#include "unicode/uobject.h"

U_NAMESPACE_BEGIN

// Forward declaration
class TimeZoneRule;

/**
 * <code>TimeZoneTransition</code> is a class representing a time zone transition.
 * An instance has a time of transition and rules for both before and after the transition.
 * @stable ICU 3.8
 */
class U_I18N_API TimeZoneTransition : public UObject {
public:
    /**
     * Constructs a <code>TimeZoneTransition</code> with the time and the rules before/after
     * the transition.
     * 
     * @param time  The time of transition in milliseconds since the base time.
     * @param from  The time zone rule used before the transition.
     * @param to    The time zone rule used after the transition.
     * @stable ICU 3.8
     */
    TimeZoneTransition(UDate time, const TimeZoneRule& from, const TimeZoneRule& to);

    /**
     * Constructs an empty <code>TimeZoneTransition</code>
     * @stable ICU 3.8
     */
    TimeZoneTransition();

    /**
     * Copy constructor.
     * @param source    The TimeZoneTransition object to be copied.
     * @stable ICU 3.8
     */
    TimeZoneTransition(const TimeZoneTransition& source);

    /**
     * Destructor.
     * @stable ICU 3.8
     */
    ~TimeZoneTransition();

    /**
     * Clone this TimeZoneTransition object polymorphically. The caller owns the result and
     * should delete it when done.
     * @return  A copy of the object.
     * @stable ICU 3.8
     */
    TimeZoneTransition* clone(void) const;

    /**
     * Assignment operator.
     * @param right The object to be copied.
     * @stable ICU 3.8
     */
    TimeZoneTransition& operator=(const TimeZoneTransition& right);

    /**
     * Return true if the given TimeZoneTransition objects are semantically equal. Objects
     * of different subclasses are considered unequal.
     * @param that  The object to be compared with.
     * @return  true if the given TimeZoneTransition objects are semantically equal.
     * @stable ICU 3.8
     */
    UBool operator==(const TimeZoneTransition& that) const;

    /**
     * Return true if the given TimeZoneTransition objects are semantically unequal. Objects
     * of different subclasses are considered unequal.
     * @param that  The object to be compared with.
     * @return  true if the given TimeZoneTransition objects are semantically unequal.
     * @stable ICU 3.8
     */
    UBool operator!=(const TimeZoneTransition& that) const;

    /**
     * Returns the time of transition in milliseconds.
     * @return The time of the transition in milliseconds since the 1970 Jan 1 epoch time.
     * @stable ICU 3.8
     */
    UDate getTime(void) const;

    /**
     * Sets the time of transition in milliseconds.
     * @param time The time of the transition in milliseconds since the 1970 Jan 1 epoch time.
     * @stable ICU 3.8
     */
    void setTime(UDate time);

    /**
     * Returns the rule used before the transition.
     * @return The time zone rule used after the transition.
     * @stable ICU 3.8
     */
    const TimeZoneRule* getFrom(void) const;

    /**
     * Sets the rule used before the transition.  The caller remains
     * responsible for deleting the <code>TimeZoneRule</code> object.
     * @param from The time zone rule used before the transition.
     * @stable ICU 3.8
     */
    void setFrom(const TimeZoneRule& from);

    /**
     * Adopts the rule used before the transition.  The caller must
     * not delete the <code>TimeZoneRule</code> object passed in.
     * @param from The time zone rule used before the transition.
     * @stable ICU 3.8
     */
    void adoptFrom(TimeZoneRule* from);

    /**
     * Sets the rule used after the transition.  The caller remains
     * responsible for deleting the <code>TimeZoneRule</code> object.
     * @param to The time zone rule used after the transition.
     * @stable ICU 3.8
     */
    void setTo(const TimeZoneRule& to);

    /**
     * Adopts the rule used after the transition.  The caller must
     * not delete the <code>TimeZoneRule</code> object passed in.
     * @param to The time zone rule used after the transition.
     * @stable ICU 3.8
     */
    void adoptTo(TimeZoneRule* to);

    /**
     * Returns the rule used after the transition.
     * @return The time zone rule used after the transition.
     * @stable ICU 3.8
     */
    const TimeZoneRule* getTo(void) const;

private:
    UDate   fTime;
    TimeZoneRule*   fFrom;
    TimeZoneRule*   fTo;

public:
    /**
     * Return the class ID for this class. This is useful only for comparing to
     * a return value from getDynamicClassID(). For example:
     * <pre>
     * .   Base* polymorphic_pointer = createPolymorphicObject();
     * .   if (polymorphic_pointer->getDynamicClassID() ==
     * .       erived::getStaticClassID()) ...
     * </pre>
     * @return          The class ID for all objects of this class.
     * @stable ICU 3.8
     */
    static UClassID U_EXPORT2 getStaticClassID(void);

    /**
     * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
     * method is to implement a simple version of RTTI, since not all C++
     * compilers support genuine RTTI. Polymorphic operator==() and clone()
     * methods call this method.
     *
     * @return          The class ID for this object. All objects of a
     *                  given class have the same class ID.  Objects of
     *                  other classes have different class IDs.
     * @stable ICU 3.8
     */
    virtual UClassID getDynamicClassID(void) const;
};

U_NAMESPACE_END

#endif /* #if !UCONFIG_NO_FORMATTING */

#endif // TZTRANS_H

//eof