Date.hpp (9587B)
1 #ifndef icu4x_Date_HPP 2 #define icu4x_Date_HPP 3 4 #include "Date.d.hpp" 5 6 #include <stdio.h> 7 #include <stdint.h> 8 #include <stddef.h> 9 #include <stdbool.h> 10 #include <memory> 11 #include <functional> 12 #include <optional> 13 #include <cstdlib> 14 #include "../diplomat_runtime.hpp" 15 #include "Calendar.hpp" 16 #include "CalendarError.hpp" 17 #include "IsoDate.hpp" 18 #include "Rfc9557ParseError.hpp" 19 #include "Weekday.hpp" 20 21 22 namespace icu4x { 23 namespace capi { 24 extern "C" { 25 26 typedef struct icu4x_Date_from_iso_in_calendar_mv1_result {union {icu4x::capi::Date* ok; icu4x::capi::CalendarError err;}; bool is_ok;} icu4x_Date_from_iso_in_calendar_mv1_result; 27 icu4x_Date_from_iso_in_calendar_mv1_result icu4x_Date_from_iso_in_calendar_mv1(int32_t year, uint8_t month, uint8_t day, const icu4x::capi::Calendar* calendar); 28 29 typedef struct icu4x_Date_from_codes_in_calendar_mv1_result {union {icu4x::capi::Date* ok; icu4x::capi::CalendarError err;}; bool is_ok;} icu4x_Date_from_codes_in_calendar_mv1_result; 30 icu4x_Date_from_codes_in_calendar_mv1_result icu4x_Date_from_codes_in_calendar_mv1(diplomat::capi::DiplomatStringView era_code, int32_t year, diplomat::capi::DiplomatStringView month_code, uint8_t day, const icu4x::capi::Calendar* calendar); 31 32 typedef struct icu4x_Date_from_rata_die_mv1_result {union {icu4x::capi::Date* ok; icu4x::capi::CalendarError err;}; bool is_ok;} icu4x_Date_from_rata_die_mv1_result; 33 icu4x_Date_from_rata_die_mv1_result icu4x_Date_from_rata_die_mv1(int64_t rd, const icu4x::capi::Calendar* calendar); 34 35 typedef struct icu4x_Date_from_string_mv1_result {union {icu4x::capi::Date* ok; icu4x::capi::Rfc9557ParseError err;}; bool is_ok;} icu4x_Date_from_string_mv1_result; 36 icu4x_Date_from_string_mv1_result icu4x_Date_from_string_mv1(diplomat::capi::DiplomatStringView v, const icu4x::capi::Calendar* calendar); 37 38 icu4x::capi::Date* icu4x_Date_to_calendar_mv1(const icu4x::capi::Date* self, const icu4x::capi::Calendar* calendar); 39 40 icu4x::capi::IsoDate* icu4x_Date_to_iso_mv1(const icu4x::capi::Date* self); 41 42 int64_t icu4x_Date_to_rata_die_mv1(const icu4x::capi::Date* self); 43 44 uint16_t icu4x_Date_day_of_year_mv1(const icu4x::capi::Date* self); 45 46 uint8_t icu4x_Date_day_of_month_mv1(const icu4x::capi::Date* self); 47 48 icu4x::capi::Weekday icu4x_Date_day_of_week_mv1(const icu4x::capi::Date* self); 49 50 uint8_t icu4x_Date_ordinal_month_mv1(const icu4x::capi::Date* self); 51 52 void icu4x_Date_month_code_mv1(const icu4x::capi::Date* self, diplomat::capi::DiplomatWrite* write); 53 54 uint8_t icu4x_Date_month_number_mv1(const icu4x::capi::Date* self); 55 56 bool icu4x_Date_month_is_leap_mv1(const icu4x::capi::Date* self); 57 58 int32_t icu4x_Date_era_year_or_related_iso_mv1(const icu4x::capi::Date* self); 59 60 int32_t icu4x_Date_extended_year_mv1(const icu4x::capi::Date* self); 61 62 void icu4x_Date_era_mv1(const icu4x::capi::Date* self, diplomat::capi::DiplomatWrite* write); 63 64 uint8_t icu4x_Date_months_in_year_mv1(const icu4x::capi::Date* self); 65 66 uint8_t icu4x_Date_days_in_month_mv1(const icu4x::capi::Date* self); 67 68 uint16_t icu4x_Date_days_in_year_mv1(const icu4x::capi::Date* self); 69 70 icu4x::capi::Calendar* icu4x_Date_calendar_mv1(const icu4x::capi::Date* self); 71 72 void icu4x_Date_destroy_mv1(Date* self); 73 74 } // extern "C" 75 } // namespace capi 76 } // namespace 77 78 inline diplomat::result<std::unique_ptr<icu4x::Date>, icu4x::CalendarError> icu4x::Date::from_iso_in_calendar(int32_t year, uint8_t month, uint8_t day, const icu4x::Calendar& calendar) { 79 auto result = icu4x::capi::icu4x_Date_from_iso_in_calendar_mv1(year, 80 month, 81 day, 82 calendar.AsFFI()); 83 return result.is_ok ? diplomat::result<std::unique_ptr<icu4x::Date>, icu4x::CalendarError>(diplomat::Ok<std::unique_ptr<icu4x::Date>>(std::unique_ptr<icu4x::Date>(icu4x::Date::FromFFI(result.ok)))) : diplomat::result<std::unique_ptr<icu4x::Date>, icu4x::CalendarError>(diplomat::Err<icu4x::CalendarError>(icu4x::CalendarError::FromFFI(result.err))); 84 } 85 86 inline diplomat::result<std::unique_ptr<icu4x::Date>, icu4x::CalendarError> icu4x::Date::from_codes_in_calendar(std::string_view era_code, int32_t year, std::string_view month_code, uint8_t day, const icu4x::Calendar& calendar) { 87 auto result = icu4x::capi::icu4x_Date_from_codes_in_calendar_mv1({era_code.data(), era_code.size()}, 88 year, 89 {month_code.data(), month_code.size()}, 90 day, 91 calendar.AsFFI()); 92 return result.is_ok ? diplomat::result<std::unique_ptr<icu4x::Date>, icu4x::CalendarError>(diplomat::Ok<std::unique_ptr<icu4x::Date>>(std::unique_ptr<icu4x::Date>(icu4x::Date::FromFFI(result.ok)))) : diplomat::result<std::unique_ptr<icu4x::Date>, icu4x::CalendarError>(diplomat::Err<icu4x::CalendarError>(icu4x::CalendarError::FromFFI(result.err))); 93 } 94 95 inline diplomat::result<std::unique_ptr<icu4x::Date>, icu4x::CalendarError> icu4x::Date::from_rata_die(int64_t rd, const icu4x::Calendar& calendar) { 96 auto result = icu4x::capi::icu4x_Date_from_rata_die_mv1(rd, 97 calendar.AsFFI()); 98 return result.is_ok ? diplomat::result<std::unique_ptr<icu4x::Date>, icu4x::CalendarError>(diplomat::Ok<std::unique_ptr<icu4x::Date>>(std::unique_ptr<icu4x::Date>(icu4x::Date::FromFFI(result.ok)))) : diplomat::result<std::unique_ptr<icu4x::Date>, icu4x::CalendarError>(diplomat::Err<icu4x::CalendarError>(icu4x::CalendarError::FromFFI(result.err))); 99 } 100 101 inline diplomat::result<std::unique_ptr<icu4x::Date>, icu4x::Rfc9557ParseError> icu4x::Date::from_string(std::string_view v, const icu4x::Calendar& calendar) { 102 auto result = icu4x::capi::icu4x_Date_from_string_mv1({v.data(), v.size()}, 103 calendar.AsFFI()); 104 return result.is_ok ? diplomat::result<std::unique_ptr<icu4x::Date>, icu4x::Rfc9557ParseError>(diplomat::Ok<std::unique_ptr<icu4x::Date>>(std::unique_ptr<icu4x::Date>(icu4x::Date::FromFFI(result.ok)))) : diplomat::result<std::unique_ptr<icu4x::Date>, icu4x::Rfc9557ParseError>(diplomat::Err<icu4x::Rfc9557ParseError>(icu4x::Rfc9557ParseError::FromFFI(result.err))); 105 } 106 107 inline std::unique_ptr<icu4x::Date> icu4x::Date::to_calendar(const icu4x::Calendar& calendar) const { 108 auto result = icu4x::capi::icu4x_Date_to_calendar_mv1(this->AsFFI(), 109 calendar.AsFFI()); 110 return std::unique_ptr<icu4x::Date>(icu4x::Date::FromFFI(result)); 111 } 112 113 inline std::unique_ptr<icu4x::IsoDate> icu4x::Date::to_iso() const { 114 auto result = icu4x::capi::icu4x_Date_to_iso_mv1(this->AsFFI()); 115 return std::unique_ptr<icu4x::IsoDate>(icu4x::IsoDate::FromFFI(result)); 116 } 117 118 inline int64_t icu4x::Date::to_rata_die() const { 119 auto result = icu4x::capi::icu4x_Date_to_rata_die_mv1(this->AsFFI()); 120 return result; 121 } 122 123 inline uint16_t icu4x::Date::day_of_year() const { 124 auto result = icu4x::capi::icu4x_Date_day_of_year_mv1(this->AsFFI()); 125 return result; 126 } 127 128 inline uint8_t icu4x::Date::day_of_month() const { 129 auto result = icu4x::capi::icu4x_Date_day_of_month_mv1(this->AsFFI()); 130 return result; 131 } 132 133 inline icu4x::Weekday icu4x::Date::day_of_week() const { 134 auto result = icu4x::capi::icu4x_Date_day_of_week_mv1(this->AsFFI()); 135 return icu4x::Weekday::FromFFI(result); 136 } 137 138 inline uint8_t icu4x::Date::ordinal_month() const { 139 auto result = icu4x::capi::icu4x_Date_ordinal_month_mv1(this->AsFFI()); 140 return result; 141 } 142 143 inline std::string icu4x::Date::month_code() const { 144 std::string output; 145 diplomat::capi::DiplomatWrite write = diplomat::WriteFromString(output); 146 icu4x::capi::icu4x_Date_month_code_mv1(this->AsFFI(), 147 &write); 148 return output; 149 } 150 151 inline uint8_t icu4x::Date::month_number() const { 152 auto result = icu4x::capi::icu4x_Date_month_number_mv1(this->AsFFI()); 153 return result; 154 } 155 156 inline bool icu4x::Date::month_is_leap() const { 157 auto result = icu4x::capi::icu4x_Date_month_is_leap_mv1(this->AsFFI()); 158 return result; 159 } 160 161 inline int32_t icu4x::Date::era_year_or_related_iso() const { 162 auto result = icu4x::capi::icu4x_Date_era_year_or_related_iso_mv1(this->AsFFI()); 163 return result; 164 } 165 166 inline int32_t icu4x::Date::extended_year() const { 167 auto result = icu4x::capi::icu4x_Date_extended_year_mv1(this->AsFFI()); 168 return result; 169 } 170 171 inline std::string icu4x::Date::era() const { 172 std::string output; 173 diplomat::capi::DiplomatWrite write = diplomat::WriteFromString(output); 174 icu4x::capi::icu4x_Date_era_mv1(this->AsFFI(), 175 &write); 176 return output; 177 } 178 179 inline uint8_t icu4x::Date::months_in_year() const { 180 auto result = icu4x::capi::icu4x_Date_months_in_year_mv1(this->AsFFI()); 181 return result; 182 } 183 184 inline uint8_t icu4x::Date::days_in_month() const { 185 auto result = icu4x::capi::icu4x_Date_days_in_month_mv1(this->AsFFI()); 186 return result; 187 } 188 189 inline uint16_t icu4x::Date::days_in_year() const { 190 auto result = icu4x::capi::icu4x_Date_days_in_year_mv1(this->AsFFI()); 191 return result; 192 } 193 194 inline std::unique_ptr<icu4x::Calendar> icu4x::Date::calendar() const { 195 auto result = icu4x::capi::icu4x_Date_calendar_mv1(this->AsFFI()); 196 return std::unique_ptr<icu4x::Calendar>(icu4x::Calendar::FromFFI(result)); 197 } 198 199 inline const icu4x::capi::Date* icu4x::Date::AsFFI() const { 200 return reinterpret_cast<const icu4x::capi::Date*>(this); 201 } 202 203 inline icu4x::capi::Date* icu4x::Date::AsFFI() { 204 return reinterpret_cast<icu4x::capi::Date*>(this); 205 } 206 207 inline const icu4x::Date* icu4x::Date::FromFFI(const icu4x::capi::Date* ptr) { 208 return reinterpret_cast<const icu4x::Date*>(ptr); 209 } 210 211 inline icu4x::Date* icu4x::Date::FromFFI(icu4x::capi::Date* ptr) { 212 return reinterpret_cast<icu4x::Date*>(ptr); 213 } 214 215 inline void icu4x::Date::operator delete(void* ptr) { 216 icu4x::capi::icu4x_Date_destroy_mv1(reinterpret_cast<icu4x::capi::Date*>(ptr)); 217 } 218 219 220 #endif // icu4x_Date_HPP