1 #ifndef icu4x_HangulSyllableType_D_HPP 2 #define icu4x_HangulSyllableType_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 class HangulSyllableType; 15 } 16 17 18 namespace icu4x { 19 namespace capi { 20 enum HangulSyllableType { 21 HangulSyllableType_NotApplicable = 0, 22 HangulSyllableType_LeadingJamo = 1, 23 HangulSyllableType_VowelJamo = 2, 24 HangulSyllableType_TrailingJamo = 3, 25 HangulSyllableType_LeadingVowelSyllable = 4, 26 HangulSyllableType_LeadingVowelTrailingSyllable = 5, 27 }; 28 29 typedef struct HangulSyllableType_option {union { HangulSyllableType ok; }; bool is_ok; } HangulSyllableType_option; 30 } // namespace capi 31 } // namespace 32 33 namespace icu4x { 34 class HangulSyllableType { 35 public: 36 enum Value { 37 NotApplicable = 0, 38 LeadingJamo = 1, 39 VowelJamo = 2, 40 TrailingJamo = 3, 41 LeadingVowelSyllable = 4, 42 LeadingVowelTrailingSyllable = 5, 43 }; 44 45 HangulSyllableType() = default; 46 // Implicit conversions between enum and ::Value HangulSyllableType(Value v)47 constexpr HangulSyllableType(Value v) : value(v) {} operator Value() const48 constexpr operator Value() const { return value; } 49 // Prevent usage as boolean value 50 explicit operator bool() const = delete; 51 52 inline static icu4x::HangulSyllableType for_char(char32_t ch); 53 54 inline uint8_t to_integer_value(); 55 56 inline static std::optional<icu4x::HangulSyllableType> from_integer_value(uint8_t other); 57 58 inline icu4x::capi::HangulSyllableType AsFFI() const; 59 inline static icu4x::HangulSyllableType FromFFI(icu4x::capi::HangulSyllableType c_enum); 60 private: 61 Value value; 62 }; 63 64 } // namespace 65 #endif // icu4x_HangulSyllableType_D_HPP 66