Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / icu / source / i18n / coptccal.h
1 /*
2 *******************************************************************************
3 * Copyright (C) 2003 - 2013, International Business Machines Corporation and  *
4 * others. All Rights Reserved.                                                *
5 *******************************************************************************
6 */
7
8 #ifndef COPTCCAL_H
9 #define COPTCCAL_H
10
11 #include "unicode/utypes.h"
12
13 #if !UCONFIG_NO_FORMATTING
14
15 #include "unicode/calendar.h"
16 #include "cecal.h"
17
18 U_NAMESPACE_BEGIN
19
20 /**
21  * Implement the Coptic calendar system.
22  * @internal
23  */
24 class CopticCalendar : public CECalendar {
25   
26 public:
27     /**
28      * Useful constants for CopticCalendar.
29      * @internal
30      */
31     enum EMonths {
32         /** 
33          * Constant for ωογτ/تﻮﺗ,
34          * the 1st month of the Coptic year. 
35          */
36         TOUT,
37         
38         /** 
39          * Constant for Παοπι/ﻪﺑﺎﺑ,
40          * the 2nd month of the Coptic year. 
41          */
42         BABA,
43
44         /** 
45          * Constant for Αθορ/رﻮﺗﺎﻫ,
46          * the 3rd month of the Coptic year. 
47          */
48         HATOR,
49
50         /** 
51          * Constant for Χοιακ/ﻚﻬﻴﻛ,
52          * the 4th month of the Coptic year. 
53          */
54         KIAHK,
55
56         /** 
57          * Constant for Τωβι/طﻮﺒﻫ,
58          * the 5th month of the Coptic year. 
59          */
60         TOBA,
61
62         /** 
63          * Constant for Μεϣιρ/ﺮﻴﺸﻣأ,
64          * the 6th month of the Coptic year. 
65          */
66         AMSHIR,
67
68         /** 
69          * Constant for Παρεμϩατ/تﺎﻬﻣﺮﺑ,
70          * the 7th month of the Coptic year. 
71          */
72         BARAMHAT,
73
74         /** 
75          * Constant for Φαρμοθι/هدﻮﻣﺮﺑ, 
76          * the 8th month of the Coptic year. 
77          */
78         BARAMOUDA,
79
80         /** 
81          * Constant for Παϣαν/ﺲﻨﺸﺑ,
82          * the 9th month of the Coptic year. 
83          */
84         BASHANS,
85
86         /** 
87          * Constant for Παωνι/ﻪﻧؤﻮﺑ,
88          * the 10th month of the Coptic year. 
89          */
90         PAONA,
91
92         /** 
93          * Constant for Επηπ/ﺐﻴﺑأ,
94          * the 11th month of the Coptic year. 
95          */
96         EPEP,
97
98         /** 
99          * Constant for Μεϲωρη/ىﺮﺴﻣ,
100          * the 12th month of the Coptic year. 
101          */
102         MESRA,
103
104         /** 
105          * Constant for Πικογϫι
106          * μαβοτ/ﺮﻴﻐﺼﻟا
107          * ﺮﻬﺸﻟا,
108          * the 13th month of the Coptic year. 
109          */
110         NASIE
111     };
112
113     enum EEras {
114         BCE,    // Before the epoch
115         CE      // After the epoch
116     };
117
118     /**
119      * Constructs a CopticCalendar based on the current time in the default time zone
120      * with the given locale.
121      *
122      * @param aLocale  The given locale.
123      * @param success  Indicates the status of CopticCalendar object construction.
124      *                 Returns U_ZERO_ERROR if constructed successfully.
125      * @internal
126      */
127     CopticCalendar(const Locale& aLocale, UErrorCode& success);
128
129     /**
130      * Copy Constructor
131      * @internal
132      */
133     CopticCalendar (const CopticCalendar& other);
134
135     /**
136      * Destructor.
137      * @internal
138      */
139     virtual ~CopticCalendar();
140
141     /**
142      * Create and return a polymorphic copy of this calendar.
143      * @return    return a polymorphic copy of this calendar.
144      * @internal
145      */
146     virtual Calendar* clone(void) const;
147
148     /**
149      * return the calendar type, "coptic"
150      * @return calendar type
151      * @internal
152      */
153     const char * getType() const;
154
155 protected:
156     //-------------------------------------------------------------------------
157     // Calendar framework
158     //-------------------------------------------------------------------------
159
160     /**
161      * Return the extended year defined by the current fields.
162      * @internal
163      */
164     virtual int32_t handleGetExtendedYear();
165
166     /**
167      * Compute fields from the JD
168      * @internal
169      */
170     virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
171
172     /**
173      * Returns the date of the start of the default century
174      * @return start of century - in milliseconds since epoch, 1970
175      * @internal
176      */
177     virtual UDate defaultCenturyStart() const;
178
179     /**
180      * Returns the year in which the default century begins
181      * @internal
182      */
183     virtual int32_t defaultCenturyStartYear() const;
184
185     /**
186      * Return the date offset from Julian
187      * @internal
188      */
189     virtual int32_t getJDEpochOffset() const;
190
191
192 public:
193     /**
194      * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual
195      * override. This method is to implement a simple version of RTTI, since not all C++
196      * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call
197      * this method.
198      *
199      * @return   The class ID for this object. All objects of a given class have the
200      *           same class ID. Objects of other classes have different class IDs.
201      * @internal
202      */
203     virtual UClassID getDynamicClassID(void) const;
204
205     /**
206      * Return the class ID for this class. This is useful only for comparing to a return
207      * value from getDynamicClassID(). For example:
208      *
209      *      Base* polymorphic_pointer = createPolymorphicObject();
210      *      if (polymorphic_pointer->getDynamicClassID() ==
211      *          Derived::getStaticClassID()) ...
212      *
213      * @return   The class ID for all objects of this class.
214      * @internal
215      */
216     U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void);  
217
218 #if 0
219     // We do not want to introduce this API in ICU4C.
220     // It was accidentally introduced in ICU4J as a public API.
221 public:
222     //-------------------------------------------------------------------------
223     // Calendar system Conversion methods...
224     //-------------------------------------------------------------------------
225     /**
226      * Convert an Coptic year, month, and day to a Julian day.
227      *
228      * @param year the extended year
229      * @param month the month
230      * @param day the day
231      * @return Julian day
232      * @internal
233      */
234     static int32_t copticToJD(int32_t year, int32_t month, int32_t day);
235 #endif
236 };
237
238 U_NAMESPACE_END
239
240 #endif /* #if !UCONFIG_NO_FORMATTING */
241 #endif /* COPTCCAL_H */
242 //eof