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 HEBRWCAL.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*   11/26/2003  srl          copied from buddhcal.h
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef HEBRWCAL_H
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define HEBRWCAL_H
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/calendar.h"
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/gregocal.h"
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>HebrewCalendar</code> is a subclass of <code>Calendar</code>
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that that implements the traditional Hebrew calendar.
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is the civil calendar in Israel and the liturgical calendar
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of the Jewish faith worldwide.
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The Hebrew calendar is lunisolar and thus has a number of interesting
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * properties that distinguish it from the Gregorian.  Months start
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * on the day of (an arithmetic approximation of) each new moon.  Since the
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * solar year (approximately 365.24 days) is not an even multiple of
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the lunar month (approximately 29.53 days) an extra "leap month" is
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * inserted in 7 out of every 19 years.  To make matters even more
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * interesting, the start of a year can be delayed by up to three days
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in order to prevent certain holidays from falling on the Sabbath and
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to prevent certain illegal year lengths.  Finally, the lengths of certain
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * months can vary depending on the number of days in the year.
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The leap month is known as "Adar 1" and is inserted between the
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * months of Shevat and Adar in leap years.  Since the leap month does
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * not come at the end of the year, calculations involving
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * month numbers are particularly complex.  Users of this class should
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * make sure to use the {@link #roll roll} and {@link #add add} methods
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * rather than attempting to perform date arithmetic by manipulating
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the fields directly.
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <b>Note:</b> In the traditional Hebrew calendar, days start at sunset.
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * However, in order to keep the time fields in this class
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * synchronized with those of the other calendars and with local clock time,
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * we treat days and months as beginning at midnight,
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * roughly 6 hours after the corresponding sunset.
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If you are interested in more information on the rules behind the Hebrew
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * calendar, see one of the following references:
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <ul>
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <li>"<a href="http://www.amazon.com/exec/obidos/ASIN/0521564743">Calendrical Calculations</a>",
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      by Nachum Dershowitz & Edward Reingold, Cambridge University Press, 1997, pages 85-91.
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <li>Hebrew Calendar Science and Myths,
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      <a href="http://www.geocities.com/Athens/1584/">
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      http://www.geocities.com/Athens/1584/</a>
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <li>The Calendar FAQ,
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      <a href="http://www.faqs.org/faqs/calendars/faq/">
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      http://www.faqs.org/faqs/calendars/faq/</a>
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </ul>
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see com.ibm.icu.util.GregorianCalendar
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @author Laura Werner
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @author Alan Liu
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @author Steven R. Loomis
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass U_I18N_API HebrewCalendar : public Calendar {
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /**
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * Useful constants for HebrewCalendar.
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @internal
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  enum EEras {
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constant for Tishri, the 1st month of the Hebrew year.
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      TISHRI,
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      /**
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constant for Heshvan, the 2nd month of the Hebrew year.
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      HESHVAN,
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      /**
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constant for Kislev, the 3rd month of the Hebrew year.
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      KISLEV,
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constant for Tevet, the 4th month of the Hebrew year.
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      TEVET,
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constant for Shevat, the 5th month of the Hebrew year.
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      SHEVAT,
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constant for Adar I, the 6th month of the Hebrew year
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * (present in leap years only). In non-leap years, the calendar
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * jumps from Shevat (5th month) to Adar (7th month).
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      ADAR_1,
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constant for the Adar, the 7th month of the Hebrew year.
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      ADAR,
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constant for Nisan, the 8th month of the Hebrew year.
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      NISAN,
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constant for Iyar, the 9th month of the Hebrew year.
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      IYAR,
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constant for Sivan, the 10th month of the Hebrew year.
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      SIVAN,
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constant for Tammuz, the 11th month of the Hebrew year.
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      TAMUZ,
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constant for Av, the 12th month of the Hebrew year.
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      AV,
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constant for Elul, the 13th month of the Hebrew year.
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      ELUL
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constructs a HebrewCalendar based on the current time in the default time zone
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * with the given locale.
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param aLocale  The given locale.
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param success  Indicates the status of HebrewCalendar object construction.
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                 Returns U_ZERO_ERROR if constructed successfully.
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    HebrewCalendar(const Locale& aLocale, UErrorCode& success);
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Destructor
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual ~HebrewCalendar();
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Copy constructor
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param source    the object to be copied.
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    HebrewCalendar(const HebrewCalendar& source);
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Default assignment operator
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param right    the object to be copied.
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    HebrewCalendar& operator=(const HebrewCalendar& right);
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Create and return a polymorphic copy of this calendar.
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return    return a polymorphic copy of this calendar.
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual Calendar* clone(void) const;
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * override. This method is to implement a simple version of RTTI, since not all C++
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * this method.
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return   The class ID for this object. All objects of a given class have the
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *           same class ID. Objects of other classes have different class IDs.
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UClassID getDynamicClassID(void) const;
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return the class ID for this class. This is useful only for comparing to a return
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * value from getDynamicClassID(). For example:
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *      Base* polymorphic_pointer = createPolymorphicObject();
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *      if (polymorphic_pointer->getDynamicClassID() ==
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *          Derived::getStaticClassID()) ...
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return   The class ID for all objects of this class.
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UClassID U_EXPORT2 getStaticClassID(void);
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * return the calendar type, "hebrew".
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return calendar type
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual const char * getType() const;
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Calendar API
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org public:
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * (Overrides Calendar) UDate Arithmetic function. Adds the specified (signed) amount
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * of time to the given time field, based on the calendar's rules.  For more
2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * information, see the documentation for Calendar::add().
2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param field   The time field.
2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param amount  The amount of date or time to be added to the field.
2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status  Output param set to success/failure code on exit. If any value
2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                previously set in the time field is invalid, this will be set to
2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                an error status.
2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void add(UCalendarDateFields field, int32_t amount, UErrorCode& status);
2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @deprecated ICU 2.6 use UCalendarDateFields instead of EDateFields
2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void add(EDateFields field, int32_t amount, UErrorCode& status);
2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * (Overrides Calendar) Rolls up or down by the given amount in the specified field.
2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * For more information, see the documentation for Calendar::roll().
2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param field   The time field.
2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param amount  Indicates amount to roll.
2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status  Output param set to success/failure code on exit. If any value
2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                previously set in the time field is invalid, this will be set to
2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                an error status.
2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * (Overrides Calendar) Rolls up or down by the given amount in the specified field.
2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * For more information, see the documentation for Calendar::roll().
2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param field   The time field.
2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param amount  Indicates amount to roll.
2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status  Output param set to success/failure code on exit. If any value
2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                previously set in the time field is invalid, this will be set to
2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                an error status.
2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @deprecated ICU 2.6. Use roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead.
2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org`     */
2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UBool isLeapYear(int32_t year) ;
2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org protected:
2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Subclass API for defining limits of different types.
2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Subclasses must implement this method to return limits for the
2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * following fields:
2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <pre>UCAL_ERA
2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * UCAL_YEAR
2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * UCAL_MONTH
2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * UCAL_WEEK_OF_YEAR
2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * UCAL_WEEK_OF_MONTH
2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * UCAL_DATE (DAY_OF_MONTH on Java)
2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * UCAL_DAY_OF_YEAR
2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * UCAL_DAY_OF_WEEK_IN_MONTH
2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * UCAL_YEAR_WOY
2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * UCAL_EXTENDED_YEAR</pre>
2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param field one of the above field numbers
3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param limitType one of <code>MINIMUM</code>, <code>GREATEST_MINIMUM</code>,
3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code>
3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return the number of days in the given month of the given extended
3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * year of this calendar system.  Subclasses should override this
3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * method if they can provide a more correct or more efficient
3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * implementation than the default implementation in Calendar.
3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return the number of days in the given extended year of this
3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * calendar system.  Subclasses should override this method if they can
3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * provide a more correct or more efficient implementation than the
3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * default implementation in Calendar.
3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t handleGetYearLength(int32_t eyear) const;
3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Subclasses may override this method to compute several fields
3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * specific to each calendar system.  These are:
3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <ul><li>ERA
3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <li>YEAR
3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <li>MONTH
3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <li>DAY_OF_MONTH
3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <li>DAY_OF_YEAR
3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <li>EXTENDED_YEAR</ul>
3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <p>The GregorianCalendar implementation implements
3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * a calendar with the specified Julian/Gregorian cutover date.
3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return the extended year defined by the current fields.  This will
3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * use the UCAL_EXTENDED_YEAR field or the UCAL_YEAR and supra-year fields (such
3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * as UCAL_ERA) specific to the calendar system, depending on which set of
3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * fields is newer.
3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return the extended year
3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t handleGetExtendedYear();
3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return the Julian day number of day before the first day of the
3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * given month in the given extended year.  Subclasses should override
3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * this method to implement their calendar system.
3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param eyear the extended year
3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param month the zero-based month, or 0 if useMonth is false
3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param useMonth if false, compute the day before the first day of
3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the given year, otherwise, compute the day before the first day of
3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the given month
3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param return the Julian day number of the day before the first
3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * day of the given month and year
3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                                   UBool useMonth) const;
3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org protected:
3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /**
3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * (Overrides Calendar) Return true if the current date for this Calendar is in
3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * Daylight Savings Time. Recognizes DST_OFFSET, if it is set.
3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   *
3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @param status Fill-in parameter which receives the status of this operation.
3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @return   True if the current date for this Calendar is in Daylight Savings Time,
3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   *           false, otherwise.
3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @internal
3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  virtual UBool inDaylightTime(UErrorCode& status) const;
3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns TRUE because the Hebrew Calendar does have a default century
3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UBool haveDefaultCentury() const;
3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns the date of the start of the default century
3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return start of century - in milliseconds since epoch, 1970
3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UDate defaultCenturyStart() const;
3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns the year in which the default century begins
3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t defaultCenturyStartYear() const;
3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org private: // Calendar-specific implementation
3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Finds the day # of the first day in the given Hebrew year.
4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * To do this, we want to calculate the time of the Tishri 1 new moon
4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * in that year.
4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <p>
4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The algorithm here is similar to ones described in a number of
4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * references, including:
4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <ul>
4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <li>"Calendrical Calculations", by Nachum Dershowitz & Edward Reingold,
4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *     Cambridge University Press, 1997, pages 85-91.
4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <li>Hebrew Calendar Science and Myths,
4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *     <a href="http://www.geocities.com/Athens/1584/">
4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *     http://www.geocities.com/Athens/1584/</a>
4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <li>The Calendar FAQ,
4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *      <a href="http://www.faqs.org/faqs/calendars/faq/">
4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *      http://www.faqs.org/faqs/calendars/faq/</a>
4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * </ul>
4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param year extended year
4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return day number (JD)
4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static int32_t startOfYear(int32_t year, UErrorCode& status);
4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static int32_t absoluteDayToDayOfWeek(int32_t day) ;
4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t yearType(int32_t year) const;
4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal
4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static int32_t monthsInYear(int32_t year) ;
4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END
4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */
4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//eof
4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
444