1f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*
2f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *****************************************************************************
3f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Copyright (C) 2003-2008, International Business Machines Corporation
4f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * and others. All Rights Reserved.
5f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *****************************************************************************
6f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
7f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * File INDIANCAL.H
8f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *****************************************************************************
9f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
10f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
11f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#ifndef INDIANCAL_H
12f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define INDIANCAL_H
13f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
14f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/utypes.h"
15f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
16f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FORMATTING
17f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
18f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/calendar.h"
19f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
20f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_NAMESPACE_BEGIN
21f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
22f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
23f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Concrete class which provides the Indian calendar.
24f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * <P>
25f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * <code>IndianCalendar</code> is a subclass of <code>Calendar</code>
26f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * that numbers years since the begining of SAKA ERA.  This is the civil calendar
27f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * which is accepted by government of India as Indian National Calendar.
28f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The two calendars most widely used in India today are the Vikrama calendar
29f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * followed in North India and the Shalivahana or Saka calendar which is followed
30f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * in South India and Maharashtra.
31f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
32f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * A variant of the Shalivahana Calendar was reformed and standardized as the
33f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Indian National calendar in 1957.
34f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * <p>
35f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Some details of Indian National Calendar (to be implemented) :
36f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The Months
37f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Month          Length      Start date (Gregorian)
38f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * =================================================
39f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 1 Chaitra      30/31          March 22*
40f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 2 Vaisakha     31             April 21
41f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 3 Jyaistha     31             May 22
42f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 4 Asadha       31             June 22
43f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 5 Sravana      31             July 23
44f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 6 Bhadra       31             August 23
45f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 7 Asvina       30             September 23
46f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 8 Kartika      30             October 23
47f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 9 Agrahayana   30             November 22
48f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 10 Pausa       30             December 22
49f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 11 Magha       30             January 21
50f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 12 Phalguna    30             February 20
51f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
52f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * In leap years, Chaitra has 31 days and starts on March 21 instead.
53f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The leap years of Gregorian calendar and Indian National Calendar are in synchornization.
54f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * So When its a leap year in Gregorian calendar then Chaitra has 31 days.
55f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
56f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The Years
57f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Years are counted in the Saka Era, which starts its year 0 in 78AD (by gregorian calendar).
58f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * So for eg. 9th June 2006 by Gregorian Calendar, is same as 19th of Jyaistha in 1928 of Saka
59f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * era by Indian National Calendar.
60f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * <p>
61f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The Indian Calendar has only one allowable era: <code>Saka Era</code>.  If the
62f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * calendar is not in lenient mode (see <code>setLenient</code>), dates before
63f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 1/1/1 Saka Era are rejected with an <code>IllegalArgumentException</code>.
64f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * <p>
65f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
66f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
67f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
68f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
69f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)class IndianCalendar : public Calendar {
70f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)public:
71f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
72f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Useful constants for IndianCalendar.
73f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
74f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
75f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  enum EEras {
76f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /**
77f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     * Constant for Chaitra, the 1st month of the Indian year.
78f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
79f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      CHAITRA,
80f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
81f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      /**
82f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     * Constant for Vaisakha, the 2nd month of the Indian year.
83f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
84f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      VAISAKHA,
85f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
86f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      /**
87f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     * Constant for Jyaistha, the 3rd month of the Indian year.
88f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
89f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      JYAISTHA,
90f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
91f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /**
92f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     * Constant for Asadha, the 4th month of the Indian year.
93f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
94f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      ASADHA,
95f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
96f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /**
97f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     * Constant for Sravana, the 5th month of the Indian year.
98f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
99f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      SRAVANA,
100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /**
102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     * Constant for Bhadra the 6th month of the Indian year
103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      BHADRA,
105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /**
107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     * Constant for the Asvina, the 7th month of the Indian year.
108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      ASVINA,
110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /**
112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     * Constant for Kartika, the 8th month of the Indian year.
113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      KARTIKA,
115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /**
117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     * Constant for Agrahayana, the 9th month of the Indian year.
118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      AGRAHAYANA,
120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /**
122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     * Constant for Pausa, the 10th month of the Indian year.
123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      PAUSA,
125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /**
127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     * Constant for Magha, the 11th month of the Indian year.
128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      MAGHA,
130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /**
132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     * Constant for Phalguna, the 12th month of the Indian year.
133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      PHALGUNA
135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    };
136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  //-------------------------------------------------------------------------
138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  // Constructors...
139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  //-------------------------------------------------------------------------
140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Constructs an IndianCalendar based on the current time in the default time zone
143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * with the given locale.
144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *
145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @param aLocale  The given locale.
146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @param success  Indicates the status of IndianCalendar object construction.
147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *                 Returns U_ZERO_ERROR if constructed successfully.
148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @param beCivil  Whether the calendar should be civil (default-TRUE) or religious (FALSE)
149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  IndianCalendar(const Locale& aLocale, UErrorCode &success);
152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Copy Constructor
155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  IndianCalendar(const IndianCalendar& other);
158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Destructor.
161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual ~IndianCalendar();
164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Determines whether this object uses the fixed-cycle Indian civil calendar
167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * or an approximation of the religious, astronomical calendar.
168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *
169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @param beCivil   <code>CIVIL</code> to use the civil calendar,
170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *                  <code>ASTRONOMICAL</code> to use the astronomical calendar.
171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  //void setCivil(ECivil beCivil, UErrorCode &status);
174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Returns <code>true</code> if this object is using the fixed-cycle civil
177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * calendar, or <code>false</code> if using the religious, astronomical
178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * calendar.
179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  //UBool isCivil();
182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  // TODO: copy c'tor, etc
185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  // clone
187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual Calendar* clone() const;
188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) private:
190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Determine whether a year is the gregorian year a leap year
192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  //static UBool isGregorianLeap(int32_t year);
194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  //----------------------------------------------------------------------
195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  // Calendar framework
196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  //----------------------------------------------------------------------
197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) protected:
198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Return the length (in days) of the given month.
205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *
206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @param year  The year in Saka era
207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @param year  The month(0-based) in Indian year
208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Return the number of days in the given Indian year
214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual int32_t handleGetYearLength(int32_t extendedYear) const;
217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  //-------------------------------------------------------------------------
219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  // Functions for converting from field values to milliseconds....
220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  //-------------------------------------------------------------------------
221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  // Return JD of start of given month/year
223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const;
227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  //-------------------------------------------------------------------------
229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  // Functions for converting from milliseconds to field values
230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  //-------------------------------------------------------------------------
231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual int32_t handleGetExtendedYear();
236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Override Calendar to compute several fields specific to the Indian
239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * calendar system.  These are:
240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *
241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * <ul><li>ERA
242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * <li>YEAR
243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * <li>MONTH
244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * <li>DAY_OF_MONTH
245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * <li>DAY_OF_YEAR
246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * <li>EXTENDED_YEAR</ul>
247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *
248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this
249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * method is called. The getGregorianXxx() methods return Gregorian
250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * calendar equivalents for the given Julian day.
251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  // UObject stuff
256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) public:
257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @return   The class ID for this object. All objects of a given class have the
259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *           same class ID. Objects of other classes have different class IDs.
260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual UClassID getDynamicClassID(void) const;
263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Return the class ID for this class. This is useful only for comparing to a return
266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * value from getDynamicClassID(). For example:
267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *
268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *      Base* polymorphic_pointer = createPolymorphicObject();
269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *      if (polymorphic_pointer->getDynamicClassID() ==
270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *          Derived::getStaticClassID()) ...
271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *
272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @return   The class ID for all objects of this class.
273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void);
276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * return the calendar type, "buddhist".
279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *
280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @return calendar type
281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual const char * getType() const;
284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)private:
286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  IndianCalendar(); // default constructor not implemented
287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  // Default century.
289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)protected:
290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * (Overrides Calendar) Return true if the current date for this Calendar is in
293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Daylight Savings Time. Recognizes DST_OFFSET, if it is set.
294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *
295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @param status Fill-in parameter which receives the status of this operation.
296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @return   True if the current date for this Calendar is in Daylight Savings Time,
297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   *           false, otherwise.
298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual UBool inDaylightTime(UErrorCode& status) const;
301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Returns TRUE because the Indian Calendar does have a default century
305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual UBool haveDefaultCentury() const;
308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Returns the date of the start of the default century
311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @return start of century - in milliseconds since epoch, 1970
312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual UDate defaultCenturyStart() const;
315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Returns the year in which the default century begins
318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * @internal
319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  virtual int32_t defaultCenturyStartYear() const;
321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) private: // default century stuff.
323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * The system maintains a static default century start date.  This is initialized
325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * the first time it is used.  Before then, it is set to SYSTEM_DEFAULT_CENTURY to
326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * indicate an uninitialized state.  Once the system default century date and year
327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * are set, they do not change.
328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  static UDate         fgSystemDefaultCenturyStart;
330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * See documentation for systemDefaultCenturyStart.
333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  static int32_t          fgSystemDefaultCenturyStartYear;
335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Default value that indicates the defaultCenturyStartYear is unitialized
338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  static const int32_t    fgSystemDefaultCenturyYear;
340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * start of default century, as a date
343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  static const UDate        fgSystemDefaultCentury;
345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Returns the beginning date of the 100-year window that dates
348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * with 2-digit years are considered to fall within.
349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  UDate         internalGetDefaultCenturyStart(void) const;
351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Returns the first year of the 100-year window that dates with
354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * 2-digit years are considered to fall within.
355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  int32_t          internalGetDefaultCenturyStartYear(void) const;
357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /**
359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * Initializes the 100-year window that dates with 2-digit years
360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * are considered to fall within so that its start date is 80 years
361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   * before the current time.
362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)   */
363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  static void  initializeSystemDefaultCentury(void);
364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)};
365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_NAMESPACE_END
367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
373