Index: third_party/WebKit/Source/wtf/text/AtomicStringTable.cpp |
diff --git a/third_party/WebKit/Source/wtf/text/AtomicStringTable.cpp b/third_party/WebKit/Source/wtf/text/AtomicStringTable.cpp |
deleted file mode 100644 |
index ee897fa377b117ea54cbfcc3a10d5e686fabba6a..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/wtf/text/AtomicStringTable.cpp |
+++ /dev/null |
@@ -1,221 +0,0 @@ |
-// Copyright 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "wtf/text/AtomicStringTable.h" |
- |
-#include "wtf/text/StringHash.h" |
-#include "wtf/text/UTF8.h" |
- |
-namespace WTF { |
- |
-using namespace Unicode; |
- |
-AtomicStringTable::AtomicStringTable() { |
- for (StringImpl* string : StringImpl::allStaticStrings().values()) |
- add(string); |
-} |
- |
-AtomicStringTable::~AtomicStringTable() { |
- for (StringImpl* string : m_table) { |
- if (!string->isStatic()) { |
- DCHECK(string->isAtomic()); |
- string->setIsAtomic(false); |
- } |
- } |
-} |
- |
-void AtomicStringTable::reserveCapacity(unsigned size) { |
- m_table.reserveCapacityForSize(size); |
-} |
- |
-template <typename T, typename HashTranslator> |
-PassRefPtr<StringImpl> AtomicStringTable::addToStringTable(const T& value) { |
- HashSet<StringImpl*>::AddResult addResult = |
- m_table.addWithTranslator<HashTranslator>(value); |
- |
- // If the string is newly-translated, then we need to adopt it. |
- // The boolean in the pair tells us if that is so. |
- return addResult.isNewEntry ? adoptRef(*addResult.storedValue) |
- : *addResult.storedValue; |
-} |
- |
-template <typename CharacterType> |
-struct HashTranslatorCharBuffer { |
- const CharacterType* s; |
- unsigned length; |
-}; |
- |
-typedef HashTranslatorCharBuffer<UChar> UCharBuffer; |
-struct UCharBufferTranslator { |
- static unsigned hash(const UCharBuffer& buf) { |
- return StringHasher::computeHashAndMaskTop8Bits(buf.s, buf.length); |
- } |
- |
- static bool equal(StringImpl* const& str, const UCharBuffer& buf) { |
- return WTF::equal(str, buf.s, buf.length); |
- } |
- |
- static void translate(StringImpl*& location, |
- const UCharBuffer& buf, |
- unsigned hash) { |
- location = StringImpl::create8BitIfPossible(buf.s, buf.length).leakRef(); |
- location->setHash(hash); |
- location->setIsAtomic(true); |
- } |
-}; |
- |
-struct HashAndUTF8Characters { |
- unsigned hash; |
- const char* characters; |
- unsigned length; |
- unsigned utf16Length; |
-}; |
- |
-struct HashAndUTF8CharactersTranslator { |
- static unsigned hash(const HashAndUTF8Characters& buffer) { |
- return buffer.hash; |
- } |
- |
- static bool equal(StringImpl* const& string, |
- const HashAndUTF8Characters& buffer) { |
- if (buffer.utf16Length != string->length()) |
- return false; |
- |
- // If buffer contains only ASCII characters UTF-8 and UTF16 length are the |
- // same. |
- if (buffer.utf16Length != buffer.length) { |
- if (string->is8Bit()) { |
- const LChar* characters8 = string->characters8(); |
- return equalLatin1WithUTF8(characters8, characters8 + string->length(), |
- buffer.characters, |
- buffer.characters + buffer.length); |
- } |
- const UChar* characters16 = string->characters16(); |
- return equalUTF16WithUTF8(characters16, characters16 + string->length(), |
- buffer.characters, |
- buffer.characters + buffer.length); |
- } |
- |
- if (string->is8Bit()) { |
- const LChar* stringCharacters = string->characters8(); |
- |
- for (unsigned i = 0; i < buffer.length; ++i) { |
- DCHECK(isASCII(buffer.characters[i])); |
- if (stringCharacters[i] != buffer.characters[i]) |
- return false; |
- } |
- |
- return true; |
- } |
- |
- const UChar* stringCharacters = string->characters16(); |
- |
- for (unsigned i = 0; i < buffer.length; ++i) { |
- DCHECK(isASCII(buffer.characters[i])); |
- if (stringCharacters[i] != buffer.characters[i]) |
- return false; |
- } |
- |
- return true; |
- } |
- |
- static void translate(StringImpl*& location, |
- const HashAndUTF8Characters& buffer, |
- unsigned hash) { |
- UChar* target; |
- RefPtr<StringImpl> newString = |
- StringImpl::createUninitialized(buffer.utf16Length, target); |
- |
- bool isAllASCII; |
- const char* source = buffer.characters; |
- if (convertUTF8ToUTF16(&source, source + buffer.length, &target, |
- target + buffer.utf16Length, |
- &isAllASCII) != conversionOK) |
- NOTREACHED(); |
- |
- if (isAllASCII) |
- newString = StringImpl::create(buffer.characters, buffer.length); |
- |
- location = newString.leakRef(); |
- location->setHash(hash); |
- location->setIsAtomic(true); |
- } |
-}; |
- |
-PassRefPtr<StringImpl> AtomicStringTable::add(const UChar* s, unsigned length) { |
- if (!s) |
- return nullptr; |
- |
- if (!length) |
- return StringImpl::empty; |
- |
- UCharBuffer buffer = {s, length}; |
- return addToStringTable<UCharBuffer, UCharBufferTranslator>(buffer); |
-} |
- |
-typedef HashTranslatorCharBuffer<LChar> LCharBuffer; |
-struct LCharBufferTranslator { |
- static unsigned hash(const LCharBuffer& buf) { |
- return StringHasher::computeHashAndMaskTop8Bits(buf.s, buf.length); |
- } |
- |
- static bool equal(StringImpl* const& str, const LCharBuffer& buf) { |
- return WTF::equal(str, buf.s, buf.length); |
- } |
- |
- static void translate(StringImpl*& location, |
- const LCharBuffer& buf, |
- unsigned hash) { |
- location = StringImpl::create(buf.s, buf.length).leakRef(); |
- location->setHash(hash); |
- location->setIsAtomic(true); |
- } |
-}; |
- |
-PassRefPtr<StringImpl> AtomicStringTable::add(const LChar* s, unsigned length) { |
- if (!s) |
- return nullptr; |
- |
- if (!length) |
- return StringImpl::empty; |
- |
- LCharBuffer buffer = {s, length}; |
- return addToStringTable<LCharBuffer, LCharBufferTranslator>(buffer); |
-} |
- |
-StringImpl* AtomicStringTable::add(StringImpl* string) { |
- if (!string->length()) |
- return StringImpl::empty; |
- |
- StringImpl* result = *m_table.insert(string).storedValue; |
- |
- if (!result->isAtomic()) |
- result->setIsAtomic(true); |
- |
- DCHECK(!string->isStatic() || result->isStatic()); |
- return result; |
-} |
- |
-PassRefPtr<StringImpl> AtomicStringTable::addUTF8(const char* charactersStart, |
- const char* charactersEnd) { |
- HashAndUTF8Characters buffer; |
- buffer.characters = charactersStart; |
- buffer.hash = calculateStringHashAndLengthFromUTF8MaskingTop8Bits( |
- charactersStart, charactersEnd, buffer.length, buffer.utf16Length); |
- |
- if (!buffer.hash) |
- return nullptr; |
- |
- return addToStringTable<HashAndUTF8Characters, |
- HashAndUTF8CharactersTranslator>(buffer); |
-} |
- |
-void AtomicStringTable::remove(StringImpl* string) { |
- DCHECK(string->isAtomic()); |
- auto iterator = m_table.find(string); |
- RELEASE_ASSERT(iterator != m_table.end()); |
- m_table.erase(iterator); |
-} |
- |
-} // namespace WTF |