ICU4X
International Components for Unicode
Loading...
Searching...
No Matches
ICU4XFixedDecimal.hpp
Go to the documentation of this file.
1#ifndef ICU4XFixedDecimal_HPP
2#define ICU4XFixedDecimal_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 "ICU4XFixedDecimal.h"
13
15#include "ICU4XError.hpp"
19
23struct ICU4XFixedDecimalDeleter {
24 void operator()(capi::ICU4XFixedDecimal* l) const noexcept {
25 capi::ICU4XFixedDecimal_destroy(l);
26 }
27};
28
33 public:
34
40 static ICU4XFixedDecimal create_from_i32(int32_t v);
41
47 static ICU4XFixedDecimal create_from_u32(uint32_t v);
48
54 static ICU4XFixedDecimal create_from_i64(int64_t v);
55
61 static ICU4XFixedDecimal create_from_u64(uint64_t v);
62
71
80
89
99
106
110 uint8_t digit_at(int16_t magnitude) const;
111
115 int16_t magnitude_start() const;
116
120 int16_t magnitude_end() const;
121
125 int16_t nonzero_magnitude_start() const;
126
130 int16_t nonzero_magnitude_end() const;
131
135 bool is_zero() const;
136
142 void multiply_pow10(int16_t power);
143
148
155
160
164 void trim_start();
165
169 void trim_end();
170
176 void pad_start(int16_t position);
177
183 void pad_end(int16_t position);
184
191 void set_max_position(int16_t position);
192
196 void trunc(int16_t position);
197
201 void trunc_to_increment(int16_t position, ICU4XRoundingIncrement increment);
202
206 void half_trunc(int16_t position);
207
211 void half_trunc_to_increment(int16_t position, ICU4XRoundingIncrement increment);
212
216 void expand(int16_t position);
217
221 void expand_to_increment(int16_t position, ICU4XRoundingIncrement increment);
222
226 void half_expand(int16_t position);
227
231 void half_expand_to_increment(int16_t position, ICU4XRoundingIncrement increment);
232
236 void ceil(int16_t position);
237
241 void ceil_to_increment(int16_t position, ICU4XRoundingIncrement increment);
242
246 void half_ceil(int16_t position);
247
251 void half_ceil_to_increment(int16_t position, ICU4XRoundingIncrement increment);
252
256 void floor(int16_t position);
257
261 void floor_to_increment(int16_t position, ICU4XRoundingIncrement increment);
262
266 void half_floor(int16_t position);
267
271 void half_floor_to_increment(int16_t position, ICU4XRoundingIncrement increment);
272
276 void half_even(int16_t position);
277
281 void half_even_to_increment(int16_t position, ICU4XRoundingIncrement increment);
282
293
299 template<typename W> void to_string_to_writeable(W& to) const;
300
306 std::string to_string() const;
307 inline const capi::ICU4XFixedDecimal* AsFFI() const { return this->inner.get(); }
308 inline capi::ICU4XFixedDecimal* AsFFIMut() { return this->inner.get(); }
309 inline explicit ICU4XFixedDecimal(capi::ICU4XFixedDecimal* i) : inner(i) {}
310 ICU4XFixedDecimal() = default;
312 ICU4XFixedDecimal& operator=(ICU4XFixedDecimal&& other) noexcept = default;
313 private:
314 std::unique_ptr<capi::ICU4XFixedDecimal, ICU4XFixedDecimalDeleter> inner;
315};
316
317
319 return ICU4XFixedDecimal(capi::ICU4XFixedDecimal_create_from_i32(v));
320}
322 return ICU4XFixedDecimal(capi::ICU4XFixedDecimal_create_from_u32(v));
323}
325 return ICU4XFixedDecimal(capi::ICU4XFixedDecimal_create_from_i64(v));
326}
328 return ICU4XFixedDecimal(capi::ICU4XFixedDecimal_create_from_u64(v));
329}
331 auto diplomat_result_raw_out_value = capi::ICU4XFixedDecimal_create_from_f64_with_integer_precision(f);
332 diplomat::result<ICU4XFixedDecimal, ICU4XError> diplomat_result_out_value;
333 if (diplomat_result_raw_out_value.is_ok) {
334 diplomat_result_out_value = diplomat::Ok<ICU4XFixedDecimal>(ICU4XFixedDecimal(diplomat_result_raw_out_value.ok));
335 } else {
336 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
337 }
338 return diplomat_result_out_value;
339}
341 auto diplomat_result_raw_out_value = capi::ICU4XFixedDecimal_create_from_f64_with_lower_magnitude(f, magnitude);
342 diplomat::result<ICU4XFixedDecimal, ICU4XError> diplomat_result_out_value;
343 if (diplomat_result_raw_out_value.is_ok) {
344 diplomat_result_out_value = diplomat::Ok<ICU4XFixedDecimal>(ICU4XFixedDecimal(diplomat_result_raw_out_value.ok));
345 } else {
346 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
347 }
348 return diplomat_result_out_value;
349}
351 auto diplomat_result_raw_out_value = capi::ICU4XFixedDecimal_create_from_f64_with_significant_digits(f, digits);
352 diplomat::result<ICU4XFixedDecimal, ICU4XError> diplomat_result_out_value;
353 if (diplomat_result_raw_out_value.is_ok) {
354 diplomat_result_out_value = diplomat::Ok<ICU4XFixedDecimal>(ICU4XFixedDecimal(diplomat_result_raw_out_value.ok));
355 } else {
356 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
357 }
358 return diplomat_result_out_value;
359}
361 auto diplomat_result_raw_out_value = capi::ICU4XFixedDecimal_create_from_f64_with_floating_precision(f);
362 diplomat::result<ICU4XFixedDecimal, ICU4XError> diplomat_result_out_value;
363 if (diplomat_result_raw_out_value.is_ok) {
364 diplomat_result_out_value = diplomat::Ok<ICU4XFixedDecimal>(ICU4XFixedDecimal(diplomat_result_raw_out_value.ok));
365 } else {
366 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
367 }
368 return diplomat_result_out_value;
369}
371 auto diplomat_result_raw_out_value = capi::ICU4XFixedDecimal_create_from_string(v.data(), v.size());
372 diplomat::result<ICU4XFixedDecimal, ICU4XError> diplomat_result_out_value;
373 if (diplomat_result_raw_out_value.is_ok) {
374 diplomat_result_out_value = diplomat::Ok<ICU4XFixedDecimal>(ICU4XFixedDecimal(diplomat_result_raw_out_value.ok));
375 } else {
376 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
377 }
378 return diplomat_result_out_value;
379}
380inline uint8_t ICU4XFixedDecimal::digit_at(int16_t magnitude) const {
381 return capi::ICU4XFixedDecimal_digit_at(this->inner.get(), magnitude);
382}
384 return capi::ICU4XFixedDecimal_magnitude_start(this->inner.get());
385}
386inline int16_t ICU4XFixedDecimal::magnitude_end() const {
387 return capi::ICU4XFixedDecimal_magnitude_end(this->inner.get());
388}
390 return capi::ICU4XFixedDecimal_nonzero_magnitude_start(this->inner.get());
391}
393 return capi::ICU4XFixedDecimal_nonzero_magnitude_end(this->inner.get());
394}
395inline bool ICU4XFixedDecimal::is_zero() const {
396 return capi::ICU4XFixedDecimal_is_zero(this->inner.get());
397}
398inline void ICU4XFixedDecimal::multiply_pow10(int16_t power) {
399 capi::ICU4XFixedDecimal_multiply_pow10(this->inner.get(), power);
400}
402 return static_cast<ICU4XFixedDecimalSign>(capi::ICU4XFixedDecimal_sign(this->inner.get()));
403}
405 capi::ICU4XFixedDecimal_set_sign(this->inner.get(), static_cast<capi::ICU4XFixedDecimalSign>(sign));
406}
408 capi::ICU4XFixedDecimal_apply_sign_display(this->inner.get(), static_cast<capi::ICU4XFixedDecimalSignDisplay>(sign_display));
409}
411 capi::ICU4XFixedDecimal_trim_start(this->inner.get());
412}
414 capi::ICU4XFixedDecimal_trim_end(this->inner.get());
415}
416inline void ICU4XFixedDecimal::pad_start(int16_t position) {
417 capi::ICU4XFixedDecimal_pad_start(this->inner.get(), position);
418}
419inline void ICU4XFixedDecimal::pad_end(int16_t position) {
420 capi::ICU4XFixedDecimal_pad_end(this->inner.get(), position);
421}
422inline void ICU4XFixedDecimal::set_max_position(int16_t position) {
423 capi::ICU4XFixedDecimal_set_max_position(this->inner.get(), position);
424}
425inline void ICU4XFixedDecimal::trunc(int16_t position) {
426 capi::ICU4XFixedDecimal_trunc(this->inner.get(), position);
427}
428inline void ICU4XFixedDecimal::trunc_to_increment(int16_t position, ICU4XRoundingIncrement increment) {
429 capi::ICU4XFixedDecimal_trunc_to_increment(this->inner.get(), position, static_cast<capi::ICU4XRoundingIncrement>(increment));
430}
431inline void ICU4XFixedDecimal::half_trunc(int16_t position) {
432 capi::ICU4XFixedDecimal_half_trunc(this->inner.get(), position);
433}
435 capi::ICU4XFixedDecimal_half_trunc_to_increment(this->inner.get(), position, static_cast<capi::ICU4XRoundingIncrement>(increment));
436}
437inline void ICU4XFixedDecimal::expand(int16_t position) {
438 capi::ICU4XFixedDecimal_expand(this->inner.get(), position);
439}
440inline void ICU4XFixedDecimal::expand_to_increment(int16_t position, ICU4XRoundingIncrement increment) {
441 capi::ICU4XFixedDecimal_expand_to_increment(this->inner.get(), position, static_cast<capi::ICU4XRoundingIncrement>(increment));
442}
443inline void ICU4XFixedDecimal::half_expand(int16_t position) {
444 capi::ICU4XFixedDecimal_half_expand(this->inner.get(), position);
445}
447 capi::ICU4XFixedDecimal_half_expand_to_increment(this->inner.get(), position, static_cast<capi::ICU4XRoundingIncrement>(increment));
448}
449inline void ICU4XFixedDecimal::ceil(int16_t position) {
450 capi::ICU4XFixedDecimal_ceil(this->inner.get(), position);
451}
452inline void ICU4XFixedDecimal::ceil_to_increment(int16_t position, ICU4XRoundingIncrement increment) {
453 capi::ICU4XFixedDecimal_ceil_to_increment(this->inner.get(), position, static_cast<capi::ICU4XRoundingIncrement>(increment));
454}
455inline void ICU4XFixedDecimal::half_ceil(int16_t position) {
456 capi::ICU4XFixedDecimal_half_ceil(this->inner.get(), position);
457}
459 capi::ICU4XFixedDecimal_half_ceil_to_increment(this->inner.get(), position, static_cast<capi::ICU4XRoundingIncrement>(increment));
460}
461inline void ICU4XFixedDecimal::floor(int16_t position) {
462 capi::ICU4XFixedDecimal_floor(this->inner.get(), position);
463}
464inline void ICU4XFixedDecimal::floor_to_increment(int16_t position, ICU4XRoundingIncrement increment) {
465 capi::ICU4XFixedDecimal_floor_to_increment(this->inner.get(), position, static_cast<capi::ICU4XRoundingIncrement>(increment));
466}
467inline void ICU4XFixedDecimal::half_floor(int16_t position) {
468 capi::ICU4XFixedDecimal_half_floor(this->inner.get(), position);
469}
471 capi::ICU4XFixedDecimal_half_floor_to_increment(this->inner.get(), position, static_cast<capi::ICU4XRoundingIncrement>(increment));
472}
473inline void ICU4XFixedDecimal::half_even(int16_t position) {
474 capi::ICU4XFixedDecimal_half_even(this->inner.get(), position);
475}
477 capi::ICU4XFixedDecimal_half_even_to_increment(this->inner.get(), position, static_cast<capi::ICU4XRoundingIncrement>(increment));
478}
480 auto diplomat_result_raw_out_value = capi::ICU4XFixedDecimal_concatenate_end(this->inner.get(), other.AsFFIMut());
481 diplomat::result<std::monostate, std::monostate> diplomat_result_out_value;
482 if (diplomat_result_raw_out_value.is_ok) {
483 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
484 } else {
485 diplomat_result_out_value = diplomat::Err<std::monostate>(std::monostate());
486 }
487 return diplomat_result_out_value;
488}
489template<typename W> inline void ICU4XFixedDecimal::to_string_to_writeable(W& to) const {
490 capi::DiplomatWriteable to_writer = diplomat::WriteableTrait<W>::Construct(to);
491 capi::ICU4XFixedDecimal_to_string(this->inner.get(), &to_writer);
492}
493inline std::string ICU4XFixedDecimal::to_string() const {
494 std::string diplomat_writeable_string;
495 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
496 capi::ICU4XFixedDecimal_to_string(this->inner.get(), &diplomat_writeable_out);
497 return diplomat_writeable_string;
498}
499#endif
ICU4XError
Definition ICU4XError.hpp:23
ICU4XFixedDecimalSignDisplay
Definition ICU4XFixedDecimalSignDisplay.hpp:21
ICU4XFixedDecimalSign
Definition ICU4XFixedDecimalSign.hpp:21
ICU4XRoundingIncrement
Definition ICU4XRoundingIncrement.hpp:21
Definition ICU4XFixedDecimal.hpp:32
void floor(int16_t position)
Definition ICU4XFixedDecimal.hpp:461
ICU4XFixedDecimal(capi::ICU4XFixedDecimal *i)
Definition ICU4XFixedDecimal.hpp:309
void half_even_to_increment(int16_t position, ICU4XRoundingIncrement increment)
Definition ICU4XFixedDecimal.hpp:476
void pad_start(int16_t position)
Definition ICU4XFixedDecimal.hpp:416
diplomat::result< std::monostate, std::monostate > concatenate_end(ICU4XFixedDecimal &other)
Definition ICU4XFixedDecimal.hpp:479
void floor_to_increment(int16_t position, ICU4XRoundingIncrement increment)
Definition ICU4XFixedDecimal.hpp:464
void half_trunc_to_increment(int16_t position, ICU4XRoundingIncrement increment)
Definition ICU4XFixedDecimal.hpp:434
static ICU4XFixedDecimal create_from_i32(int32_t v)
Definition ICU4XFixedDecimal.hpp:318
static ICU4XFixedDecimal create_from_u32(uint32_t v)
Definition ICU4XFixedDecimal.hpp:321
void trim_end()
Definition ICU4XFixedDecimal.hpp:413
void ceil(int16_t position)
Definition ICU4XFixedDecimal.hpp:449
void half_expand_to_increment(int16_t position, ICU4XRoundingIncrement increment)
Definition ICU4XFixedDecimal.hpp:446
void to_string_to_writeable(W &to) const
Definition ICU4XFixedDecimal.hpp:489
std::string to_string() const
Definition ICU4XFixedDecimal.hpp:493
void ceil_to_increment(int16_t position, ICU4XRoundingIncrement increment)
Definition ICU4XFixedDecimal.hpp:452
ICU4XFixedDecimalSign sign() const
Definition ICU4XFixedDecimal.hpp:401
void half_floor_to_increment(int16_t position, ICU4XRoundingIncrement increment)
Definition ICU4XFixedDecimal.hpp:470
void multiply_pow10(int16_t power)
Definition ICU4XFixedDecimal.hpp:398
ICU4XFixedDecimal()=default
ICU4XFixedDecimal(ICU4XFixedDecimal &&) noexcept=default
void set_max_position(int16_t position)
Definition ICU4XFixedDecimal.hpp:422
int16_t magnitude_end() const
Definition ICU4XFixedDecimal.hpp:386
static ICU4XFixedDecimal create_from_u64(uint64_t v)
Definition ICU4XFixedDecimal.hpp:327
void trunc_to_increment(int16_t position, ICU4XRoundingIncrement increment)
Definition ICU4XFixedDecimal.hpp:428
int16_t magnitude_start() const
Definition ICU4XFixedDecimal.hpp:383
void trunc(int16_t position)
Definition ICU4XFixedDecimal.hpp:425
void set_sign(ICU4XFixedDecimalSign sign)
Definition ICU4XFixedDecimal.hpp:404
void half_trunc(int16_t position)
Definition ICU4XFixedDecimal.hpp:431
void expand_to_increment(int16_t position, ICU4XRoundingIncrement increment)
Definition ICU4XFixedDecimal.hpp:440
void pad_end(int16_t position)
Definition ICU4XFixedDecimal.hpp:419
void trim_start()
Definition ICU4XFixedDecimal.hpp:410
bool is_zero() const
Definition ICU4XFixedDecimal.hpp:395
int16_t nonzero_magnitude_end() const
Definition ICU4XFixedDecimal.hpp:392
void expand(int16_t position)
Definition ICU4XFixedDecimal.hpp:437
static ICU4XFixedDecimal create_from_i64(int64_t v)
Definition ICU4XFixedDecimal.hpp:324
static diplomat::result< ICU4XFixedDecimal, ICU4XError > create_from_f64_with_lower_magnitude(double f, int16_t magnitude)
Definition ICU4XFixedDecimal.hpp:340
void apply_sign_display(ICU4XFixedDecimalSignDisplay sign_display)
Definition ICU4XFixedDecimal.hpp:407
void half_ceil(int16_t position)
Definition ICU4XFixedDecimal.hpp:455
static diplomat::result< ICU4XFixedDecimal, ICU4XError > create_from_string(const std::string_view v)
Definition ICU4XFixedDecimal.hpp:370
void half_floor(int16_t position)
Definition ICU4XFixedDecimal.hpp:467
static diplomat::result< ICU4XFixedDecimal, ICU4XError > create_from_f64_with_significant_digits(double f, uint8_t digits)
Definition ICU4XFixedDecimal.hpp:350
static diplomat::result< ICU4XFixedDecimal, ICU4XError > create_from_f64_with_floating_precision(double f)
Definition ICU4XFixedDecimal.hpp:360
void half_even(int16_t position)
Definition ICU4XFixedDecimal.hpp:473
void half_ceil_to_increment(int16_t position, ICU4XRoundingIncrement increment)
Definition ICU4XFixedDecimal.hpp:458
int16_t nonzero_magnitude_start() const
Definition ICU4XFixedDecimal.hpp:389
void half_expand(int16_t position)
Definition ICU4XFixedDecimal.hpp:443
static diplomat::result< ICU4XFixedDecimal, ICU4XError > create_from_f64_with_integer_precision(double f)
Definition ICU4XFixedDecimal.hpp:330
uint8_t digit_at(int16_t magnitude) const
Definition ICU4XFixedDecimal.hpp:380
Definition diplomat_runtime.hpp:84
capi::DiplomatWriteable WriteableFromString(std::string &string)
Definition diplomat_runtime.hpp:31
Definition diplomat_runtime.hpp:69
Definition diplomat_runtime.hpp:55