xref: /aosp_15_r20/external/icu/libicu/cts_headers/buddhcal.h (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
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