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