ICU4X
International Components for Unicode
Loading...
Searching...
No Matches
ICU4XDate.hpp
Go to the documentation of this file.
1#ifndef ICU4XDate_HPP
2#define ICU4XDate_HPP
3#include <stdint.h>
4#include <stddef.h>
5#include <stdbool.h>
6#include <algorithm>
7#include <memory>
8#include <variant>
9#include <optional>
10#include "diplomat_runtime.hpp"
11
12#include "ICU4XDate.h"
13
14class ICU4XCalendar;
15class ICU4XDate;
16#include "ICU4XError.hpp"
17class ICU4XIsoDate;
18#include "ICU4XIsoWeekday.hpp"
20struct ICU4XWeekOf;
21
25struct ICU4XDateDeleter {
26 void operator()(capi::ICU4XDate* l) const noexcept {
27 capi::ICU4XDate_destroy(l);
28 }
29};
30
36class ICU4XDate {
37 public:
38
45 static diplomat::result<ICU4XDate, ICU4XError> create_from_iso_in_calendar(int32_t year, uint8_t month, uint8_t day, const ICU4XCalendar& calendar);
46
52 static diplomat::result<ICU4XDate, ICU4XError> create_from_codes_in_calendar(const std::string_view era_code, int32_t year, const std::string_view month_code, uint8_t day, const ICU4XCalendar& calendar);
53
60
66 ICU4XIsoDate to_iso() const;
67
73 uint16_t day_of_year() const;
74
80 uint32_t day_of_month() const;
81
88
97 uint32_t week_of_month(ICU4XIsoWeekday first_weekday) const;
98
105
115 uint32_t ordinal_month() const;
116
124
132
138 int32_t year_in_era() const;
139
147 template<typename W> diplomat::result<std::monostate, ICU4XError> era_to_writeable(W& write) const;
148
157
163 uint8_t months_in_year() const;
164
170 uint8_t days_in_month() const;
171
177 uint16_t days_in_year() const;
178
184 ICU4XCalendar calendar() const;
185 inline const capi::ICU4XDate* AsFFI() const { return this->inner.get(); }
186 inline capi::ICU4XDate* AsFFIMut() { return this->inner.get(); }
187 inline explicit ICU4XDate(capi::ICU4XDate* i) : inner(i) {}
188 ICU4XDate() = default;
189 ICU4XDate(ICU4XDate&&) noexcept = default;
190 ICU4XDate& operator=(ICU4XDate&& other) noexcept = default;
191 private:
192 std::unique_ptr<capi::ICU4XDate, ICU4XDateDeleter> inner;
193};
194
195#include "ICU4XCalendar.hpp"
196#include "ICU4XIsoDate.hpp"
198#include "ICU4XWeekOf.hpp"
199
201 auto diplomat_result_raw_out_value = capi::ICU4XDate_create_from_iso_in_calendar(year, month, day, calendar.AsFFI());
202 diplomat::result<ICU4XDate, ICU4XError> diplomat_result_out_value;
203 if (diplomat_result_raw_out_value.is_ok) {
204 diplomat_result_out_value = diplomat::Ok<ICU4XDate>(ICU4XDate(diplomat_result_raw_out_value.ok));
205 } else {
206 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
207 }
208 return diplomat_result_out_value;
209}
210inline diplomat::result<ICU4XDate, ICU4XError> ICU4XDate::create_from_codes_in_calendar(const std::string_view era_code, int32_t year, const std::string_view month_code, uint8_t day, const ICU4XCalendar& calendar) {
211 auto diplomat_result_raw_out_value = capi::ICU4XDate_create_from_codes_in_calendar(era_code.data(), era_code.size(), year, month_code.data(), month_code.size(), day, calendar.AsFFI());
212 diplomat::result<ICU4XDate, ICU4XError> diplomat_result_out_value;
213 if (diplomat_result_raw_out_value.is_ok) {
214 diplomat_result_out_value = diplomat::Ok<ICU4XDate>(ICU4XDate(diplomat_result_raw_out_value.ok));
215 } else {
216 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
217 }
218 return diplomat_result_out_value;
219}
221 return ICU4XDate(capi::ICU4XDate_to_calendar(this->inner.get(), calendar.AsFFI()));
222}
224 return ICU4XIsoDate(capi::ICU4XDate_to_iso(this->inner.get()));
225}
226inline uint16_t ICU4XDate::day_of_year() const {
227 return capi::ICU4XDate_day_of_year(this->inner.get());
228}
229inline uint32_t ICU4XDate::day_of_month() const {
230 return capi::ICU4XDate_day_of_month(this->inner.get());
231}
233 return static_cast<ICU4XIsoWeekday>(capi::ICU4XDate_day_of_week(this->inner.get()));
234}
235inline uint32_t ICU4XDate::week_of_month(ICU4XIsoWeekday first_weekday) const {
236 return capi::ICU4XDate_week_of_month(this->inner.get(), static_cast<capi::ICU4XIsoWeekday>(first_weekday));
237}
239 auto diplomat_result_raw_out_value = capi::ICU4XDate_week_of_year(this->inner.get(), calculator.AsFFI());
240 diplomat::result<ICU4XWeekOf, ICU4XError> diplomat_result_out_value;
241 if (diplomat_result_raw_out_value.is_ok) {
242 capi::ICU4XWeekOf diplomat_raw_struct_out_value = diplomat_result_raw_out_value.ok;
243 diplomat_result_out_value = diplomat::Ok<ICU4XWeekOf>(ICU4XWeekOf{ .week = std::move(diplomat_raw_struct_out_value.week), .unit = std::move(static_cast<ICU4XWeekRelativeUnit>(diplomat_raw_struct_out_value.unit)) });
244 } else {
245 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
246 }
247 return diplomat_result_out_value;
248}
249inline uint32_t ICU4XDate::ordinal_month() const {
250 return capi::ICU4XDate_ordinal_month(this->inner.get());
251}
253 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
254 auto diplomat_result_raw_out_value = capi::ICU4XDate_month_code(this->inner.get(), &write_writer);
255 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
256 if (diplomat_result_raw_out_value.is_ok) {
257 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
258 } else {
259 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
260 }
261 return diplomat_result_out_value;
262}
264 std::string diplomat_writeable_string;
265 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
266 auto diplomat_result_raw_out_value = capi::ICU4XDate_month_code(this->inner.get(), &diplomat_writeable_out);
267 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
268 if (diplomat_result_raw_out_value.is_ok) {
269 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
270 } else {
271 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
272 }
273 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
274}
275inline int32_t ICU4XDate::year_in_era() const {
276 return capi::ICU4XDate_year_in_era(this->inner.get());
277}
279 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
280 auto diplomat_result_raw_out_value = capi::ICU4XDate_era(this->inner.get(), &write_writer);
281 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
282 if (diplomat_result_raw_out_value.is_ok) {
283 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
284 } else {
285 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
286 }
287 return diplomat_result_out_value;
288}
290 std::string diplomat_writeable_string;
291 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
292 auto diplomat_result_raw_out_value = capi::ICU4XDate_era(this->inner.get(), &diplomat_writeable_out);
293 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
294 if (diplomat_result_raw_out_value.is_ok) {
295 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
296 } else {
297 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
298 }
299 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
300}
301inline uint8_t ICU4XDate::months_in_year() const {
302 return capi::ICU4XDate_months_in_year(this->inner.get());
303}
304inline uint8_t ICU4XDate::days_in_month() const {
305 return capi::ICU4XDate_days_in_month(this->inner.get());
306}
307inline uint16_t ICU4XDate::days_in_year() const {
308 return capi::ICU4XDate_days_in_year(this->inner.get());
309}
311 return ICU4XCalendar(capi::ICU4XDate_calendar(this->inner.get()));
312}
313#endif
ICU4XError
Definition ICU4XError.hpp:23
ICU4XIsoWeekday
Definition ICU4XIsoWeekday.hpp:15
ICU4XWeekRelativeUnit
Definition ICU4XWeekRelativeUnit.hpp:19
Definition ICU4XCalendar.hpp:32
Definition ICU4XDate.hpp:36
ICU4XIsoDate to_iso() const
Definition ICU4XDate.hpp:223
uint32_t week_of_month(ICU4XIsoWeekday first_weekday) const
Definition ICU4XDate.hpp:235
ICU4XDate()=default
ICU4XDate(ICU4XDate &&) noexcept=default
uint32_t day_of_month() const
Definition ICU4XDate.hpp:229
uint8_t months_in_year() const
Definition ICU4XDate.hpp:301
uint32_t ordinal_month() const
Definition ICU4XDate.hpp:249
ICU4XDate(capi::ICU4XDate *i)
Definition ICU4XDate.hpp:187
ICU4XDate to_calendar(const ICU4XCalendar &calendar) const
Definition ICU4XDate.hpp:220
diplomat::result< std::monostate, ICU4XError > era_to_writeable(W &write) const
Definition ICU4XDate.hpp:278
diplomat::result< ICU4XWeekOf, ICU4XError > week_of_year(const ICU4XWeekCalculator &calculator) const
Definition ICU4XDate.hpp:238
uint8_t days_in_month() const
Definition ICU4XDate.hpp:304
static diplomat::result< ICU4XDate, ICU4XError > create_from_codes_in_calendar(const std::string_view era_code, int32_t year, const std::string_view month_code, uint8_t day, const ICU4XCalendar &calendar)
Definition ICU4XDate.hpp:210
ICU4XCalendar calendar() const
Definition ICU4XDate.hpp:310
diplomat::result< std::string, ICU4XError > era() const
Definition ICU4XDate.hpp:289
uint16_t day_of_year() const
Definition ICU4XDate.hpp:226
int32_t year_in_era() const
Definition ICU4XDate.hpp:275
ICU4XIsoWeekday day_of_week() const
Definition ICU4XDate.hpp:232
diplomat::result< std::string, ICU4XError > month_code() const
Definition ICU4XDate.hpp:263
uint16_t days_in_year() const
Definition ICU4XDate.hpp:307
static diplomat::result< ICU4XDate, ICU4XError > create_from_iso_in_calendar(int32_t year, uint8_t month, uint8_t day, const ICU4XCalendar &calendar)
Definition ICU4XDate.hpp:200
diplomat::result< std::monostate, ICU4XError > month_code_to_writeable(W &write) const
Definition ICU4XDate.hpp:252
Definition ICU4XIsoDate.hpp:36
Definition ICU4XWeekCalculator.hpp:35
Definition diplomat_runtime.hpp:84
result< T2, E > replace_ok(T2 &&t)
Definition diplomat_runtime.hpp:125
capi::DiplomatWriteable WriteableFromString(std::string &string)
Definition diplomat_runtime.hpp:31
Definition ICU4XWeekOf.hpp:20
Definition diplomat_runtime.hpp:69
Definition diplomat_runtime.hpp:55