11template <
class InputPtr>
12#if SIMDUTF_CPLUSPLUS20
13 requires simdutf::detail::indexes_into_byte_like<InputPtr>
15simdutf_warn_unused simdutf_constexpr23
bool validate(InputPtr data,
16 size_t len)
noexcept {
19#if SIMDUTF_CPLUSPLUS23
25 for (; pos + 16 <= len; pos += 16) {
27 std::memcpy(&v1, data + pos,
sizeof(uint64_t));
29 std::memcpy(&v2, data + pos +
sizeof(uint64_t),
sizeof(uint64_t));
31 if ((v & 0x8080808080808080) != 0) {
38 for (; pos < len; pos++) {
39 if (
static_cast<std::uint8_t
>(data[pos]) >= 0b10000000) {
45template <
class InputPtr>
46#if SIMDUTF_CPLUSPLUS20
47 requires simdutf::detail::indexes_into_byte_like<InputPtr>
49simdutf_warn_unused simdutf_constexpr23 result
50validate_with_errors(InputPtr data,
size_t len)
noexcept {
52#if SIMDUTF_CPLUSPLUS23
58 for (; pos + 16 <= len; pos += 16) {
60 std::memcpy(&v1, data + pos,
sizeof(uint64_t));
62 std::memcpy(&v2, data + pos +
sizeof(uint64_t),
sizeof(uint64_t));
64 if ((v & 0x8080808080808080) != 0) {
65 for (; pos < len; pos++) {
66 if (
static_cast<std::uint8_t
>(data[pos]) >= 0b10000000) {
67 return result(error_code::TOO_LARGE, pos);
75 for (; pos < len; pos++) {
76 if (
static_cast<std::uint8_t
>(data[pos]) >= 0b10000000) {
77 return result(error_code::TOO_LARGE, pos);
80 return result(error_code::SUCCESS, pos);
helpers placed in namespace detail are not a part of the public API