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