• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef icu4x_Decimal_D_HPP
2 #define icu4x_Decimal_D_HPP
3 
4 #include <stdio.h>
5 #include <stdint.h>
6 #include <stddef.h>
7 #include <stdbool.h>
8 #include <memory>
9 #include <functional>
10 #include <optional>
11 #include "../diplomat_runtime.hpp"
12 
13 namespace icu4x {
14 namespace capi { struct Decimal; }
15 class Decimal;
16 struct FixedDecimalLimitError;
17 class FixedDecimalParseError;
18 class FixedDecimalRoundingIncrement;
19 class FixedDecimalSign;
20 class FixedDecimalSignDisplay;
21 class FixedDecimalSignedRoundingMode;
22 }
23 
24 
25 namespace icu4x {
26 namespace capi {
27     struct Decimal;
28 } // namespace capi
29 } // namespace
30 
31 namespace icu4x {
32 class Decimal {
33 public:
34 
35   inline static std::unique_ptr<icu4x::Decimal> from(int32_t v);
36 
37   inline static std::unique_ptr<icu4x::Decimal> from(uint32_t v);
38 
39   inline static std::unique_ptr<icu4x::Decimal> from(int64_t v);
40 
41   inline static std::unique_ptr<icu4x::Decimal> from(uint64_t v);
42 
43   inline static diplomat::result<std::unique_ptr<icu4x::Decimal>, icu4x::FixedDecimalLimitError> from_double_with_integer_precision(double f);
44 
45   inline static diplomat::result<std::unique_ptr<icu4x::Decimal>, icu4x::FixedDecimalLimitError> from_double_with_lower_magnitude(double f, int16_t magnitude);
46 
47   inline static diplomat::result<std::unique_ptr<icu4x::Decimal>, icu4x::FixedDecimalLimitError> from_double_with_significant_digits(double f, uint8_t digits);
48 
49   inline static diplomat::result<std::unique_ptr<icu4x::Decimal>, icu4x::FixedDecimalLimitError> from_double_with_round_trip_precision(double f);
50 
51   inline static diplomat::result<std::unique_ptr<icu4x::Decimal>, icu4x::FixedDecimalParseError> from_string(std::string_view v);
52 
53   inline uint8_t digit_at(int16_t magnitude) const;
54 
55   inline int16_t magnitude_start() const;
56 
57   inline int16_t magnitude_end() const;
58 
59   inline int16_t nonzero_magnitude_start() const;
60 
61   inline int16_t nonzero_magnitude_end() const;
62 
63   inline bool is_zero() const;
64 
65   inline void multiply_pow10(int16_t power);
66 
67   inline icu4x::FixedDecimalSign sign() const;
68 
69   inline void set_sign(icu4x::FixedDecimalSign sign);
70 
71   inline void apply_sign_display(icu4x::FixedDecimalSignDisplay sign_display);
72 
73   inline void trim_start();
74 
75   inline void trim_end();
76 
77   inline void trim_end_if_integer();
78 
79   inline void pad_start(int16_t position);
80 
81   inline void pad_end(int16_t position);
82 
83   inline void set_max_position(int16_t position);
84 
85   inline void round(int16_t position);
86 
87   inline void ceil(int16_t position);
88 
89   inline void expand(int16_t position);
90 
91   inline void floor(int16_t position);
92 
93   inline void trunc(int16_t position);
94 
95   inline void round_with_mode(int16_t position, icu4x::FixedDecimalSignedRoundingMode mode);
96 
97   inline void round_with_mode_and_increment(int16_t position, icu4x::FixedDecimalSignedRoundingMode mode, icu4x::FixedDecimalRoundingIncrement increment);
98 
99   inline diplomat::result<std::monostate, std::monostate> concatenate_end(icu4x::Decimal& other);
100 
101   inline std::string to_string() const;
102 
103   inline const icu4x::capi::Decimal* AsFFI() const;
104   inline icu4x::capi::Decimal* AsFFI();
105   inline static const icu4x::Decimal* FromFFI(const icu4x::capi::Decimal* ptr);
106   inline static icu4x::Decimal* FromFFI(icu4x::capi::Decimal* ptr);
107   inline static void operator delete(void* ptr);
108 private:
109   Decimal() = delete;
110   Decimal(const icu4x::Decimal&) = delete;
111   Decimal(icu4x::Decimal&&) noexcept = delete;
112   Decimal operator=(const icu4x::Decimal&) = delete;
113   Decimal operator=(icu4x::Decimal&&) noexcept = delete;
114   static void operator delete[](void*, size_t) = delete;
115 };
116 
117 } // namespace
118 #endif // icu4x_Decimal_D_HPP
119