Ada
3.4.3
Fast spec-compliant URL parser
Toggle main menu visibility
Loading...
Searching...
No Matches
unicode-inl.h
Go to the documentation of this file.
1
5
#ifndef ADA_UNICODE_INL_H
6
#define ADA_UNICODE_INL_H
7
#include "
ada/unicode.h
"
8
#include "
ada/character_sets.h
"
9
18
namespace
ada::unicode
{
19
ada_really_inline
size_t
percent_encode_index
(
const
std::string_view input,
20
const
uint8_t character_set[]) {
21
const
char
* data = input.data();
22
const
size_t
size = input.size();
23
24
// Process 8 bytes at a time using unrolled loop
25
size_t
i = 0;
26
for
(; i + 8 <= size; i += 8) {
27
unsigned
char
chunk[8];
28
std::memcpy(&chunk, data + i,
29
8);
// entices compiler to unconditionally process 8 characters
30
31
// Check 8 characters at once
32
for
(
size_t
j = 0; j < 8; j++) {
33
if
(
character_sets::bit_at
(character_set, chunk[j])) {
34
return
i + j;
35
}
36
}
37
}
38
39
// Handle remaining bytes
40
for
(; i < size; i++) {
41
if
(
character_sets::bit_at
(character_set, data[i])) {
42
return
i;
43
}
44
}
45
46
return
size;
47
}
48
}
// namespace ada::unicode
49
50
#endif
// ADA_UNICODE_INL_H
character_sets.h
Declaration of the character sets used by unicode functions.
ada_really_inline
#define ada_really_inline
Definition
common_defs.h:85
ada::character_sets::bit_at
ada_really_inline constexpr bool bit_at(const uint8_t a[], const uint8_t i)
Definition
character_sets-inl.h:515
ada::unicode
Includes the declarations for unicode operations.
ada::unicode::percent_encode_index
ada_really_inline size_t percent_encode_index(const std::string_view input, const uint8_t character_set[])
Definition
unicode-inl.h:19
unicode.h
Definitions for all unicode specific functions.