diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2011-10-04 15:04:21 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-01 12:03:36 +0100 |
commit | 12e4cc3374cb04e99ec28c67e61dd3be865344b9 (patch) | |
tree | dee991584b855d8d7b2740bb85199270d5e21f7e /src/3rdparty/v8/src/api.cc | |
parent | 6ea7510e6eb4d425c0b639cb3f95556324342f89 (diff) |
[V8] Add hashing and comparison methods to v8::String
This allows us to more rapidly search for a v8::String inside a hash
of QStrings.
Change-Id: Ied9625aeefba730816d9ed7aa609a36592e5fc33
Reviewed-by: Simon Hausmann <simon.hausmann@nokia.com>
Diffstat (limited to 'src/3rdparty/v8/src/api.cc')
-rw-r--r-- | src/3rdparty/v8/src/api.cc | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/3rdparty/v8/src/api.cc b/src/3rdparty/v8/src/api.cc index 40a89e2..4292238 100644 --- a/src/3rdparty/v8/src/api.cc +++ b/src/3rdparty/v8/src/api.cc @@ -3633,6 +3633,57 @@ int String::Utf8Length() const { } +uint32_t String::Hash() const { + i::Handle<i::String> str = Utils::OpenHandle(this); + if (IsDeadCheck(str->GetIsolate(), "v8::String::Hash()")) return 0; + return str->Hash(); +} + + +String::CompleteHashData String::CompleteHash() const { + i::Handle<i::String> str = Utils::OpenHandle(this); + if (IsDeadCheck(str->GetIsolate(), "v8::String::CompleteHash()")) return CompleteHashData(); + CompleteHashData result; + result.length = str->length(); + result.hash = str->Hash(); + if (str->IsSeqString()) + result.symbol_id = i::SeqString::cast(*str)->symbol_id(); + return result; +} + + +uint32_t String::ComputeHash(uint16_t *string, int length) { + return i::HashSequentialString<i::uc16>(string, length) >> i::String::kHashShift; +} + + +uint32_t String::ComputeHash(char *string, int length) { + return i::HashSequentialString<char>(string, length) >> i::String::kHashShift; +} + + +uint16_t String::GetCharacter(int index) +{ + i::Handle<i::String> str = Utils::OpenHandle(this); + return str->Get(index); +} + + +bool String::Equals(uint16_t *string, int length) { + i::Handle<i::String> str = Utils::OpenHandle(this); + if (IsDeadCheck(str->GetIsolate(), "v8::String::Equals()")) return 0; + return str->SlowEqualsExternal(string, length); +} + + +bool String::Equals(char *string, int length) +{ + i::Handle<i::String> str = Utils::OpenHandle(this); + if (IsDeadCheck(str->GetIsolate(), "v8::String::Equals()")) return 0; + return str->SlowEqualsExternal(string, length); +} + + int String::WriteUtf8(char* buffer, int capacity, int* nchars_ref, |