tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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