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