-
Notifications
You must be signed in to change notification settings - Fork 124
Expand file tree
/
Copy pathamalgamation_demo.cpp
More file actions
54 lines (51 loc) · 1.75 KB
/
amalgamation_demo.cpp
File metadata and controls
54 lines (51 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <memory>
#include "simdutf.cpp"
#include "simdutf.h"
int main(int, char *[]) {
#if SIMDUTF_FEATURE_UTF8
const char *source = "1234";
// 4 == strlen(source)
bool validutf8 = simdutf::validate_utf8(source, 4);
if (validutf8) {
puts("valid UTF-8");
} else {
puts("invalid UTF-8");
return EXIT_FAILURE;
}
#endif // SIMDUTF_FEATURE_UTF8
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
// We need a buffer of size where to write the UTF-16LE words.
size_t expected_utf16words = simdutf::utf16_length_from_utf8(source, 4);
std::unique_ptr<char16_t[]> utf16_output{new char16_t[expected_utf16words]};
// convert to UTF-16LE
size_t utf16words =
simdutf::convert_utf8_to_utf16le(source, 4, utf16_output.get());
printf("wrote %zu UTF-16LE words.", utf16words);
// It wrote utf16words * sizeof(char16_t) bytes.
bool validutf16 = simdutf::validate_utf16le(utf16_output.get(), utf16words);
if (validutf16) {
puts("valid UTF-16LE");
} else {
puts("invalid UTF-16LE");
return EXIT_FAILURE;
}
// convert it back:
// We need a buffer of size where to write the UTF-8 words.
size_t expected_utf8words =
simdutf::utf8_length_from_utf16le(utf16_output.get(), utf16words);
std::unique_ptr<char[]> utf8_output{new char[expected_utf8words]};
// convert to UTF-8
size_t utf8words = simdutf::convert_utf16le_to_utf8(
utf16_output.get(), utf16words, utf8_output.get());
printf("wrote %zu UTF-8 words.", utf8words);
std::string final_string(utf8_output.get(), utf8words);
puts(final_string.c_str());
if (final_string != source) {
puts("bad conversion");
return EXIT_FAILURE;
} else {
puts("perfect round trip");
}
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
return EXIT_SUCCESS;
}