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>
14#include "DecimalLimitError.hpp"
15#include "DecimalParseError.hpp"
17#include "DecimalSign.hpp"
20#include "diplomat_runtime.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(icu4x::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, icu4x::diplomat::capi::DiplomatWrite* write);
100
101 bool icu4x_Decimal_equals_mv1(const icu4x::capi::Decimal* self, const icu4x::capi::Decimal* other);
102
103 void icu4x_Decimal_destroy_mv1(Decimal* self);
104
105 } // extern "C"
106} // namespace capi
107} // namespace
108
109inline std::unique_ptr<icu4x::Decimal> icu4x::Decimal::from(int32_t v) {
110 auto result = icu4x::capi::icu4x_Decimal_from_int32_mv1(v);
111 return std::unique_ptr<icu4x::Decimal>(icu4x::Decimal::FromFFI(result));
112}
113
114inline std::unique_ptr<icu4x::Decimal> icu4x::Decimal::from(uint32_t v) {
115 auto result = icu4x::capi::icu4x_Decimal_from_uint32_mv1(v);
116 return std::unique_ptr<icu4x::Decimal>(icu4x::Decimal::FromFFI(result));
117}
118
119inline std::unique_ptr<icu4x::Decimal> icu4x::Decimal::from(int64_t v) {
120 auto result = icu4x::capi::icu4x_Decimal_from_int64_mv1(v);
121 return std::unique_ptr<icu4x::Decimal>(icu4x::Decimal::FromFFI(result));
122}
123
124inline std::unique_ptr<icu4x::Decimal> icu4x::Decimal::from(uint64_t v) {
125 auto result = icu4x::capi::icu4x_Decimal_from_uint64_mv1(v);
126 return std::unique_ptr<icu4x::Decimal>(icu4x::Decimal::FromFFI(result));
127}
128
133
139
145
150
152 auto result = icu4x::capi::icu4x_Decimal_from_string_mv1({v.data(), v.size()});
154}
155
156inline uint8_t icu4x::Decimal::digit_at(int16_t magnitude) const {
157 auto result = icu4x::capi::icu4x_Decimal_digit_at_mv1(this->AsFFI(),
158 magnitude);
159 return result;
160}
161
162inline int16_t icu4x::Decimal::magnitude_start() const {
163 auto result = icu4x::capi::icu4x_Decimal_magnitude_start_mv1(this->AsFFI());
164 return result;
165}
166
167inline int16_t icu4x::Decimal::magnitude_end() const {
168 auto result = icu4x::capi::icu4x_Decimal_magnitude_end_mv1(this->AsFFI());
169 return result;
170}
171
173 auto result = icu4x::capi::icu4x_Decimal_nonzero_magnitude_start_mv1(this->AsFFI());
174 return result;
175}
176
178 auto result = icu4x::capi::icu4x_Decimal_nonzero_magnitude_end_mv1(this->AsFFI());
179 return result;
180}
181
182inline bool icu4x::Decimal::is_zero() const {
183 auto result = icu4x::capi::icu4x_Decimal_is_zero_mv1(this->AsFFI());
184 return result;
185}
186
187inline void icu4x::Decimal::multiply_pow10(int16_t power) {
188 icu4x::capi::icu4x_Decimal_multiply_pow10_mv1(this->AsFFI(),
189 power);
190}
191
193 auto result = icu4x::capi::icu4x_Decimal_sign_mv1(this->AsFFI());
194 return icu4x::DecimalSign::FromFFI(result);
195}
196
198 icu4x::capi::icu4x_Decimal_set_sign_mv1(this->AsFFI(),
199 sign.AsFFI());
200}
201
203 icu4x::capi::icu4x_Decimal_apply_sign_display_mv1(this->AsFFI(),
204 sign_display.AsFFI());
205}
206
208 icu4x::capi::icu4x_Decimal_trim_start_mv1(this->AsFFI());
209}
210
212 icu4x::capi::icu4x_Decimal_trim_end_mv1(this->AsFFI());
213}
214
216 icu4x::capi::icu4x_Decimal_trim_end_if_integer_mv1(this->AsFFI());
217}
218
219inline void icu4x::Decimal::pad_start(int16_t position) {
220 icu4x::capi::icu4x_Decimal_pad_start_mv1(this->AsFFI(),
221 position);
222}
223
224inline void icu4x::Decimal::pad_end(int16_t position) {
225 icu4x::capi::icu4x_Decimal_pad_end_mv1(this->AsFFI(),
226 position);
227}
228
229inline void icu4x::Decimal::set_max_position(int16_t position) {
230 icu4x::capi::icu4x_Decimal_set_max_position_mv1(this->AsFFI(),
231 position);
232}
233
234inline void icu4x::Decimal::round(int16_t position) {
235 icu4x::capi::icu4x_Decimal_round_mv1(this->AsFFI(),
236 position);
237}
238
239inline void icu4x::Decimal::ceil(int16_t position) {
240 icu4x::capi::icu4x_Decimal_ceil_mv1(this->AsFFI(),
241 position);
242}
243
244inline void icu4x::Decimal::expand(int16_t position) {
245 icu4x::capi::icu4x_Decimal_expand_mv1(this->AsFFI(),
246 position);
247}
248
249inline void icu4x::Decimal::floor(int16_t position) {
250 icu4x::capi::icu4x_Decimal_floor_mv1(this->AsFFI(),
251 position);
252}
253
254inline void icu4x::Decimal::trunc(int16_t position) {
255 icu4x::capi::icu4x_Decimal_trunc_mv1(this->AsFFI(),
256 position);
257}
258
260 icu4x::capi::icu4x_Decimal_round_with_mode_mv1(this->AsFFI(),
261 position,
262 mode.AsFFI());
263}
264
266 icu4x::capi::icu4x_Decimal_round_with_mode_and_increment_mv1(this->AsFFI(),
267 position,
268 mode.AsFFI(),
269 increment.AsFFI());
270}
271
277
278inline std::string icu4x::Decimal::to_string() const {
279 std::string output;
280 icu4x::diplomat::capi::DiplomatWrite write = icu4x::diplomat::WriteFromString(output);
281 icu4x::capi::icu4x_Decimal_to_string_mv1(this->AsFFI(),
282 &write);
283 return output;
284}
285template<typename W>
286inline void icu4x::Decimal::to_string_write(W& writeable) const {
287 icu4x::diplomat::capi::DiplomatWrite write = icu4x::diplomat::WriteTrait<W>::Construct(writeable);
288 icu4x::capi::icu4x_Decimal_to_string_mv1(this->AsFFI(),
289 &write);
290}
291
292inline bool icu4x::Decimal::equals(const icu4x::Decimal& other) const {
293 auto result = icu4x::capi::icu4x_Decimal_equals_mv1(this->AsFFI(),
294 other.AsFFI());
295 return result;
296}
297
298inline const icu4x::capi::Decimal* icu4x::Decimal::AsFFI() const {
299 return reinterpret_cast<const icu4x::capi::Decimal*>(this);
300}
301
302inline icu4x::capi::Decimal* icu4x::Decimal::AsFFI() {
303 return reinterpret_cast<icu4x::capi::Decimal*>(this);
304}
305
306inline const icu4x::Decimal* icu4x::Decimal::FromFFI(const icu4x::capi::Decimal* ptr) {
307 return reinterpret_cast<const icu4x::Decimal*>(ptr);
308}
309
310inline icu4x::Decimal* icu4x::Decimal::FromFFI(icu4x::capi::Decimal* ptr) {
311 return reinterpret_cast<icu4x::Decimal*>(ptr);
312}
313
314inline void icu4x::Decimal::operator delete(void* ptr) {
315 icu4x::capi::icu4x_Decimal_destroy_mv1(reinterpret_cast<icu4x::capi::Decimal*>(ptr));
316}
317
318
319#endif // ICU4X_Decimal_HPP
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:197
void multiply_pow10(int16_t power)
Definition Decimal.hpp:187
void apply_sign_display(icu4x::DecimalSignDisplay sign_display)
Definition Decimal.hpp:202
void pad_end(int16_t position)
Definition Decimal.hpp:224
bool is_zero() const
Definition Decimal.hpp:182
void round(int16_t position)
Definition Decimal.hpp:234
static icu4x::diplomat::result< std::unique_ptr< icu4x::Decimal >, icu4x::DecimalLimitError > from_double_with_lower_magnitude(double f, int16_t magnitude)
Definition Decimal.hpp:134
int16_t nonzero_magnitude_start() const
Definition Decimal.hpp:172
int16_t magnitude_end() const
Definition Decimal.hpp:167
void round_with_mode_and_increment(int16_t position, icu4x::DecimalSignedRoundingMode mode, icu4x::DecimalRoundingIncrement increment)
Definition Decimal.hpp:265
void floor(int16_t position)
Definition Decimal.hpp:249
int16_t nonzero_magnitude_end() const
Definition Decimal.hpp:177
void trim_start()
Definition Decimal.hpp:207
void trim_end_if_integer()
Definition Decimal.hpp:215
static icu4x::diplomat::result< std::unique_ptr< icu4x::Decimal >, icu4x::DecimalLimitError > from_double_with_integer_precision(double f)
Definition Decimal.hpp:129
void to_string_write(W &writeable_output) const
Definition Decimal.hpp:286
bool equals(const icu4x::Decimal &other) const
Definition Decimal.hpp:292
icu4x::diplomat::result< std::monostate, std::monostate > concatenate_end(icu4x::Decimal &other)
Definition Decimal.hpp:272
void set_max_position(int16_t position)
Definition Decimal.hpp:229
icu4x::DecimalSign sign() const
Definition Decimal.hpp:192
void expand(int16_t position)
Definition Decimal.hpp:244
static icu4x::diplomat::result< std::unique_ptr< icu4x::Decimal >, icu4x::DecimalLimitError > from_double_with_round_trip_precision(double f)
Definition Decimal.hpp:146
static icu4x::diplomat::result< std::unique_ptr< icu4x::Decimal >, icu4x::DecimalLimitError > from_double_with_significant_digits(double f, uint8_t digits)
Definition Decimal.hpp:140
void ceil(int16_t position)
Definition Decimal.hpp:239
std::string to_string() const
Definition Decimal.hpp:278
int16_t magnitude_start() const
Definition Decimal.hpp:162
uint8_t digit_at(int16_t magnitude) const
Definition Decimal.hpp:156
static icu4x::diplomat::result< std::unique_ptr< icu4x::Decimal >, icu4x::DecimalParseError > from_string(std::string_view v)
Definition Decimal.hpp:151
static std::unique_ptr< icu4x::Decimal > from(int32_t v)
Definition Decimal.hpp:109
void trim_end()
Definition Decimal.hpp:211
void trunc(int16_t position)
Definition Decimal.hpp:254
void pad_start(int16_t position)
Definition Decimal.hpp:219
void round_with_mode(int16_t position, icu4x::DecimalSignedRoundingMode mode)
Definition Decimal.hpp:259
Definition Bidi.d.hpp:13
Definition DecimalLimitError.d.hpp:26
Definition diplomat_runtime.hpp:243
Definition diplomat_runtime.hpp:202