9template <
class InputPtr>
10#if SIMDUTF_CPLUSPLUS20
11 requires simdutf::detail::indexes_into_byte_like<InputPtr>
13simdutf_warn_unused simdutf_constexpr23
bool validate(InputPtr data,
14 size_t len)
noexcept {
17#if SIMDUTF_CPLUSPLUS23
23 for (; pos + 16 <= len; pos += 16) {
25 std::memcpy(&v1, data + pos,
sizeof(uint64_t));
27 std::memcpy(&v2, data + pos +
sizeof(uint64_t),
sizeof(uint64_t));
29 if ((v & 0x8080808080808080) != 0) {
36 for (; pos < len; pos++) {
37 if (
static_cast<std::uint8_t
>(data[pos]) >= 0b10000000) {
43template <
class InputPtr>
44#if SIMDUTF_CPLUSPLUS20
45 requires simdutf::detail::indexes_into_byte_like<InputPtr>
47simdutf_warn_unused simdutf_constexpr23 result
48validate_with_errors(InputPtr data,
size_t len)
noexcept {
50#if SIMDUTF_CPLUSPLUS23
56 for (; pos + 16 <= len; pos += 16) {
58 std::memcpy(&v1, data + pos,
sizeof(uint64_t));
60 std::memcpy(&v2, data + pos +
sizeof(uint64_t),
sizeof(uint64_t));
62 if ((v & 0x8080808080808080) != 0) {
63 for (; pos < len; pos++) {
64 if (
static_cast<std::uint8_t
>(data[pos]) >= 0b10000000) {
65 return result(error_code::TOO_LARGE, pos);
73 for (; pos < len; pos++) {
74 if (
static_cast<std::uint8_t
>(data[pos]) >= 0b10000000) {
75 return result(error_code::TOO_LARGE, pos);
78 return result(error_code::SUCCESS, pos);