/src/assimp/contrib/utf8cpp/source/utf8/cpp17.h
Line | Count | Source |
1 | | // Copyright 2018 Nemanja Trifunovic |
2 | | |
3 | | /* |
4 | | Permission is hereby granted, free of charge, to any person or organization |
5 | | obtaining a copy of the software and accompanying documentation covered by |
6 | | this license (the "Software") to use, reproduce, display, distribute, |
7 | | execute, and transmit the Software, and to prepare derivative works of the |
8 | | Software, and to permit third-parties to whom the Software is furnished to |
9 | | do so, all subject to the following: |
10 | | |
11 | | The copyright notices in the Software and this entire statement, including |
12 | | the above license grant, this restriction and the following disclaimer, |
13 | | must be included in all copies of the Software, in whole or in part, and |
14 | | all derivative works of the Software, unless such copies or derivative |
15 | | works are solely in the form of machine-executable object code generated by |
16 | | a source language processor. |
17 | | |
18 | | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
19 | | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
20 | | FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT |
21 | | SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE |
22 | | FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, |
23 | | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
24 | | DEALINGS IN THE SOFTWARE. |
25 | | */ |
26 | | |
27 | | |
28 | | #ifndef UTF8_FOR_CPP_7e906c01_03a3_4daf_b420_ea7ea952b3c9 |
29 | | #define UTF8_FOR_CPP_7e906c01_03a3_4daf_b420_ea7ea952b3c9 |
30 | | |
31 | | #include "checked.h" |
32 | | #include <string> |
33 | | |
34 | | namespace utf8 |
35 | | { |
36 | | |
37 | | inline void append(char32_t cp, std::string& s) |
38 | 0 | { |
39 | 0 | append(uint32_t(cp), std::back_inserter(s)); |
40 | 0 | } |
41 | | |
42 | | inline std::string utf16to8(std::u16string_view s) |
43 | 0 | { |
44 | 0 | std::string result; |
45 | 0 | utf16to8(s.begin(), s.end(), std::back_inserter(result)); |
46 | 0 | return result; |
47 | 0 | } |
48 | | |
49 | | inline std::u16string utf8to16(std::string_view s) |
50 | 0 | { |
51 | 0 | std::u16string result; |
52 | 0 | utf8to16(s.begin(), s.end(), std::back_inserter(result)); |
53 | 0 | return result; |
54 | 0 | } |
55 | | |
56 | | inline std::string utf32to8(std::u32string_view s) |
57 | 0 | { |
58 | 0 | std::string result; |
59 | 0 | utf32to8(s.begin(), s.end(), std::back_inserter(result)); |
60 | 0 | return result; |
61 | 0 | } |
62 | | |
63 | | inline std::u32string utf8to32(std::string_view s) |
64 | 0 | { |
65 | 0 | std::u32string result; |
66 | 0 | utf8to32(s.begin(), s.end(), std::back_inserter(result)); |
67 | 0 | return result; |
68 | 0 | } |
69 | | |
70 | | inline std::size_t find_invalid(std::string_view s) |
71 | 0 | { |
72 | 0 | std::string_view::const_iterator invalid = find_invalid(s.begin(), s.end()); |
73 | 0 | return (invalid == s.end()) ? std::string_view::npos : static_cast<std::size_t>(invalid - s.begin()); |
74 | 0 | } |
75 | | |
76 | | inline bool is_valid(std::string_view s) |
77 | 0 | { |
78 | 0 | return is_valid(s.begin(), s.end()); |
79 | 0 | } |
80 | | |
81 | | inline std::string replace_invalid(std::string_view s, char32_t replacement) |
82 | 0 | { |
83 | 0 | std::string result; |
84 | 0 | replace_invalid(s.begin(), s.end(), std::back_inserter(result), replacement); |
85 | 0 | return result; |
86 | 0 | } |
87 | | |
88 | | inline std::string replace_invalid(std::string_view s) |
89 | 0 | { |
90 | 0 | std::string result; |
91 | 0 | replace_invalid(s.begin(), s.end(), std::back_inserter(result)); |
92 | 0 | return result; |
93 | 0 | } |
94 | | |
95 | | inline bool starts_with_bom(std::string_view s) |
96 | 0 | { |
97 | 0 | return starts_with_bom(s.begin(), s.end()); |
98 | 0 | } |
99 | | |
100 | | } // namespace utf8 |
101 | | |
102 | | #endif // header guard |
103 | | |