5#ifndef V8_STRINGS_UNICODE_DECODER_H_
6#define V8_STRINGS_UNICODE_DECODER_H_
19 const uint8_t*
start = chars;
20 const uint8_t* limit = chars +
length;
26 return static_cast<uint32_t
>(chars -
start);
33 while (chars +
sizeof(uintptr_t) <= limit) {
34 if (*
reinterpret_cast<const uintptr_t*
>(chars) & non_one_byte_mask) {
35 return static_cast<uint32_t
>(chars -
start);
37 chars +=
sizeof(uintptr_t);
41 while (chars < limit) {
43 return static_cast<uint32_t
>(chars -
start);
48 return static_cast<uint32_t
>(chars -
start);
51template <
class Decoder>
57 return static_cast<const Decoder&
>(*this).is_invalid();
70 template <
typename Char>
94#if V8_ENABLE_WEBASSEMBLY
98class Wtf8Decoder :
public Utf8DecoderBase<Wtf8Decoder> {
101 : Utf8DecoderBase(data) {}
103 bool is_invalid()
const {
return encoding_ == Encoding::kInvalid; }
108class StrictUtf8Decoder :
public Utf8DecoderBase<StrictUtf8Decoder> {
110 explicit StrictUtf8Decoder(base::Vector<const uint8_t> data)
111 : Utf8DecoderBase(data) {}
113 bool is_invalid()
const {
return encoding_ == Encoding::kInvalid; }
static const unsigned kMaxOneByteChar
void Decode(Char *out, base::Vector< const uint8_t > data)
Utf8DecoderBase(base::Vector< const uint8_t > data)
int non_ascii_start() const
Utf8Decoder(base::Vector< const uint8_t > data)
constexpr uintptr_t kUintptrAllBitsSet
uint32_t NonAsciiStart(const uint8_t *chars, uint32_t length)
constexpr int kIntptrSize
#define DCHECK_NE(v1, v2)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
#define V8_EXPORT_PRIVATE
constexpr bool IsAligned(T value, U alignment)