1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others. 2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html 3*0e209d39SAndroid Build Coastguard Worker /* 4*0e209d39SAndroid Build Coastguard Worker ******************************************************************************** 5*0e209d39SAndroid Build Coastguard Worker * Copyright (C) 2003-2013, International Business Machines Corporation 6*0e209d39SAndroid Build Coastguard Worker * and others. All Rights Reserved. 7*0e209d39SAndroid Build Coastguard Worker ******************************************************************************** 8*0e209d39SAndroid Build Coastguard Worker * 9*0e209d39SAndroid Build Coastguard Worker * File BUDDHCAL.H 10*0e209d39SAndroid Build Coastguard Worker * 11*0e209d39SAndroid Build Coastguard Worker * Modification History: 12*0e209d39SAndroid Build Coastguard Worker * 13*0e209d39SAndroid Build Coastguard Worker * Date Name Description 14*0e209d39SAndroid Build Coastguard Worker * 05/13/2003 srl copied from gregocal.h 15*0e209d39SAndroid Build Coastguard Worker ******************************************************************************** 16*0e209d39SAndroid Build Coastguard Worker */ 17*0e209d39SAndroid Build Coastguard Worker 18*0e209d39SAndroid Build Coastguard Worker #ifndef BUDDHCAL_H 19*0e209d39SAndroid Build Coastguard Worker #define BUDDHCAL_H 20*0e209d39SAndroid Build Coastguard Worker 21*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h" 22*0e209d39SAndroid Build Coastguard Worker 23*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_FORMATTING 24*0e209d39SAndroid Build Coastguard Worker 25*0e209d39SAndroid Build Coastguard Worker #include "unicode/calendar.h" 26*0e209d39SAndroid Build Coastguard Worker #include "unicode/gregocal.h" 27*0e209d39SAndroid Build Coastguard Worker 28*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN 29*0e209d39SAndroid Build Coastguard Worker 30*0e209d39SAndroid Build Coastguard Worker /** 31*0e209d39SAndroid Build Coastguard Worker * Concrete class which provides the Buddhist calendar. 32*0e209d39SAndroid Build Coastguard Worker * <P> 33*0e209d39SAndroid Build Coastguard Worker * <code>BuddhistCalendar</code> is a subclass of <code>GregorianCalendar</code> 34*0e209d39SAndroid Build Coastguard Worker * that numbers years since the birth of the Buddha. This is the civil calendar 35*0e209d39SAndroid Build Coastguard Worker * in some predominantly Buddhist countries such as Thailand, and it is used for 36*0e209d39SAndroid Build Coastguard Worker * religious purposes elsewhere. 37*0e209d39SAndroid Build Coastguard Worker * <p> 38*0e209d39SAndroid Build Coastguard Worker * The Buddhist calendar is identical to the Gregorian calendar in all respects 39*0e209d39SAndroid Build Coastguard Worker * except for the year and era. Years are numbered since the birth of the 40*0e209d39SAndroid Build Coastguard Worker * Buddha in 543 BC (Gregorian), so that 1 AD (Gregorian) is equivalent to 544 41*0e209d39SAndroid Build Coastguard Worker * BE (Buddhist Era) and 1998 AD is 2541 BE. 42*0e209d39SAndroid Build Coastguard Worker * <p> 43*0e209d39SAndroid Build Coastguard Worker * The Buddhist Calendar has only one allowable era: <code>BE</code>. If the 44*0e209d39SAndroid Build Coastguard Worker * calendar is not in lenient mode (see <code>setLenient</code>), dates before 45*0e209d39SAndroid Build Coastguard Worker * 1/1/1 BE are rejected as an illegal argument. 46*0e209d39SAndroid Build Coastguard Worker * <p> 47*0e209d39SAndroid Build Coastguard Worker * @internal 48*0e209d39SAndroid Build Coastguard Worker */ 49*0e209d39SAndroid Build Coastguard Worker class BuddhistCalendar : public GregorianCalendar { 50*0e209d39SAndroid Build Coastguard Worker public: 51*0e209d39SAndroid Build Coastguard Worker 52*0e209d39SAndroid Build Coastguard Worker /** 53*0e209d39SAndroid Build Coastguard Worker * Useful constants for BuddhistCalendar. Only one Era. 54*0e209d39SAndroid Build Coastguard Worker * @internal 55*0e209d39SAndroid Build Coastguard Worker */ 56*0e209d39SAndroid Build Coastguard Worker enum EEras { 57*0e209d39SAndroid Build Coastguard Worker BE 58*0e209d39SAndroid Build Coastguard Worker }; 59*0e209d39SAndroid Build Coastguard Worker 60*0e209d39SAndroid Build Coastguard Worker /** 61*0e209d39SAndroid Build Coastguard Worker * Constructs a BuddhistCalendar based on the current time in the default time zone 62*0e209d39SAndroid Build Coastguard Worker * with the given locale. 63*0e209d39SAndroid Build Coastguard Worker * 64*0e209d39SAndroid Build Coastguard Worker * @param aLocale The given locale. 65*0e209d39SAndroid Build Coastguard Worker * @param success Indicates the status of BuddhistCalendar object construction. 66*0e209d39SAndroid Build Coastguard Worker * Returns U_ZERO_ERROR if constructed successfully. 67*0e209d39SAndroid Build Coastguard Worker * @internal 68*0e209d39SAndroid Build Coastguard Worker */ 69*0e209d39SAndroid Build Coastguard Worker BuddhistCalendar(const Locale& aLocale, UErrorCode& success); 70*0e209d39SAndroid Build Coastguard Worker 71*0e209d39SAndroid Build Coastguard Worker 72*0e209d39SAndroid Build Coastguard Worker /** 73*0e209d39SAndroid Build Coastguard Worker * Destructor 74*0e209d39SAndroid Build Coastguard Worker * @internal 75*0e209d39SAndroid Build Coastguard Worker */ 76*0e209d39SAndroid Build Coastguard Worker virtual ~BuddhistCalendar(); 77*0e209d39SAndroid Build Coastguard Worker 78*0e209d39SAndroid Build Coastguard Worker /** 79*0e209d39SAndroid Build Coastguard Worker * Copy constructor 80*0e209d39SAndroid Build Coastguard Worker * @param source the object to be copied. 81*0e209d39SAndroid Build Coastguard Worker * @internal 82*0e209d39SAndroid Build Coastguard Worker */ 83*0e209d39SAndroid Build Coastguard Worker BuddhistCalendar(const BuddhistCalendar& source); 84*0e209d39SAndroid Build Coastguard Worker 85*0e209d39SAndroid Build Coastguard Worker /** 86*0e209d39SAndroid Build Coastguard Worker * Default assignment operator 87*0e209d39SAndroid Build Coastguard Worker * @param right the object to be copied. 88*0e209d39SAndroid Build Coastguard Worker * @internal 89*0e209d39SAndroid Build Coastguard Worker */ 90*0e209d39SAndroid Build Coastguard Worker BuddhistCalendar& operator=(const BuddhistCalendar& right); 91*0e209d39SAndroid Build Coastguard Worker 92*0e209d39SAndroid Build Coastguard Worker /** 93*0e209d39SAndroid Build Coastguard Worker * Create and return a polymorphic copy of this calendar. 94*0e209d39SAndroid Build Coastguard Worker * @return return a polymorphic copy of this calendar. 95*0e209d39SAndroid Build Coastguard Worker * @internal 96*0e209d39SAndroid Build Coastguard Worker */ 97*0e209d39SAndroid Build Coastguard Worker virtual BuddhistCalendar* clone() const override; 98*0e209d39SAndroid Build Coastguard Worker 99*0e209d39SAndroid Build Coastguard Worker public: 100*0e209d39SAndroid Build Coastguard Worker /** 101*0e209d39SAndroid Build Coastguard Worker * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual 102*0e209d39SAndroid Build Coastguard Worker * override. This method is to implement a simple version of RTTI, since not all C++ 103*0e209d39SAndroid Build Coastguard Worker * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call 104*0e209d39SAndroid Build Coastguard Worker * this method. 105*0e209d39SAndroid Build Coastguard Worker * 106*0e209d39SAndroid Build Coastguard Worker * @return The class ID for this object. All objects of a given class have the 107*0e209d39SAndroid Build Coastguard Worker * same class ID. Objects of other classes have different class IDs. 108*0e209d39SAndroid Build Coastguard Worker * @internal 109*0e209d39SAndroid Build Coastguard Worker */ 110*0e209d39SAndroid Build Coastguard Worker virtual UClassID getDynamicClassID() const override; 111*0e209d39SAndroid Build Coastguard Worker 112*0e209d39SAndroid Build Coastguard Worker /** 113*0e209d39SAndroid Build Coastguard Worker * Return the class ID for this class. This is useful only for comparing to a return 114*0e209d39SAndroid Build Coastguard Worker * value from getDynamicClassID(). For example: 115*0e209d39SAndroid Build Coastguard Worker * 116*0e209d39SAndroid Build Coastguard Worker * Base* polymorphic_pointer = createPolymorphicObject(); 117*0e209d39SAndroid Build Coastguard Worker * if (polymorphic_pointer->getDynamicClassID() == 118*0e209d39SAndroid Build Coastguard Worker * Derived::getStaticClassID()) ... 119*0e209d39SAndroid Build Coastguard Worker * 120*0e209d39SAndroid Build Coastguard Worker * @return The class ID for all objects of this class. 121*0e209d39SAndroid Build Coastguard Worker * @internal 122*0e209d39SAndroid Build Coastguard Worker */ 123*0e209d39SAndroid Build Coastguard Worker U_I18N_API static UClassID U_EXPORT2 getStaticClassID(); 124*0e209d39SAndroid Build Coastguard Worker 125*0e209d39SAndroid Build Coastguard Worker /** 126*0e209d39SAndroid Build Coastguard Worker * return the calendar type, "buddhist". 127*0e209d39SAndroid Build Coastguard Worker * 128*0e209d39SAndroid Build Coastguard Worker * @return calendar type 129*0e209d39SAndroid Build Coastguard Worker * @internal 130*0e209d39SAndroid Build Coastguard Worker */ 131*0e209d39SAndroid Build Coastguard Worker virtual const char * getType() const override; 132*0e209d39SAndroid Build Coastguard Worker 133*0e209d39SAndroid Build Coastguard Worker private: 134*0e209d39SAndroid Build Coastguard Worker BuddhistCalendar(); // default constructor not implemented 135*0e209d39SAndroid Build Coastguard Worker 136*0e209d39SAndroid Build Coastguard Worker protected: 137*0e209d39SAndroid Build Coastguard Worker /** 138*0e209d39SAndroid Build Coastguard Worker * Return the extended year defined by the current fields. This will 139*0e209d39SAndroid Build Coastguard Worker * use the UCAL_EXTENDED_YEAR field or the UCAL_YEAR and supra-year fields (such 140*0e209d39SAndroid Build Coastguard Worker * as UCAL_ERA) specific to the calendar system, depending on which set of 141*0e209d39SAndroid Build Coastguard Worker * fields is newer. 142*0e209d39SAndroid Build Coastguard Worker * @param status 143*0e209d39SAndroid Build Coastguard Worker * @return the extended year 144*0e209d39SAndroid Build Coastguard Worker * @internal 145*0e209d39SAndroid Build Coastguard Worker */ 146*0e209d39SAndroid Build Coastguard Worker virtual int32_t handleGetExtendedYear(UErrorCode& status) override; 147*0e209d39SAndroid Build Coastguard Worker /** 148*0e209d39SAndroid Build Coastguard Worker * Subclasses may override this method to compute several fields 149*0e209d39SAndroid Build Coastguard Worker * specific to each calendar system. 150*0e209d39SAndroid Build Coastguard Worker * @internal 151*0e209d39SAndroid Build Coastguard Worker */ 152*0e209d39SAndroid Build Coastguard Worker virtual void handleComputeFields(int32_t julianDay, UErrorCode& status) override; 153*0e209d39SAndroid Build Coastguard Worker /** 154*0e209d39SAndroid Build Coastguard Worker * Subclass API for defining limits of different types. 155*0e209d39SAndroid Build Coastguard Worker * @param field one of the field numbers 156*0e209d39SAndroid Build Coastguard Worker * @param limitType one of <code>MINIMUM</code>, <code>GREATEST_MINIMUM</code>, 157*0e209d39SAndroid Build Coastguard Worker * <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code> 158*0e209d39SAndroid Build Coastguard Worker * @internal 159*0e209d39SAndroid Build Coastguard Worker */ 160*0e209d39SAndroid Build Coastguard Worker virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override; 161*0e209d39SAndroid Build Coastguard Worker isEra0CountingBackward()162*0e209d39SAndroid Build Coastguard Worker virtual bool isEra0CountingBackward() const override { return false; } 163*0e209d39SAndroid Build Coastguard Worker 164*0e209d39SAndroid Build Coastguard Worker DECLARE_OVERRIDE_SYSTEM_DEFAULT_CENTURY 165*0e209d39SAndroid Build Coastguard Worker }; 166*0e209d39SAndroid Build Coastguard Worker 167*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END 168*0e209d39SAndroid Build Coastguard Worker 169*0e209d39SAndroid Build Coastguard Worker #endif /* #if !UCONFIG_NO_FORMATTING */ 170*0e209d39SAndroid Build Coastguard Worker 171*0e209d39SAndroid Build Coastguard Worker #endif // _GREGOCAL 172*0e209d39SAndroid Build Coastguard Worker //eof 173*0e209d39SAndroid Build Coastguard Worker 174