1/*
2*******************************************************************************
3* Copyright (C) 2003 - 2008, International Business Machines Corporation and  *
4* others. All Rights Reserved.                                                *
5*******************************************************************************
6*/
7
8#ifndef CECAL_H
9#define CECAL_H
10
11#include "unicode/utypes.h"
12
13#if !UCONFIG_NO_FORMATTING
14
15#include "unicode/calendar.h"
16
17U_NAMESPACE_BEGIN
18
19/**
20 * Base class for EthiopicCalendar and CopticCalendar.
21 * @internal
22 */
23class U_I18N_API CECalendar : public Calendar {
24
25protected:
26    //-------------------------------------------------------------------------
27    // Constructors...
28    //-------------------------------------------------------------------------
29
30    /**
31     * Constructs a CECalendar based on the current time in the default time zone
32     * with the given locale with the Julian epoch offiset
33     *
34     * @param aLocale  The given locale.
35     * @param success  Indicates the status of CECalendar object construction.
36     *                 Returns U_ZERO_ERROR if constructed successfully.
37     * @internal
38     */
39    CECalendar(const Locale& aLocale, UErrorCode& success);
40
41    /**
42     * Copy Constructor
43     * @internal
44     */
45    CECalendar (const CECalendar& other);
46
47    /**
48     * Destructor.
49     * @internal
50     */
51    virtual ~CECalendar();
52
53    /**
54     * Default assignment operator
55     * @param right    Calendar object to be copied
56     * @internal
57     */
58    CECalendar& operator=(const CECalendar& right);
59
60protected:
61    //-------------------------------------------------------------------------
62    // Calendar framework
63    //-------------------------------------------------------------------------
64
65    /**
66     * Return JD of start of given month/extended year
67     * @internal
68     */
69    virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const;
70
71    /**
72     * Calculate the limit for a specified type of limit and field
73     * @internal
74     */
75    virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
76
77    /**
78     * (Overrides Calendar) Return true if the current date for this Calendar is in
79     * Daylight Savings Time. Recognizes DST_OFFSET, if it is set.
80     *
81     * @param status Fill-in parameter which receives the status of this operation.
82     * @return   True if the current date for this Calendar is in Daylight Savings Time,
83     *           false, otherwise.
84     * @internal
85     */
86    virtual UBool inDaylightTime(UErrorCode&) const;
87
88    /**
89     * Returns TRUE because Coptic/Ethiopic Calendar does have a default century
90     * @internal
91     */
92    virtual UBool haveDefaultCentury() const;
93
94protected:
95    /**
96     * The Coptic and Ethiopic calendars differ only in their epochs.
97     * This method must be implemented by CECalendar subclasses to
98     * return the date offset from Julian
99     * @internal
100     */
101    virtual int32_t getJDEpochOffset() const = 0;
102
103    /**
104     * Convert an Coptic/Ethiopic year, month, and day to a Julian day.
105     *
106     * @param year the extended year
107     * @param month the month
108     * @param day the day
109     * @param jdEpochOffset the epoch offset from Julian epoch
110     * @return Julian day
111     * @internal
112     */
113    static int32_t ceToJD(int32_t year, int32_t month, int32_t date,
114        int32_t jdEpochOffset);
115
116    /**
117     * Convert a Julian day to an Coptic/Ethiopic year, month and day
118     *
119     * @param julianDay the Julian day
120     * @param jdEpochOffset the epoch offset from Julian epoch
121     * @param year receives the extended year
122     * @param month receives the month
123     * @param date receives the day
124     * @internal
125     */
126    static void jdToCE(int32_t julianDay, int32_t jdEpochOffset,
127        int32_t& year, int32_t& month, int32_t& day);
128};
129
130U_NAMESPACE_END
131
132#endif /* #if !UCONFIG_NO_FORMATTING */
133#endif
134//eof
135