@@ -32,7 +32,9 @@ using namespace boost::posix_time;
32
32
33
33
namespace ecf {
34
34
35
- long julian_day_to_calendar_date (long jdate) {
35
+ namespace implementation {
36
+
37
+ CalendarDate::value_t julian_day_to_calendar_date (long jdate) {
36
38
long x = 0 , y = 0 , d = 0 , m = 0 , e = 0 ;
37
39
long day = 0 , month = 0 , year = 0 ;
38
40
@@ -62,7 +64,7 @@ long julian_day_to_calendar_date(long jdate) {
62
64
return year * 10000 + month * 100 + day;
63
65
}
64
66
65
- long calendar_date_to_julian_day (long ddate) {
67
+ JulianDay:: value_t calendar_date_to_julian_day (long ddate) {
66
68
long m1 = 0 , y1 = 0 , a = 0 , b = 0 , c = 0 , d = 0 , j1 = 0 ;
67
69
68
70
long month = 0 , day = 0 , year = 0 ;
@@ -90,6 +92,113 @@ long calendar_date_to_julian_day(long ddate) {
90
92
return j1 ;
91
93
}
92
94
95
+ } // namespace implementation
96
+
97
+ JulianDay CalendarDate::as_julian_day () const {
98
+ return JulianDay (implementation::calendar_date_to_julian_day (value_));
99
+ }
100
+
101
+ CalendarDate JulianDay::as_calendar_date () const {
102
+ return CalendarDate (implementation::julian_day_to_calendar_date (value_));
103
+ }
104
+
105
+ bool operator ==(const CalendarDate& lhs, const CalendarDate& rhs) {
106
+ return lhs.value () == rhs.value ();
107
+ }
108
+
109
+ bool operator ==(const CalendarDate& lhs, const JulianDay& rhs) {
110
+ return lhs.as_julian_day () == rhs;
111
+ }
112
+
113
+ bool operator ==(const JulianDay& lhs, const CalendarDate& rhs) {
114
+ return lhs == rhs.as_julian_day ();
115
+ }
116
+
117
+ bool operator ==(const JulianDay& lhs, const JulianDay& rhs) {
118
+ return lhs.value () == rhs.value ();
119
+ }
120
+
121
+ bool operator <(const CalendarDate& lhs, const CalendarDate& rhs) {
122
+ return lhs.as_julian_day () < rhs.as_julian_day ();
123
+ }
124
+
125
+ bool operator <=(const CalendarDate& lhs, const CalendarDate& rhs) {
126
+ return lhs.as_julian_day () <= rhs.as_julian_day ();
127
+ }
128
+
129
+ bool operator >(const CalendarDate& lhs, const CalendarDate& rhs) {
130
+ return lhs.as_julian_day () > rhs.as_julian_day ();
131
+ }
132
+
133
+ bool operator >=(const CalendarDate& lhs, const CalendarDate& rhs) {
134
+ return lhs.as_julian_day () >= rhs.as_julian_day ();
135
+ }
136
+
137
+ bool operator <(const JulianDay& lhs, const JulianDay& rhs) {
138
+ return lhs.value () < rhs.value ();
139
+ }
140
+
141
+ bool operator <=(const JulianDay& lhs, const JulianDay& rhs) {
142
+ return lhs.value () <= rhs.value ();
143
+ }
144
+
145
+ bool operator >(const JulianDay& lhs, const JulianDay& rhs) {
146
+ return lhs.value () > rhs.value ();
147
+ }
148
+
149
+ bool operator >=(const JulianDay& lhs, const JulianDay& rhs) {
150
+ return lhs.value () >= rhs.value ();
151
+ }
152
+
153
+ CalendarDate& operator +=(CalendarDate& lhs, CalendarDate::value_t rhs) {
154
+ auto jd = lhs.as_julian_day () + rhs;
155
+ lhs.value_ = jd.as_calendar_date ().value ();
156
+ return lhs;
157
+ }
158
+
159
+ CalendarDate& operator -=(CalendarDate& lhs, CalendarDate::value_t rhs) {
160
+ auto jd = lhs.as_julian_day () - rhs;
161
+ lhs.value_ = jd.as_calendar_date ().value ();
162
+ return lhs;
163
+ }
164
+
165
+ CalendarDate operator +(const CalendarDate& lhs, CalendarDate::value_t rhs) {
166
+ auto result = lhs;
167
+ return result += rhs;
168
+ }
169
+
170
+ CalendarDate operator -(const CalendarDate& lhs, CalendarDate::value_t rhs) {
171
+ auto result = lhs;
172
+ return result -= rhs;
173
+ }
174
+
175
+ JulianDay& operator +=(JulianDay& lhs, JulianDay::value_t rhs) {
176
+ lhs.value_ += rhs;
177
+ return lhs;
178
+ }
179
+
180
+ JulianDay& operator -=(JulianDay& lhs, JulianDay::value_t rhs) {
181
+ lhs.value_ -= rhs;
182
+ return lhs;
183
+ }
184
+
185
+ JulianDay operator +(const JulianDay& lhs, JulianDay::value_t rhs) {
186
+ return JulianDay (lhs.value () + rhs);
187
+ }
188
+
189
+ JulianDay operator -(const JulianDay& lhs, JulianDay::value_t rhs) {
190
+ return JulianDay (lhs.value () - rhs);
191
+ }
192
+
193
+ std::ostream& operator <<(std::ostream& os, const CalendarDate& cd) {
194
+ os << cd.value ();
195
+ return os;
196
+ }
197
+ std::ostream& operator <<(std::ostream& os, const JulianDay& jd) {
198
+ os << jd.value ();
199
+ return os;
200
+ }
201
+
93
202
Calendar::Calendar () = default ;
94
203
95
204
Calendar::Calendar (const Calendar& rhs) {
0 commit comments