ICU4X
International Components for Unicode
Loading...
Searching...
No Matches
ICU4XBidi.hpp
Go to the documentation of this file.
1#ifndef ICU4XBidi_HPP
2#define ICU4XBidi_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 "ICU4XBidi.h"
13
15class ICU4XBidi;
16#include "ICU4XError.hpp"
17class ICU4XBidiInfo;
19
23struct ICU4XBidiDeleter {
24 void operator()(capi::ICU4XBidi* l) const noexcept {
25 capi::ICU4XBidi_destroy(l);
26 }
27};
28
34class ICU4XBidi {
35 public:
36
43
55 std::optional<ICU4XBidiInfo> for_text(const std::string_view text, uint8_t default_level) const;
56
70
78 static bool level_is_rtl(uint8_t level);
79
87 static bool level_is_ltr(uint8_t level);
88
94 static uint8_t level_rtl();
95
101 static uint8_t level_ltr();
102 inline const capi::ICU4XBidi* AsFFI() const { return this->inner.get(); }
103 inline capi::ICU4XBidi* AsFFIMut() { return this->inner.get(); }
104 inline explicit ICU4XBidi(capi::ICU4XBidi* i) : inner(i) {}
105 ICU4XBidi() = default;
106 ICU4XBidi(ICU4XBidi&&) noexcept = default;
107 ICU4XBidi& operator=(ICU4XBidi&& other) noexcept = default;
108 private:
109 std::unique_ptr<capi::ICU4XBidi, ICU4XBidiDeleter> inner;
110};
111
112#include "ICU4XDataProvider.hpp"
113#include "ICU4XBidiInfo.hpp"
115
117 auto diplomat_result_raw_out_value = capi::ICU4XBidi_create(provider.AsFFI());
118 diplomat::result<ICU4XBidi, ICU4XError> diplomat_result_out_value;
119 if (diplomat_result_raw_out_value.is_ok) {
120 diplomat_result_out_value = diplomat::Ok<ICU4XBidi>(ICU4XBidi(diplomat_result_raw_out_value.ok));
121 } else {
122 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
123 }
124 return diplomat_result_out_value;
125}
126inline std::optional<ICU4XBidiInfo> ICU4XBidi::for_text(const std::string_view text, uint8_t default_level) const {
127 auto diplomat_optional_raw_out_value = capi::ICU4XBidi_for_text(this->inner.get(), text.data(), text.size(), default_level);
128 std::optional<ICU4XBidiInfo> diplomat_optional_out_value;
129 if (diplomat_optional_raw_out_value != nullptr) {
130 diplomat_optional_out_value = ICU4XBidiInfo(diplomat_optional_raw_out_value);
131 } else {
132 diplomat_optional_out_value = std::nullopt;
133 }
134 return diplomat_optional_out_value;
135}
137 return ICU4XReorderedIndexMap(capi::ICU4XBidi_reorder_visual(this->inner.get(), levels.data(), levels.size()));
138}
139inline bool ICU4XBidi::level_is_rtl(uint8_t level) {
140 return capi::ICU4XBidi_level_is_rtl(level);
141}
142inline bool ICU4XBidi::level_is_ltr(uint8_t level) {
143 return capi::ICU4XBidi_level_is_ltr(level);
144}
145inline uint8_t ICU4XBidi::level_rtl() {
146 return capi::ICU4XBidi_level_rtl();
147}
148inline uint8_t ICU4XBidi::level_ltr() {
149 return capi::ICU4XBidi_level_ltr();
150}
151#endif
ICU4XError
Definition ICU4XError.hpp:23
Definition ICU4XBidiInfo.hpp:30
Definition ICU4XBidi.hpp:34
static bool level_is_ltr(uint8_t level)
Definition ICU4XBidi.hpp:142
static bool level_is_rtl(uint8_t level)
Definition ICU4XBidi.hpp:139
static uint8_t level_ltr()
Definition ICU4XBidi.hpp:148
ICU4XBidi()=default
ICU4XBidi(ICU4XBidi &&) noexcept=default
ICU4XBidi(capi::ICU4XBidi *i)
Definition ICU4XBidi.hpp:104
static uint8_t level_rtl()
Definition ICU4XBidi.hpp:145
static diplomat::result< ICU4XBidi, ICU4XError > create(const ICU4XDataProvider &provider)
Definition ICU4XBidi.hpp:116
std::optional< ICU4XBidiInfo > for_text(const std::string_view text, uint8_t default_level) const
Definition ICU4XBidi.hpp:126
ICU4XReorderedIndexMap reorder_visual(const diplomat::span< const uint8_t > levels) const
Definition ICU4XBidi.hpp:136
Definition ICU4XDataProvider.hpp:32
Definition ICU4XReorderedIndexMap.hpp:31
Definition diplomat_runtime.hpp:84
Definition diplomat_runtime.hpp:144
constexpr T * data() const noexcept
Definition diplomat_runtime.hpp:152
constexpr size_t size() const noexcept
Definition diplomat_runtime.hpp:155
Definition diplomat_runtime.hpp:69
Definition diplomat_runtime.hpp:55