1/*
2 *******************************************************************************
3 * Copyright (C) 2009-2010, Google, International Business Machines Corporation and *
4 * others. All Rights Reserved.                                                *
5 *******************************************************************************
6 */
7
8#ifndef __TMUNIT_H__
9#define __TMUNIT_H__
10
11
12/**
13 * \file
14 * \brief C++ API: time unit object
15 */
16
17
18#include "unicode/measunit.h"
19
20#if !UCONFIG_NO_FORMATTING
21
22U_NAMESPACE_BEGIN
23
24/**
25 * Measurement unit for time units.
26 * @see TimeUnitAmount
27 * @see TimeUnit
28 * @stable ICU 4.2
29 */
30class U_I18N_API TimeUnit: public MeasureUnit {
31public:
32    /**
33     * Constants for all the time units we supported.
34     * @stable ICU 4.2
35     */
36    enum UTimeUnitFields {
37        UTIMEUNIT_YEAR,
38        UTIMEUNIT_MONTH,
39        UTIMEUNIT_DAY,
40        UTIMEUNIT_WEEK,
41        UTIMEUNIT_HOUR,
42        UTIMEUNIT_MINUTE,
43        UTIMEUNIT_SECOND,
44        UTIMEUNIT_FIELD_COUNT
45    };
46
47    /**
48     * Create Instance.
49     * @param timeUnitField  time unit field based on which the instance
50     *                       is created.
51     * @param status         input-output error code.
52     *                       If the timeUnitField is invalid,
53     *                       then this will be set to U_ILLEGAL_ARGUMENT_ERROR.
54     * @return               a TimeUnit instance
55     * @stable ICU 4.2
56     */
57    static TimeUnit* U_EXPORT2 createInstance(UTimeUnitFields timeUnitField,
58                                              UErrorCode& status);
59
60
61    /**
62     * Override clone.
63     * @stable ICU 4.2
64     */
65    virtual UObject* clone() const;
66
67    /**
68     * Copy operator.
69     * @stable ICU 4.2
70     */
71    TimeUnit(const TimeUnit& other);
72
73    /**
74     * Assignment operator.
75     * @stable ICU 4.2
76     */
77    TimeUnit& operator=(const TimeUnit& other);
78
79    /**
80     * Equality operator.
81     * @return true if 2 objects are the same.
82     * @stable ICU 4.2
83     */
84    virtual UBool operator==(const UObject& other) const;
85
86    /**
87     * Non-Equality operator.
88     * @return true if 2 objects are not the same.
89     * @stable ICU 4.2
90     */
91    UBool operator!=(const UObject& other) const;
92
93    /**
94     * Returns a unique class ID for this object POLYMORPHICALLY.
95     * This method implements a simple form of RTTI used by ICU.
96     * @return The class ID for this object. All objects of a given
97     * class have the same class ID.  Objects of other classes have
98     * different class IDs.
99     * @stable ICU 4.2
100     */
101    virtual UClassID getDynamicClassID() const;
102
103    /**
104     * Returns the class ID for this class. This is used to compare to
105     * the return value of getDynamicClassID().
106     * @return The class ID for all objects of this class.
107     * @stable ICU 4.2
108     */
109    static UClassID U_EXPORT2 getStaticClassID();
110
111
112    /**
113     * Get time unit field.
114     * @return time unit field.
115     * @stable ICU 4.2
116     */
117    UTimeUnitFields getTimeUnitField() const;
118
119    /**
120     * Destructor.
121     * @stable ICU 4.2
122     */
123    virtual ~TimeUnit();
124
125private:
126    UTimeUnitFields fTimeUnitField;
127
128    /**
129     * Constructor
130     * @internal ICU 4.2
131     */
132    TimeUnit(UTimeUnitFields timeUnitField);
133
134};
135
136
137inline UBool
138TimeUnit::operator!=(const UObject& other) const {
139    return !operator==(other);
140}
141
142
143U_NAMESPACE_END
144
145#endif /* #if !UCONFIG_NO_FORMATTING */
146
147#endif // __TMUNIT_H__
148//eof
149//
150