1/*
2 *******************************************************************************
3 * Copyright (C) 2009-2014, 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     * Returns a unique class ID for this object POLYMORPHICALLY.
81     * This method implements a simple form of RTTI used by ICU.
82     * @return The class ID for this object. All objects of a given
83     * class have the same class ID.  Objects of other classes have
84     * different class IDs.
85     * @stable ICU 4.2
86     */
87    virtual UClassID getDynamicClassID() const;
88
89    /**
90     * Returns the class ID for this class. This is used to compare to
91     * the return value of getDynamicClassID().
92     * @return The class ID for all objects of this class.
93     * @stable ICU 4.2
94     */
95    static UClassID U_EXPORT2 getStaticClassID();
96
97
98    /**
99     * Get time unit field.
100     * @return time unit field.
101     * @stable ICU 4.2
102     */
103    UTimeUnitFields getTimeUnitField() const;
104
105    /**
106     * Destructor.
107     * @stable ICU 4.2
108     */
109    virtual ~TimeUnit();
110
111private:
112    UTimeUnitFields fTimeUnitField;
113
114    /**
115     * Constructor
116     * @internal ICU 4.2
117     */
118    TimeUnit(UTimeUnitFields timeUnitField);
119
120};
121
122
123U_NAMESPACE_END
124
125#endif /* #if !UCONFIG_NO_FORMATTING */
126
127#endif // __TMUNIT_H__
128//eof
129//
130