V8 Project
v8::Utf8LengthHelper::Visitor Class Reference
+ Collaboration diagram for v8::Utf8LengthHelper::Visitor:

Public Member Functions

 Visitor ()
 
void VisitOneByteString (const uint8_t *chars, int length)
 
void VisitTwoByteString (const uint16_t *chars, int length)
 

Static Public Member Functions

static i::ConsStringVisitFlat (i::String *string, int *length, uint8_t *state)
 

Private Member Functions

 DISALLOW_COPY_AND_ASSIGN (Visitor)
 

Private Attributes

int utf8_length_
 
uint8_t state_
 

Detailed Description

Definition at line 4389 of file api.cc.

Constructor & Destructor Documentation

◆ Visitor()

v8::Utf8LengthHelper::Visitor::Visitor ( )
inline

Definition at line 4391 of file api.cc.

static const uint8_t kInitialState
Definition: api.cc:4379

Member Function Documentation

◆ DISALLOW_COPY_AND_ASSIGN()

v8::Utf8LengthHelper::Visitor::DISALLOW_COPY_AND_ASSIGN ( Visitor  )
private

◆ VisitFlat()

static i::ConsString* v8::Utf8LengthHelper::Visitor::VisitFlat ( i::String string,
int length,
uint8_t *  state 
)
inlinestatic

Definition at line 4423 of file api.cc.

4425  {
4426  Visitor visitor;
4427  i::ConsString* cons_string = i::String::VisitFlat(&visitor, string);
4428  *length = visitor.utf8_length_;
4429  *state = visitor.state_;
4430  return cons_string;
4431  }
static ConsString * VisitFlat(Visitor *visitor, String *string, int offset=0)
Definition: objects-inl.h:3416

References state_, utf8_length_, and v8::internal::String::VisitFlat().

Referenced by v8::Utf8LengthHelper::Calculate(), and v8::Utf8Length().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ VisitOneByteString()

void v8::Utf8LengthHelper::Visitor::VisitOneByteString ( const uint8_t *  chars,
int  length 
)
inline

Definition at line 4393 of file api.cc.

4393  {
4394  int utf8_length = 0;
4395  // Add in length 1 for each non-Latin1 character.
4396  for (int i = 0; i < length; i++) {
4397  utf8_length += *chars++ >> 7;
4398  }
4399  // Add in length 1 for each character.
4400  utf8_length_ = utf8_length + length;
4402  }

References v8::Utf8LengthHelper::kInitialState, state_, and utf8_length_.

◆ VisitTwoByteString()

void v8::Utf8LengthHelper::Visitor::VisitTwoByteString ( const uint16_t *  chars,
int  length 
)
inline

Definition at line 4404 of file api.cc.

4404  {
4405  int utf8_length = 0;
4406  int last_character = unibrow::Utf16::kNoPreviousCharacter;
4407  for (int i = 0; i < length; i++) {
4408  uint16_t c = chars[i];
4409  utf8_length += unibrow::Utf8::Length(c, last_character);
4410  last_character = c;
4411  }
4412  utf8_length_ = utf8_length;
4413  uint8_t state = 0;
4414  if (unibrow::Utf16::IsTrailSurrogate(chars[0])) {
4416  }
4417  if (unibrow::Utf16::IsLeadSurrogate(chars[length-1])) {
4418  state |= kEndsWithLeadingSurrogate;
4419  }
4420  state_ = state;
4421  }
static const int kNoPreviousCharacter
Definition: unicode.h:97
static bool IsTrailSurrogate(int code)
Definition: unicode.h:89
static bool IsLeadSurrogate(int code)
Definition: unicode.h:85
static uchar Length(uchar chr, int previous)
Definition: unicode-inl.h:140
@ kEndsWithLeadingSurrogate
Definition: api.cc:4371
@ kStartsWithTrailingSurrogate
Definition: api.cc:4372
unsigned short uint16_t
Definition: unicode.cc:23

References unibrow::Utf16::IsLeadSurrogate(), unibrow::Utf16::IsTrailSurrogate(), v8::Utf8LengthHelper::kEndsWithLeadingSurrogate, unibrow::Utf16::kNoPreviousCharacter, v8::Utf8LengthHelper::kStartsWithTrailingSurrogate, unibrow::Utf8::Length(), state_, and utf8_length_.

+ Here is the call graph for this function:

Member Data Documentation

◆ state_

uint8_t v8::Utf8LengthHelper::Visitor::state_
private

Definition at line 4435 of file api.cc.

Referenced by VisitFlat(), VisitOneByteString(), and VisitTwoByteString().

◆ utf8_length_

int v8::Utf8LengthHelper::Visitor::utf8_length_
private

Definition at line 4434 of file api.cc.

Referenced by VisitFlat(), VisitOneByteString(), and VisitTwoByteString().


The documentation for this class was generated from the following file: