xref: /aosp_15_r20/external/icu/libicu/cts_headers/chnsecal.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) 2007-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 CHNSECAL.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  *   9/18/2007  ajmacher         ported from java ChineseCalendar
15*0e209d39SAndroid Build Coastguard Worker  *****************************************************************************
16*0e209d39SAndroid Build Coastguard Worker  */
17*0e209d39SAndroid Build Coastguard Worker 
18*0e209d39SAndroid Build Coastguard Worker #ifndef CHNSECAL_H
19*0e209d39SAndroid Build Coastguard Worker #define CHNSECAL_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/timezone.h"
27*0e209d39SAndroid Build Coastguard Worker 
28*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
29*0e209d39SAndroid Build Coastguard Worker 
30*0e209d39SAndroid Build Coastguard Worker class CalendarCache;
31*0e209d39SAndroid Build Coastguard Worker /**
32*0e209d39SAndroid Build Coastguard Worker  * <code>ChineseCalendar</code> is a concrete subclass of {@link Calendar}
33*0e209d39SAndroid Build Coastguard Worker  * that implements a traditional Chinese calendar.  The traditional Chinese
34*0e209d39SAndroid Build Coastguard Worker  * calendar is a lunisolar calendar: Each month starts on a new moon, and
35*0e209d39SAndroid Build Coastguard Worker  * the months are numbered according to solar events, specifically, to
36*0e209d39SAndroid Build Coastguard Worker  * guarantee that month 11 always contains the winter solstice.  In order
37*0e209d39SAndroid Build Coastguard Worker  * to accomplish this, leap months are inserted in certain years.  Leap
38*0e209d39SAndroid Build Coastguard Worker  * months are numbered the same as the month they follow.  The decision of
39*0e209d39SAndroid Build Coastguard Worker  * which month is a leap month depends on the relative movements of the sun
40*0e209d39SAndroid Build Coastguard Worker  * and moon.
41*0e209d39SAndroid Build Coastguard Worker  *
42*0e209d39SAndroid Build Coastguard Worker  * <p>This class defines one addition field beyond those defined by
43*0e209d39SAndroid Build Coastguard Worker  * <code>Calendar</code>: The <code>IS_LEAP_MONTH</code> field takes the
44*0e209d39SAndroid Build Coastguard Worker  * value of 0 for normal months, or 1 for leap months.
45*0e209d39SAndroid Build Coastguard Worker  *
46*0e209d39SAndroid Build Coastguard Worker  * <p>All astronomical computations are performed with respect to a time
47*0e209d39SAndroid Build Coastguard Worker  * zone of GMT+8:00 and a longitude of 120 degrees east.  Although some
48*0e209d39SAndroid Build Coastguard Worker  * calendars implement a historically more accurate convention of using
49*0e209d39SAndroid Build Coastguard Worker  * Beijing's local longitude (116 degrees 25 minutes east) and time zone
50*0e209d39SAndroid Build Coastguard Worker  * (GMT+7:45:40) for dates before 1929, we do not implement this here.
51*0e209d39SAndroid Build Coastguard Worker  *
52*0e209d39SAndroid Build Coastguard Worker  * <p>Years are counted in two different ways in the Chinese calendar.  The
53*0e209d39SAndroid Build Coastguard Worker  * first method is by sequential numbering from the 61st year of the reign
54*0e209d39SAndroid Build Coastguard Worker  * of Huang Di, 2637 BCE, which is designated year 1 on the Chinese
55*0e209d39SAndroid Build Coastguard Worker  * calendar.  The second method uses 60-year cycles from the same starting
56*0e209d39SAndroid Build Coastguard Worker  * point, which is designated year 1 of cycle 1.  In this class, the
57*0e209d39SAndroid Build Coastguard Worker  * <code>EXTENDED_YEAR</code> field contains the sequential year count.
58*0e209d39SAndroid Build Coastguard Worker  * The <code>ERA</code> field contains the cycle number, and the
59*0e209d39SAndroid Build Coastguard Worker  * <code>YEAR</code> field contains the year of the cycle, a value between
60*0e209d39SAndroid Build Coastguard Worker  * 1 and 60.
61*0e209d39SAndroid Build Coastguard Worker  *
62*0e209d39SAndroid Build Coastguard Worker  * <p>There is some variation in what is considered the starting point of
63*0e209d39SAndroid Build Coastguard Worker  * the calendar, with some sources starting in the first year of the reign
64*0e209d39SAndroid Build Coastguard Worker  * of Huang Di, rather than the 61st.  This gives continuous year numbers
65*0e209d39SAndroid Build Coastguard Worker  * 60 years greater and cycle numbers one greater than what this class
66*0e209d39SAndroid Build Coastguard Worker  * implements.
67*0e209d39SAndroid Build Coastguard Worker  *
68*0e209d39SAndroid Build Coastguard Worker  * <p>Because <code>ChineseCalendar</code> defines an additional field and
69*0e209d39SAndroid Build Coastguard Worker  * redefines the way the <code>ERA</code> field is used, it requires a new
70*0e209d39SAndroid Build Coastguard Worker  * format class, <code>ChineseDateFormat</code>.  As always, use the
71*0e209d39SAndroid Build Coastguard Worker  * methods <code>DateFormat.getXxxInstance(Calendar cal,...)</code> to
72*0e209d39SAndroid Build Coastguard Worker  * obtain a formatter for this calendar.
73*0e209d39SAndroid Build Coastguard Worker  *
74*0e209d39SAndroid Build Coastguard Worker  * <p>References:<ul>
75*0e209d39SAndroid Build Coastguard Worker  *
76*0e209d39SAndroid Build Coastguard Worker  * <li>Dershowitz and Reingold, <i>Calendrical Calculations</i>,
77*0e209d39SAndroid Build Coastguard Worker  * Cambridge University Press, 1997</li>
78*0e209d39SAndroid Build Coastguard Worker  *
79*0e209d39SAndroid Build Coastguard Worker  * <li>The <a href="http://www.tondering.dk/claus/calendar.html">
80*0e209d39SAndroid Build Coastguard Worker  * Calendar FAQ</a></li>
81*0e209d39SAndroid Build Coastguard Worker  *
82*0e209d39SAndroid Build Coastguard Worker  * </ul>
83*0e209d39SAndroid Build Coastguard Worker  *
84*0e209d39SAndroid Build Coastguard Worker  * <p>
85*0e209d39SAndroid Build Coastguard Worker  * This class should only be subclassed to implement variants of the Chinese lunar calendar.</p>
86*0e209d39SAndroid Build Coastguard Worker  * <p>
87*0e209d39SAndroid Build Coastguard Worker  * ChineseCalendar usually should be instantiated using
88*0e209d39SAndroid Build Coastguard Worker  * {@link com.ibm.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
89*0e209d39SAndroid Build Coastguard Worker  * with the tag <code>"@calendar=chinese"</code>.</p>
90*0e209d39SAndroid Build Coastguard Worker  *
91*0e209d39SAndroid Build Coastguard Worker  * @see com.ibm.icu.text.ChineseDateFormat
92*0e209d39SAndroid Build Coastguard Worker  * @see com.ibm.icu.util.Calendar
93*0e209d39SAndroid Build Coastguard Worker  * @author Alan Liu
94*0e209d39SAndroid Build Coastguard Worker  * @internal
95*0e209d39SAndroid Build Coastguard Worker  */
96*0e209d39SAndroid Build Coastguard Worker class U_I18N_API ChineseCalendar : public Calendar {
97*0e209d39SAndroid Build Coastguard Worker  public:
98*0e209d39SAndroid Build Coastguard Worker   //-------------------------------------------------------------------------
99*0e209d39SAndroid Build Coastguard Worker   // Constructors...
100*0e209d39SAndroid Build Coastguard Worker   //-------------------------------------------------------------------------
101*0e209d39SAndroid Build Coastguard Worker 
102*0e209d39SAndroid Build Coastguard Worker   /**
103*0e209d39SAndroid Build Coastguard Worker    * Constructs a ChineseCalendar based on the current time in the default time zone
104*0e209d39SAndroid Build Coastguard Worker    * with the given locale.
105*0e209d39SAndroid Build Coastguard Worker    *
106*0e209d39SAndroid Build Coastguard Worker    * @param aLocale  The given locale.
107*0e209d39SAndroid Build Coastguard Worker    * @param success  Indicates the status of ChineseCalendar object construction.
108*0e209d39SAndroid Build Coastguard Worker    *                 Returns U_ZERO_ERROR if constructed successfully.
109*0e209d39SAndroid Build Coastguard Worker    * @internal
110*0e209d39SAndroid Build Coastguard Worker    */
111*0e209d39SAndroid Build Coastguard Worker   ChineseCalendar(const Locale& aLocale, UErrorCode &success);
112*0e209d39SAndroid Build Coastguard Worker 
113*0e209d39SAndroid Build Coastguard Worker   /**
114*0e209d39SAndroid Build Coastguard Worker    * Returns true if the date is in a leap year.
115*0e209d39SAndroid Build Coastguard Worker    *
116*0e209d39SAndroid Build Coastguard Worker    * @param status        ICU Error Code
117*0e209d39SAndroid Build Coastguard Worker    * @return       True if the date in the fields is in a Temporal proposal
118*0e209d39SAndroid Build Coastguard Worker    *               defined leap year. False otherwise.
119*0e209d39SAndroid Build Coastguard Worker    */
120*0e209d39SAndroid Build Coastguard Worker   virtual bool inTemporalLeapYear(UErrorCode &status) const override;
121*0e209d39SAndroid Build Coastguard Worker 
122*0e209d39SAndroid Build Coastguard Worker   /**
123*0e209d39SAndroid Build Coastguard Worker    * Gets The Temporal monthCode value corresponding to the month for the date.
124*0e209d39SAndroid Build Coastguard Worker    * The value is a string identifier that starts with the literal grapheme
125*0e209d39SAndroid Build Coastguard Worker    * "M" followed by two graphemes representing the zero-padded month number
126*0e209d39SAndroid Build Coastguard Worker    * of the current month in a normal (non-leap) year and suffixed by an
127*0e209d39SAndroid Build Coastguard Worker    * optional literal grapheme "L" if this is a leap month in a lunisolar
128*0e209d39SAndroid Build Coastguard Worker    * calendar. For Chinese calendars (including Dangi), the values are
129*0e209d39SAndroid Build Coastguard Worker    * "M01" .. "M12" for non-leap year, and "M01" .. "M12" with one of
130*0e209d39SAndroid Build Coastguard Worker    * "M01L" .. "M12L" for leap year.
131*0e209d39SAndroid Build Coastguard Worker    *
132*0e209d39SAndroid Build Coastguard Worker    * @param status        ICU Error Code
133*0e209d39SAndroid Build Coastguard Worker    * @return       One of 24 possible strings in
134*0e209d39SAndroid Build Coastguard Worker    *               {"M01" .. "M12", "M01L" .. "M12L"}.
135*0e209d39SAndroid Build Coastguard Worker    * @draft ICU 73
136*0e209d39SAndroid Build Coastguard Worker    */
137*0e209d39SAndroid Build Coastguard Worker   virtual const char* getTemporalMonthCode(UErrorCode &status) const override;
138*0e209d39SAndroid Build Coastguard Worker 
139*0e209d39SAndroid Build Coastguard Worker   /**
140*0e209d39SAndroid Build Coastguard Worker    * Sets The Temporal monthCode which is a string identifier that starts
141*0e209d39SAndroid Build Coastguard Worker    * with the literal grapheme "M" followed by two graphemes representing
142*0e209d39SAndroid Build Coastguard Worker    * the zero-padded month number of the current month in a normal
143*0e209d39SAndroid Build Coastguard Worker    * (non-leap) year and suffixed by an optional literal grapheme "L" if this
144*0e209d39SAndroid Build Coastguard Worker    * is a leap month in a lunisolar calendar. For Chinese calendars, the values
145*0e209d39SAndroid Build Coastguard Worker    * are "M01" .. "M12" for non-leap years, and "M01" .. "M12" plus one in
146*0e209d39SAndroid Build Coastguard Worker    * "M01L" .. "M12L" for leap year.
147*0e209d39SAndroid Build Coastguard Worker    *
148*0e209d39SAndroid Build Coastguard Worker    * @param temporalMonth  The value to be set for temporal monthCode. One of
149*0e209d39SAndroid Build Coastguard Worker    *                    24 possible strings in {"M01" .. "M12", "M01L" .. "M12L"}.
150*0e209d39SAndroid Build Coastguard Worker    * @param status        ICU Error Code
151*0e209d39SAndroid Build Coastguard Worker    *
152*0e209d39SAndroid Build Coastguard Worker    * @draft ICU 73
153*0e209d39SAndroid Build Coastguard Worker    */
154*0e209d39SAndroid Build Coastguard Worker   virtual void setTemporalMonthCode(const char* code, UErrorCode& status) override;
155*0e209d39SAndroid Build Coastguard Worker 
156*0e209d39SAndroid Build Coastguard Worker  public:
157*0e209d39SAndroid Build Coastguard Worker   /**
158*0e209d39SAndroid Build Coastguard Worker    * Copy Constructor
159*0e209d39SAndroid Build Coastguard Worker    * @internal
160*0e209d39SAndroid Build Coastguard Worker    */
161*0e209d39SAndroid Build Coastguard Worker   ChineseCalendar(const ChineseCalendar& other);
162*0e209d39SAndroid Build Coastguard Worker 
163*0e209d39SAndroid Build Coastguard Worker   /**
164*0e209d39SAndroid Build Coastguard Worker    * Destructor.
165*0e209d39SAndroid Build Coastguard Worker    * @internal
166*0e209d39SAndroid Build Coastguard Worker    */
167*0e209d39SAndroid Build Coastguard Worker   virtual ~ChineseCalendar();
168*0e209d39SAndroid Build Coastguard Worker 
169*0e209d39SAndroid Build Coastguard Worker   // clone
170*0e209d39SAndroid Build Coastguard Worker   virtual ChineseCalendar* clone() const override;
171*0e209d39SAndroid Build Coastguard Worker 
172*0e209d39SAndroid Build Coastguard Worker  private:
173*0e209d39SAndroid Build Coastguard Worker 
174*0e209d39SAndroid Build Coastguard Worker   //-------------------------------------------------------------------------
175*0e209d39SAndroid Build Coastguard Worker   // Internal data....
176*0e209d39SAndroid Build Coastguard Worker   //-------------------------------------------------------------------------
177*0e209d39SAndroid Build Coastguard Worker 
178*0e209d39SAndroid Build Coastguard Worker   // There is a leap month between the Winter Solstice before and after the
179*0e209d39SAndroid Build Coastguard Worker   // current date.This is different from leap year because in some year, such as
180*0e209d39SAndroid Build Coastguard Worker   // 1813 and 2033, the leap month is after the Winter Solstice of that year. So
181*0e209d39SAndroid Build Coastguard Worker   // this value could be false for a date prior to the Winter Solstice of that
182*0e209d39SAndroid Build Coastguard Worker   // year but that year still has a leap month and therefor is a leap year.
183*0e209d39SAndroid Build Coastguard Worker   UBool hasLeapMonthBetweenWinterSolstices;
184*0e209d39SAndroid Build Coastguard Worker 
185*0e209d39SAndroid Build Coastguard Worker   //----------------------------------------------------------------------
186*0e209d39SAndroid Build Coastguard Worker   // Calendar framework
187*0e209d39SAndroid Build Coastguard Worker   //----------------------------------------------------------------------
188*0e209d39SAndroid Build Coastguard Worker 
189*0e209d39SAndroid Build Coastguard Worker  protected:
190*0e209d39SAndroid Build Coastguard Worker   virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
191*0e209d39SAndroid Build Coastguard Worker   virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month, UErrorCode& status) const override;
192*0e209d39SAndroid Build Coastguard Worker   virtual int64_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth, UErrorCode& status) const override;
193*0e209d39SAndroid Build Coastguard Worker   virtual int32_t handleGetExtendedYear(UErrorCode& status) override;
194*0e209d39SAndroid Build Coastguard Worker   virtual void handleComputeFields(int32_t julianDay, UErrorCode &status) override;
195*0e209d39SAndroid Build Coastguard Worker   virtual const UFieldResolutionTable* getFieldResolutionTable() const override;
196*0e209d39SAndroid Build Coastguard Worker 
197*0e209d39SAndroid Build Coastguard Worker  public:
198*0e209d39SAndroid Build Coastguard Worker   virtual void add(UCalendarDateFields field, int32_t amount, UErrorCode &status) override;
199*0e209d39SAndroid Build Coastguard Worker   virtual void add(EDateFields field, int32_t amount, UErrorCode &status) override;
200*0e209d39SAndroid Build Coastguard Worker   virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode &status) override;
201*0e209d39SAndroid Build Coastguard Worker   virtual void roll(EDateFields field, int32_t amount, UErrorCode &status) override;
202*0e209d39SAndroid Build Coastguard Worker 
203*0e209d39SAndroid Build Coastguard Worker   /**
204*0e209d39SAndroid Build Coastguard Worker    * @return      The related Gregorian year; will be obtained by modifying the value
205*0e209d39SAndroid Build Coastguard Worker    *              obtained by get from UCAL_EXTENDED_YEAR field
206*0e209d39SAndroid Build Coastguard Worker    * @internal
207*0e209d39SAndroid Build Coastguard Worker    */
208*0e209d39SAndroid Build Coastguard Worker   virtual int32_t getRelatedYear(UErrorCode &status) const override;
209*0e209d39SAndroid Build Coastguard Worker 
210*0e209d39SAndroid Build Coastguard Worker   /**
211*0e209d39SAndroid Build Coastguard Worker    * @param year  The related Gregorian year to set; will be modified as necessary then
212*0e209d39SAndroid Build Coastguard Worker    *              set in UCAL_EXTENDED_YEAR field
213*0e209d39SAndroid Build Coastguard Worker    * @internal
214*0e209d39SAndroid Build Coastguard Worker    */
215*0e209d39SAndroid Build Coastguard Worker   virtual void setRelatedYear(int32_t year) override;
216*0e209d39SAndroid Build Coastguard Worker 
217*0e209d39SAndroid Build Coastguard Worker   //----------------------------------------------------------------------
218*0e209d39SAndroid Build Coastguard Worker   // Internal methods & astronomical calculations
219*0e209d39SAndroid Build Coastguard Worker   //----------------------------------------------------------------------
220*0e209d39SAndroid Build Coastguard Worker 
221*0e209d39SAndroid Build Coastguard Worker  private:
222*0e209d39SAndroid Build Coastguard Worker 
223*0e209d39SAndroid Build Coastguard Worker   static const UFieldResolutionTable CHINESE_DATE_PRECEDENCE[];
224*0e209d39SAndroid Build Coastguard Worker 
225*0e209d39SAndroid Build Coastguard Worker   virtual void offsetMonth(int32_t newMoon, int32_t dom, int32_t delta, UErrorCode& status);
226*0e209d39SAndroid Build Coastguard Worker 
227*0e209d39SAndroid Build Coastguard Worker   // UObject stuff
228*0e209d39SAndroid Build Coastguard Worker  public:
229*0e209d39SAndroid Build Coastguard Worker   /**
230*0e209d39SAndroid Build Coastguard Worker    * @return   The class ID for this object. All objects of a given class have the
231*0e209d39SAndroid Build Coastguard Worker    *           same class ID. Objects of other classes have different class IDs.
232*0e209d39SAndroid Build Coastguard Worker    * @internal
233*0e209d39SAndroid Build Coastguard Worker    */
234*0e209d39SAndroid Build Coastguard Worker   virtual UClassID getDynamicClassID() const override;
235*0e209d39SAndroid Build Coastguard Worker 
236*0e209d39SAndroid Build Coastguard Worker   /**
237*0e209d39SAndroid Build Coastguard Worker    * Return the class ID for this class. This is useful only for comparing to a return
238*0e209d39SAndroid Build Coastguard Worker    * value from getDynamicClassID(). For example:
239*0e209d39SAndroid Build Coastguard Worker    *
240*0e209d39SAndroid Build Coastguard Worker    *      Base* polymorphic_pointer = createPolymorphicObject();
241*0e209d39SAndroid Build Coastguard Worker    *      if (polymorphic_pointer->getDynamicClassID() ==
242*0e209d39SAndroid Build Coastguard Worker    *          Derived::getStaticClassID()) ...
243*0e209d39SAndroid Build Coastguard Worker    *
244*0e209d39SAndroid Build Coastguard Worker    * @return   The class ID for all objects of this class.
245*0e209d39SAndroid Build Coastguard Worker    * @internal
246*0e209d39SAndroid Build Coastguard Worker    */
247*0e209d39SAndroid Build Coastguard Worker   static UClassID U_EXPORT2 getStaticClassID();
248*0e209d39SAndroid Build Coastguard Worker 
249*0e209d39SAndroid Build Coastguard Worker   /**
250*0e209d39SAndroid Build Coastguard Worker    * return the calendar type, "chinese".
251*0e209d39SAndroid Build Coastguard Worker    *
252*0e209d39SAndroid Build Coastguard Worker    * @return calendar type
253*0e209d39SAndroid Build Coastguard Worker    * @internal
254*0e209d39SAndroid Build Coastguard Worker    */
255*0e209d39SAndroid Build Coastguard Worker   virtual const char * getType() const override;
256*0e209d39SAndroid Build Coastguard Worker 
257*0e209d39SAndroid Build Coastguard Worker   struct Setting {
258*0e209d39SAndroid Build Coastguard Worker       int32_t epochYear;
259*0e209d39SAndroid Build Coastguard Worker       const TimeZone* zoneAstroCalc;
260*0e209d39SAndroid Build Coastguard Worker       CalendarCache** winterSolsticeCache;
261*0e209d39SAndroid Build Coastguard Worker       CalendarCache** newYearCache;
262*0e209d39SAndroid Build Coastguard Worker   };
263*0e209d39SAndroid Build Coastguard Worker  protected:
264*0e209d39SAndroid Build Coastguard Worker   virtual Setting getSetting(UErrorCode& status) const;
265*0e209d39SAndroid Build Coastguard Worker   virtual int32_t internalGetMonth(int32_t defaultValue, UErrorCode& status) const override;
266*0e209d39SAndroid Build Coastguard Worker 
267*0e209d39SAndroid Build Coastguard Worker   virtual int32_t internalGetMonth(UErrorCode& status) const override;
268*0e209d39SAndroid Build Coastguard Worker 
269*0e209d39SAndroid Build Coastguard Worker  protected:
270*0e209d39SAndroid Build Coastguard Worker 
271*0e209d39SAndroid Build Coastguard Worker   DECLARE_OVERRIDE_SYSTEM_DEFAULT_CENTURY
272*0e209d39SAndroid Build Coastguard Worker 
273*0e209d39SAndroid Build Coastguard Worker  private: // default century stuff.
274*0e209d39SAndroid Build Coastguard Worker 
275*0e209d39SAndroid Build Coastguard Worker   ChineseCalendar() = delete; // default constructor not implemented
276*0e209d39SAndroid Build Coastguard Worker 
277*0e209d39SAndroid Build Coastguard Worker #ifdef __CalendarTest__
278*0e209d39SAndroid Build Coastguard Worker   friend void CalendarTest::TestChineseCalendarComputeMonthStart();
279*0e209d39SAndroid Build Coastguard Worker #endif
280*0e209d39SAndroid Build Coastguard Worker };
281*0e209d39SAndroid Build Coastguard Worker 
282*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
283*0e209d39SAndroid Build Coastguard Worker 
284*0e209d39SAndroid Build Coastguard Worker #endif
285*0e209d39SAndroid Build Coastguard Worker #endif
286