ethpccal.h (10125B)
1 // © 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 /* 4 ******************************************************************************* 5 * Copyright (C) 2003 - 2013, International Business Machines Corporation and * 6 * others. All Rights Reserved. * 7 ******************************************************************************* 8 */ 9 10 #ifndef ETHPCCAL_H 11 #define ETHPCCAL_H 12 13 #include "unicode/utypes.h" 14 15 #if !UCONFIG_NO_FORMATTING 16 17 #include "unicode/calendar.h" 18 #include "cecal.h" 19 20 U_NAMESPACE_BEGIN 21 22 /** 23 * Implement the Ethiopic calendar system. 24 * @internal 25 */ 26 class EthiopicCalendar : public CECalendar { 27 28 public: 29 /** 30 * Useful constants for EthiopicCalendar. 31 * @internal 32 */ 33 enum EMonths { 34 /** 35 * Constant for መስከረም, the 1st month of the Ethiopic year. 36 */ 37 MESKEREM, 38 39 /** 40 * Constant for ጥቅምት, the 2nd month of the Ethiopic year. 41 */ 42 TEKEMT, 43 44 /** 45 * Constant for ኅዳር, the 3rd month of the Ethiopic year. 46 */ 47 HEDAR, 48 49 /** 50 * Constant for ታኅሣሥ, the 4th month of the Ethiopic year. 51 */ 52 TAHSAS, 53 54 /** 55 * Constant for ጥር, the 5th month of the Ethiopic year. 56 */ 57 TER, 58 59 /** 60 * Constant for የካቲት, the 6th month of the Ethiopic year. 61 */ 62 YEKATIT, 63 64 /** 65 * Constant for መጋቢት, the 7th month of the Ethiopic year. 66 */ 67 MEGABIT, 68 69 /** 70 * Constant for ሚያዝያ, the 8th month of the Ethiopic year. 71 */ 72 MIAZIA, 73 74 /** 75 * Constant for ግንቦት, the 9th month of the Ethiopic year. 76 */ 77 GENBOT, 78 79 /** 80 * Constant for ሰኔ, the 10th month of the Ethiopic year. 81 */ 82 SENE, 83 84 /** 85 * Constant for ሐምሌ, the 11th month of the Ethiopic year. 86 */ 87 HAMLE, 88 89 /** 90 * Constant for ነሐሴ, the 12th month of the Ethiopic year. 91 */ 92 NEHASSE, 93 94 /** 95 * Constant for ጳጉሜን, the 13th month of the Ethiopic year. 96 */ 97 PAGUMEN 98 }; 99 100 enum EEras { 101 AMETE_ALEM, // Before the epoch 102 AMETE_MIHRET // After the epoch 103 }; 104 105 /** 106 * Constructs a EthiopicCalendar based on the current time in the default time zone 107 * with the given locale. 108 * 109 * @param aLocale The given locale. 110 * @param success Indicates the status of EthiopicCalendar object construction. 111 * Returns U_ZERO_ERROR if constructed successfully. 112 * @param type Whether this Ethiopic calendar use Amete Mihrret (default) or 113 * only use Amete Alem for all the time. 114 * @internal 115 */ 116 EthiopicCalendar(const Locale& aLocale, UErrorCode& success); 117 118 /** 119 * Copy Constructor 120 * @internal 121 */ 122 EthiopicCalendar(const EthiopicCalendar& other) = default; 123 124 /** 125 * Destructor. 126 * @internal 127 */ 128 virtual ~EthiopicCalendar(); 129 130 /** 131 * Create and return a polymorphic copy of this calendar. 132 * @return return a polymorphic copy of this calendar. 133 * @internal 134 */ 135 virtual EthiopicCalendar* clone() const override; 136 137 /** 138 * Return the calendar type, "ethiopic" 139 * @return calendar type 140 * @internal 141 */ 142 virtual const char * getType() const override; 143 144 protected: 145 //------------------------------------------------------------------------- 146 // Calendar framework 147 //------------------------------------------------------------------------- 148 149 /** 150 * @internal 151 */ 152 int32_t getRelatedYearDifference() const override; 153 154 /** 155 * Return the extended year defined by the current fields. 156 * This calendar uses both AMETE_ALEM and AMETE_MIHRET. 157 * 158 * EXTENDED_YEAR ERA YEAR 159 * 0 AMETE_ALEM 5500 160 * 1 AMETE_MIHRET 1 161 * @internal 162 */ 163 virtual int32_t handleGetExtendedYear(UErrorCode& status) override; 164 165 DECLARE_OVERRIDE_SYSTEM_DEFAULT_CENTURY 166 167 /** 168 * Return the date offset from Julian 169 * @internal 170 */ 171 int32_t getJDEpochOffset() const override; 172 173 /** 174 * Compute the era from extended year. 175 * @internal 176 */ 177 int32_t extendedYearToEra(int32_t extendedYear) const override; 178 179 /** 180 * Compute the year from extended year. 181 * @internal 182 */ 183 int32_t extendedYearToYear(int32_t extendedYear) const override; 184 185 public: 186 /** 187 * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual 188 * override. This method is to implement a simple version of RTTI, since not all C++ 189 * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call 190 * this method. 191 * 192 * @return The class ID for this object. All objects of a given class have the 193 * same class ID. Objects of other classes have different class IDs. 194 * @internal 195 */ 196 virtual UClassID getDynamicClassID() const override; 197 198 /** 199 * Return the class ID for this class. This is useful only for comparing to a return 200 * value from getDynamicClassID(). For example: 201 * 202 * Base* polymorphic_pointer = createPolymorphicObject(); 203 * if (polymorphic_pointer->getDynamicClassID() == 204 * Derived::getStaticClassID()) ... 205 * 206 * @return The class ID for all objects of this class. 207 * @internal 208 */ 209 U_I18N_API static UClassID U_EXPORT2 getStaticClassID(); 210 211 #if 0 212 // We do not want to introduce this API in ICU4C. 213 // It was accidentally introduced in ICU4J as a public API. 214 215 public: 216 //------------------------------------------------------------------------- 217 // Calendar system Conversion methods... 218 //------------------------------------------------------------------------- 219 220 /** 221 * Convert an Ethiopic year, month, and day to a Julian day. 222 * 223 * @param year the extended year 224 * @param month the month 225 * @param day the day 226 * @return Julian day 227 * @internal 228 */ 229 int32_t ethiopicToJD(int32_t year, int32_t month, int32_t day); 230 #endif 231 }; 232 233 /** 234 * Implement the Ethiopic Amete Alem calendar system. 235 * @internal 236 */ 237 class EthiopicAmeteAlemCalendar : public EthiopicCalendar { 238 239 public: 240 /** 241 * Constructs a EthiopicAmeteAlemCalendar based on the current time in the default time zone 242 * with the given locale. 243 * 244 * @param aLocale The given locale. 245 * @param success Indicates the status of EthiopicCalendar object construction. 246 * Returns U_ZERO_ERROR if constructed successfully. 247 * @internal 248 */ 249 EthiopicAmeteAlemCalendar(const Locale& aLocale, UErrorCode& success); 250 251 /** 252 * Copy Constructor 253 * @internal 254 */ 255 EthiopicAmeteAlemCalendar(const EthiopicAmeteAlemCalendar& other) = default; 256 257 /** 258 * Destructor. 259 * @internal 260 */ 261 virtual ~EthiopicAmeteAlemCalendar(); 262 263 /** 264 * Create and return a polymorphic copy of this calendar. 265 * @return return a polymorphic copy of this calendar. 266 * @internal 267 */ 268 virtual EthiopicAmeteAlemCalendar* clone() const override; 269 270 /** 271 * Return the calendar type, "ethiopic-amete-alem" 272 * @return calendar type 273 * @internal 274 */ 275 virtual const char * getType() const override; 276 277 /** 278 * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual 279 * override. This method is to implement a simple version of RTTI, since not all C++ 280 * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call 281 * this method. 282 * 283 * @return The class ID for this object. All objects of a given class have the 284 * same class ID. Objects of other classes have different class IDs. 285 * @internal 286 */ 287 virtual UClassID getDynamicClassID() const override; 288 289 /** 290 * Return the class ID for this class. This is useful only for comparing to a return 291 * value from getDynamicClassID(). For example: 292 * 293 * Base* polymorphic_pointer = createPolymorphicObject(); 294 * if (polymorphic_pointer->getDynamicClassID() == 295 * Derived::getStaticClassID()) ... 296 * 297 * @return The class ID for all objects of this class. 298 * @internal 299 */ 300 U_I18N_API static UClassID U_EXPORT2 getStaticClassID(); 301 302 protected: 303 //------------------------------------------------------------------------- 304 // Calendar framework 305 //------------------------------------------------------------------------- 306 307 /** 308 * Return the extended year defined by the current fields. 309 * This calendar use only AMETE_ALEM for the era. 310 * 311 * EXTENDED_YEAR ERA YEAR 312 * 0 AMETE_ALEM 5500 313 * 1 AMETE_ALEM 5501 314 * @internal 315 */ 316 virtual int32_t handleGetExtendedYear(UErrorCode& status) override; 317 318 /** 319 * Calculate the limit for a specified type of limit and field 320 * @internal 321 */ 322 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override; 323 324 /** 325 * Return the date offset from Julian 326 * @internal 327 */ 328 int32_t getJDEpochOffset() const override; 329 330 /** 331 * Compute the era from extended year. 332 * @internal 333 */ 334 int32_t extendedYearToEra(int32_t extendedYear) const override; 335 336 /** 337 * Compute the year from extended year. 338 * @internal 339 */ 340 int32_t extendedYearToYear(int32_t extendedYear) const override; 341 }; 342 343 U_NAMESPACE_END 344 #endif /* #if !UCONFIG_NO_FORMATTING */ 345 #endif /* ETHPCCAL_H */ 346 //eof