Loading...
Searching...
No Matches
unicode-inl.h
Go to the documentation of this file.
#ifndef ADA_UNICODE_INL_H
#define ADA_UNICODE_INL_H
#include "ada/unicode.h"
#include "ada/character_sets.h"
namespace ada::unicode {
ada_really_inline size_t percent_encode_index(const std::string_view input,
const uint8_t character_set[]) {
const char* data = input.data();
const size_t size = input.size();
// Process 8 bytes at a time using unrolled loop
size_t i = 0;
for (; i + 8 <= size; i += 8) {
unsigned char chunk[8];
std::memcpy(&chunk, data + i,
8); // entices compiler to unconditionally process 8 characters
// Check 8 characters at once
for (size_t j = 0; j < 8; j++) {
if (character_sets::bit_at(character_set, chunk[j])) {
return i + j;
}
}
}
// Handle remaining bytes
for (; i < size; i++) {
if (character_sets::bit_at(character_set, data[i])) {
return i;
}
}
return size;
}
} // namespace ada::unicode
#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.