ICU4X
International Components for Unicode
Loading...
Searching...
No Matches
Decimal.hpp
Go to the documentation of this file.
1#ifndef icu4x_Decimal_HPP
2#define icu4x_Decimal_HPP
3
4#include "Decimal.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>
15#include "DecimalLimitError.hpp"
16#include "DecimalParseError.hpp"
18#include "DecimalSign.hpp"
21
22
23namespace icu4x {
24namespace capi {
25 extern "C" {
26
27 icu4x::capi::Decimal* icu4x_Decimal_from_int32_mv1(int32_t v);
28
29 icu4x::capi::Decimal* icu4x_Decimal_from_uint32_mv1(uint32_t v);
30
31 icu4x::capi::Decimal* icu4x_Decimal_from_int64_mv1(int64_t v);
32
33 icu4x::capi::Decimal* icu4x_Decimal_from_uint64_mv1(uint64_t v);
34
35 typedef struct icu4x_Decimal_from_double_with_integer_precision_mv1_result {union {icu4x::capi::Decimal* ok; }; bool is_ok;} icu4x_Decimal_from_double_with_integer_precision_mv1_result;
36 icu4x_Decimal_from_double_with_integer_precision_mv1_result icu4x_Decimal_from_double_with_integer_precision_mv1(double f);
37
38 typedef struct icu4x_Decimal_from_double_with_lower_magnitude_mv1_result {union {icu4x::capi::Decimal* ok; }; bool is_ok;} icu4x_Decimal_from_double_with_lower_magnitude_mv1_result;
39 icu4x_Decimal_from_double_with_lower_magnitude_mv1_result icu4x_Decimal_from_double_with_lower_magnitude_mv1(double f, int16_t magnitude);
40
41 typedef struct icu4x_Decimal_from_double_with_significant_digits_mv1_result {union {icu4x::capi::Decimal* ok; }; bool is_ok;} icu4x_Decimal_from_double_with_significant_digits_mv1_result;
42 icu4x_Decimal_from_double_with_significant_digits_mv1_result icu4x_Decimal_from_double_with_significant_digits_mv1(double f, uint8_t digits);
43
44 typedef struct icu4x_Decimal_from_double_with_round_trip_precision_mv1_result {union {icu4x::capi::Decimal* ok; }; bool is_ok;} icu4x_Decimal_from_double_with_round_trip_precision_mv1_result;
45 icu4x_Decimal_from_double_with_round_trip_precision_mv1_result icu4x_Decimal_from_double_with_round_trip_precision_mv1(double f);
46
47 typedef struct icu4x_Decimal_from_string_mv1_result {union {icu4x::capi::Decimal* ok; icu4x::capi::DecimalParseError err;}; bool is_ok;} icu4x_Decimal_from_string_mv1_result;
48 icu4x_Decimal_from_string_mv1_result icu4x_Decimal_from_string_mv1(diplomat::capi::DiplomatStringView v);
49
50 uint8_t icu4x_Decimal_digit_at_mv1(const icu4x::capi::Decimal* self, int16_t magnitude);
51
52 int16_t icu4x_Decimal_magnitude_start_mv1(const icu4x::capi::Decimal* self);
53
54 int16_t icu4x_Decimal_magnitude_end_mv1(const icu4x::capi::Decimal* self);
55
56 int16_t icu4x_Decimal_nonzero_magnitude_start_mv1(const icu4x::capi::Decimal* self);
57
58 int16_t icu4x_Decimal_nonzero_magnitude_end_mv1(const icu4x::capi::Decimal* self);
59
60 bool icu4x_Decimal_is_zero_mv1(const icu4x::capi::Decimal* self);
61
62 void icu4x_Decimal_multiply_pow10_mv1(icu4x::capi::Decimal* self, int16_t power);
63
64 icu4x::capi::DecimalSign icu4x_Decimal_sign_mv1(const icu4x::capi::Decimal* self);
65
66 void icu4x_Decimal_set_sign_mv1(icu4x::capi::Decimal* self, icu4x::capi::DecimalSign sign);
67
68 void icu4x_Decimal_apply_sign_display_mv1(icu4x::capi::Decimal* self, icu4x::capi::DecimalSignDisplay sign_display);
69
70 void icu4x_Decimal_trim_start_mv1(icu4x::capi::Decimal* self);
71
72 void icu4x_Decimal_trim_end_mv1(icu4x::capi::Decimal* self);
73
74 void icu4x_Decimal_trim_end_if_integer_mv1(icu4x::capi::Decimal* self);
75
76 void icu4x_Decimal_pad_start_mv1(icu4x::capi::Decimal* self, int16_t position);
77
78 void icu4x_Decimal_pad_end_mv1(icu4x::capi::Decimal* self, int16_t position);
79
80 void icu4x_Decimal_set_max_position_mv1(icu4x::capi::Decimal* self, int16_t position);
81
82 void icu4x_Decimal_round_mv1(icu4x::capi::Decimal* self, int16_t position);
83
84 void icu4x_Decimal_ceil_mv1(icu4x::capi::Decimal* self, int16_t position);
85
86 void icu4x_Decimal_expand_mv1(icu4x::capi::Decimal* self, int16_t position);
87
88 void icu4x_Decimal_floor_mv1(icu4x::capi::Decimal* self, int16_t position);
89
90 void icu4x_Decimal_trunc_mv1(icu4x::capi::Decimal* self, int16_t position);
91
92 void icu4x_Decimal_round_with_mode_mv1(icu4x::capi::Decimal* self, int16_t position, icu4x::capi::DecimalSignedRoundingMode mode);
93
94 void icu4x_Decimal_round_with_mode_and_increment_mv1(icu4x::capi::Decimal* self, int16_t position, icu4x::capi::DecimalSignedRoundingMode mode, icu4x::capi::DecimalRoundingIncrement increment);
95
96 typedef struct icu4x_Decimal_concatenate_end_mv1_result { bool is_ok;} icu4x_Decimal_concatenate_end_mv1_result;
97 icu4x_Decimal_concatenate_end_mv1_result icu4x_Decimal_concatenate_end_mv1(icu4x::capi::Decimal* self, icu4x::capi::Decimal* other);
98
99 void icu4x_Decimal_to_string_mv1(const icu4x::capi::Decimal* self, diplomat::capi::DiplomatWrite* write);
100
101 void icu4x_Decimal_destroy_mv1(Decimal* self);
102
103 } // extern "C"
104} // namespace capi
105} // namespace
106
107inline std::unique_ptr<icu4x::Decimal> icu4x::Decimal::from(int32_t v) {
108 auto result = icu4x::capi::icu4x_Decimal_from_int32_mv1(v);
109 return std::unique_ptr<icu4x::Decimal>(icu4x::Decimal::FromFFI(result));
110}
111
112inline std::unique_ptr<icu4x::Decimal> icu4x::Decimal::from(uint32_t v) {
113 auto result = icu4x::capi::icu4x_Decimal_from_uint32_mv1(v);
114 return std::unique_ptr<icu4x::Decimal>(icu4x::Decimal::FromFFI(result));
115}
116
117inline std::unique_ptr<icu4x::Decimal> icu4x::Decimal::from(int64_t v) {
118 auto result = icu4x::capi::icu4x_Decimal_from_int64_mv1(v);
119 return std::unique_ptr<icu4x::Decimal>(icu4x::Decimal::FromFFI(result));
120}
121
122inline std::unique_ptr<icu4x::Decimal> icu4x::Decimal::from(uint64_t v) {
123 auto result = icu4x::capi::icu4x_Decimal_from_uint64_mv1(v);
124 return std::unique_ptr<icu4x::Decimal>(icu4x::Decimal::FromFFI(result));
125}
126
131
133 auto result = icu4x::capi::icu4x_Decimal_from_double_with_lower_magnitude_mv1(f,
134 magnitude);
136}
137
139 auto result = icu4x::capi::icu4x_Decimal_from_double_with_significant_digits_mv1(f,
140 digits);
142}
143
148
150 auto result = icu4x::capi::icu4x_Decimal_from_string_mv1({v.data(), v.size()});
151 return result.is_ok ? diplomat::result<std::unique_ptr<icu4x::Decimal>, icu4x::DecimalParseError>(diplomat::Ok<std::unique_ptr<icu4x::Decimal>>(std::unique_ptr<icu4x::Decimal>(icu4x::Decimal::FromFFI(result.ok)))) : diplomat::result<std::unique_ptr<icu4x::Decimal>, icu4x::DecimalParseError>(diplomat::Err<icu4x::DecimalParseError>(icu4x::DecimalParseError::FromFFI(result.err)));
152}
153
154inline uint8_t icu4x::Decimal::digit_at(int16_t magnitude) const {
155 auto result = icu4x::capi::icu4x_Decimal_digit_at_mv1(this->AsFFI(),
156 magnitude);
157 return result;
158}
159
160inline int16_t icu4x::Decimal::magnitude_start() const {
161 auto result = icu4x::capi::icu4x_Decimal_magnitude_start_mv1(this->AsFFI());
162 return result;
163}
164
165inline int16_t icu4x::Decimal::magnitude_end() const {
166 auto result = icu4x::capi::icu4x_Decimal_magnitude_end_mv1(this->AsFFI());
167 return result;
168}
169
171 auto result = icu4x::capi::icu4x_Decimal_nonzero_magnitude_start_mv1(this->AsFFI());
172 return result;
173}
174
176 auto result = icu4x::capi::icu4x_Decimal_nonzero_magnitude_end_mv1(this->AsFFI());
177 return result;
178}
179
180inline bool icu4x::Decimal::is_zero() const {
181 auto result = icu4x::capi::icu4x_Decimal_is_zero_mv1(this->AsFFI());
182 return result;
183}
184
185inline void icu4x::Decimal::multiply_pow10(int16_t power) {
186 icu4x::capi::icu4x_Decimal_multiply_pow10_mv1(this->AsFFI(),
187 power);
188}
189
191 auto result = icu4x::capi::icu4x_Decimal_sign_mv1(this->AsFFI());
192 return icu4x::DecimalSign::FromFFI(result);
193}
194
196 icu4x::capi::icu4x_Decimal_set_sign_mv1(this->AsFFI(),
197 sign.AsFFI());
198}
199
201 icu4x::capi::icu4x_Decimal_apply_sign_display_mv1(this->AsFFI(),
202 sign_display.AsFFI());
203}
204
206 icu4x::capi::icu4x_Decimal_trim_start_mv1(this->AsFFI());
207}
208
210 icu4x::capi::icu4x_Decimal_trim_end_mv1(this->AsFFI());
211}
212
214 icu4x::capi::icu4x_Decimal_trim_end_if_integer_mv1(this->AsFFI());
215}
216
217inline void icu4x::Decimal::pad_start(int16_t position) {
218 icu4x::capi::icu4x_Decimal_pad_start_mv1(this->AsFFI(),
219 position);
220}
221
222inline void icu4x::Decimal::pad_end(int16_t position) {
223 icu4x::capi::icu4x_Decimal_pad_end_mv1(this->AsFFI(),
224 position);
225}
226
227inline void icu4x::Decimal::set_max_position(int16_t position) {
228 icu4x::capi::icu4x_Decimal_set_max_position_mv1(this->AsFFI(),
229 position);
230}
231
232inline void icu4x::Decimal::round(int16_t position) {
233 icu4x::capi::icu4x_Decimal_round_mv1(this->AsFFI(),
234 position);
235}
236
237inline void icu4x::Decimal::ceil(int16_t position) {
238 icu4x::capi::icu4x_Decimal_ceil_mv1(this->AsFFI(),
239 position);
240}
241
242inline void icu4x::Decimal::expand(int16_t position) {
243 icu4x::capi::icu4x_Decimal_expand_mv1(this->AsFFI(),
244 position);
245}
246
247inline void icu4x::Decimal::floor(int16_t position) {
248 icu4x::capi::icu4x_Decimal_floor_mv1(this->AsFFI(),
249 position);
250}
251
252inline void icu4x::Decimal::trunc(int16_t position) {
253 icu4x::capi::icu4x_Decimal_trunc_mv1(this->AsFFI(),
254 position);
255}
256
258 icu4x::capi::icu4x_Decimal_round_with_mode_mv1(this->AsFFI(),
259 position,
260 mode.AsFFI());
261}
262
264 icu4x::capi::icu4x_Decimal_round_with_mode_and_increment_mv1(this->AsFFI(),
265 position,
266 mode.AsFFI(),
267 increment.AsFFI());
268}
269
275
276inline std::string icu4x::Decimal::to_string() const {
277 std::string output;
278 diplomat::capi::DiplomatWrite write = diplomat::WriteFromString(output);
279 icu4x::capi::icu4x_Decimal_to_string_mv1(this->AsFFI(),
280 &write);
281 return output;
282}
283
284inline const icu4x::capi::Decimal* icu4x::Decimal::AsFFI() const {
285 return reinterpret_cast<const icu4x::capi::Decimal*>(this);
286}
287
288inline icu4x::capi::Decimal* icu4x::Decimal::AsFFI() {
289 return reinterpret_cast<icu4x::capi::Decimal*>(this);
290}
291
292inline const icu4x::Decimal* icu4x::Decimal::FromFFI(const icu4x::capi::Decimal* ptr) {
293 return reinterpret_cast<const icu4x::Decimal*>(ptr);
294}
295
296inline icu4x::Decimal* icu4x::Decimal::FromFFI(icu4x::capi::Decimal* ptr) {
297 return reinterpret_cast<icu4x::Decimal*>(ptr);
298}
299
300inline void icu4x::Decimal::operator delete(void* ptr) {
301 icu4x::capi::icu4x_Decimal_destroy_mv1(reinterpret_cast<icu4x::capi::Decimal*>(ptr));
302}
303
304
305#endif // icu4x_Decimal_HPP
Definition diplomat_runtime.hpp:140
Definition DecimalParseError.d.hpp:31
Definition DecimalRoundingIncrement.d.hpp:34
Definition DecimalSignDisplay.d.hpp:35
Definition DecimalSign.d.hpp:33
Definition DecimalSignedRoundingMode.d.hpp:39
Definition Decimal.d.hpp:36
void set_sign(icu4x::DecimalSign sign)
Definition Decimal.hpp:195
void multiply_pow10(int16_t power)
Definition Decimal.hpp:185
void apply_sign_display(icu4x::DecimalSignDisplay sign_display)
Definition Decimal.hpp:200
void pad_end(int16_t position)
Definition Decimal.hpp:222
bool is_zero() const
Definition Decimal.hpp:180
static diplomat::result< std::unique_ptr< icu4x::Decimal >, icu4x::DecimalLimitError > from_double_with_round_trip_precision(double f)
Definition Decimal.hpp:144
void round(int16_t position)
Definition Decimal.hpp:232
diplomat::result< std::monostate, std::monostate > concatenate_end(icu4x::Decimal &other)
Definition Decimal.hpp:270
int16_t nonzero_magnitude_start() const
Definition Decimal.hpp:170
int16_t magnitude_end() const
Definition Decimal.hpp:165
void round_with_mode_and_increment(int16_t position, icu4x::DecimalSignedRoundingMode mode, icu4x::DecimalRoundingIncrement increment)
Definition Decimal.hpp:263
void floor(int16_t position)
Definition Decimal.hpp:247
int16_t nonzero_magnitude_end() const
Definition Decimal.hpp:175
void trim_start()
Definition Decimal.hpp:205
void trim_end_if_integer()
Definition Decimal.hpp:213
void set_max_position(int16_t position)
Definition Decimal.hpp:227
icu4x::DecimalSign sign() const
Definition Decimal.hpp:190
void expand(int16_t position)
Definition Decimal.hpp:242
static diplomat::result< std::unique_ptr< icu4x::Decimal >, icu4x::DecimalLimitError > from_double_with_lower_magnitude(double f, int16_t magnitude)
Definition Decimal.hpp:132
static diplomat::result< std::unique_ptr< icu4x::Decimal >, icu4x::DecimalParseError > from_string(std::string_view v)
Definition Decimal.hpp:149
void ceil(int16_t position)
Definition Decimal.hpp:237
std::string to_string() const
Definition Decimal.hpp:276
int16_t magnitude_start() const
Definition Decimal.hpp:160
uint8_t digit_at(int16_t magnitude) const
Definition Decimal.hpp:154
static diplomat::result< std::unique_ptr< icu4x::Decimal >, icu4x::DecimalLimitError > from_double_with_integer_precision(double f)
Definition Decimal.hpp:127
static std::unique_ptr< icu4x::Decimal > from(int32_t v)
Definition Decimal.hpp:107
void trim_end()
Definition Decimal.hpp:209
void trunc(int16_t position)
Definition Decimal.hpp:252
void pad_start(int16_t position)
Definition Decimal.hpp:217
static diplomat::result< std::unique_ptr< icu4x::Decimal >, icu4x::DecimalLimitError > from_double_with_significant_digits(double f, uint8_t digits)
Definition Decimal.hpp:138
void round_with_mode(int16_t position, icu4x::DecimalSignedRoundingMode mode)
Definition Decimal.hpp:257
Definition Bidi.d.hpp:14
Definition diplomat_runtime.hpp:125
Definition diplomat_runtime.hpp:111
Definition DecimalLimitError.d.hpp:26