16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ******************************************************************************** 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (C) 2003-2013, International Business Machines Corporation 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ******************************************************************************** 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * File BUDDHCAL.H 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Modification History: 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Date Name Description 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 05/13/2003 srl copied from gregocal.h 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ******************************************************************************** 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef BUDDHCAL_H 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define BUDDHCAL_H 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/calendar.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/gregocal.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Concrete class which provides the Buddhist calendar. 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P> 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>BuddhistCalendar</code> is a subclass of <code>GregorianCalendar</code> 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that numbers years since the birth of the Buddha. This is the civil calendar 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in some predominantly Buddhist countries such as Thailand, and it is used for 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * religious purposes elsewhere. 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p> 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The Buddhist calendar is identical to the Gregorian calendar in all respects 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * except for the year and era. Years are numbered since the birth of the 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Buddha in 543 BC (Gregorian), so that 1 AD (Gregorian) is equivalent to 544 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * BE (Buddhist Era) and 1998 AD is 2541 BE. 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p> 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The Buddhist Calendar has only one allowable era: <code>BE</code>. If the 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * calendar is not in lenient mode (see <code>setLenient</code>), dates before 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1/1/1 BE are rejected as an illegal argument. 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p> 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass BuddhistCalendar : public GregorianCalendar { 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Useful constants for BuddhistCalendar. Only one Era. 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org enum EEras { 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BE 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs a BuddhistCalendar based on the current time in the default time zone 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the given locale. 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param aLocale The given locale. 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param success Indicates the status of BuddhistCalendar object construction. 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns U_ZERO_ERROR if constructed successfully. 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BuddhistCalendar(const Locale& aLocale, UErrorCode& success); 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Destructor 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~BuddhistCalendar(); 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy constructor 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param source the object to be copied. 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BuddhistCalendar(const BuddhistCalendar& source); 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Default assignment operator 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param right the object to be copied. 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BuddhistCalendar& operator=(const BuddhistCalendar& right); 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Create and return a polymorphic copy of this calendar. 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return return a polymorphic copy of this calendar. 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual Calendar* clone(void) const; 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * override. This method is to implement a simple version of RTTI, since not all C++ 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this method. 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The class ID for this object. All objects of a given class have the 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * same class ID. Objects of other classes have different class IDs. 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UClassID getDynamicClassID(void) const; 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the class ID for this class. This is useful only for comparing to a return 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * value from getDynamicClassID(). For example: 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Base* polymorphic_pointer = createPolymorphicObject(); 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if (polymorphic_pointer->getDynamicClassID() == 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Derived::getStaticClassID()) ... 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The class ID for all objects of this class. 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void); 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return the calendar type, "buddhist". 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return calendar type 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual const char * getType() const; 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate: 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BuddhistCalendar(); // default constructor not implemented 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org protected: 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the extended year defined by the current fields. This will 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * use the UCAL_EXTENDED_YEAR field or the UCAL_YEAR and supra-year fields (such 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * as UCAL_ERA) specific to the calendar system, depending on which set of 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * fields is newer. 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the extended year 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleGetExtendedYear(); 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Subclasses may override this method to compute several fields 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * specific to each calendar system. 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void handleComputeFields(int32_t julianDay, UErrorCode& status); 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Subclass API for defining limits of different types. 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param field one of the field numbers 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limitType one of <code>MINIMUM</code>, <code>GREATEST_MINIMUM</code>, 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code> 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const; 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the Julian day number of day before the first day of the 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * given month in the given extended year. Subclasses should override 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this method to implement their calendar system. 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param eyear the extended year 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param month the zero-based month, or 0 if useMonth is false 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param useMonth if false, compute the day before the first day of 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the given year, otherwise, compute the day before the first day of 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the given month 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param return the Julian day number of the day before the first 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * day of the given month and year 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool useMonth) const; 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns TRUE because the Buddhist Calendar does have a default century 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UBool haveDefaultCentury() const; 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns the date of the start of the default century 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return start of century - in milliseconds since epoch, 1970 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UDate defaultCenturyStart() const; 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns the year in which the default century begins 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t defaultCenturyStartYear() const; 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */ 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // _GREGOCAL 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//eof 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 201