Index: third_party/WebKit/Source/wtf/text/StringBuilder.h |
diff --git a/third_party/WebKit/Source/wtf/text/StringBuilder.h b/third_party/WebKit/Source/wtf/text/StringBuilder.h |
index a715bcc460f6b73d102dd02b9c2e5193323638d3..b832673877bf9291e8ae6ba1b941f7f7d53dd734 100644 |
--- a/third_party/WebKit/Source/wtf/text/StringBuilder.h |
+++ b/third_party/WebKit/Source/wtf/text/StringBuilder.h |
@@ -1,300 +1,9 @@ |
-/* |
- * Copyright (C) 2009, 2010, 2012, 2013 Apple Inc. All rights reserved. |
- * Copyright (C) 2012 Google Inc. All rights reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions |
- * are met: |
- * 1. Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * 2. Redistributions in binary form must reproduce the above copyright |
- * notice, this list of conditions and the following disclaimer in the |
- * documentation and/or other materials provided with the distribution. |
- * |
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY |
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR |
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- */ |
+// Copyright 2017 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. |
-#ifndef StringBuilder_h |
-#define StringBuilder_h |
+#include "platform/wtf/text/StringBuilder.h" |
-#include "wtf/WTFExport.h" |
-#include "wtf/text/AtomicString.h" |
-#include "wtf/text/StringView.h" |
-#include "wtf/text/WTFString.h" |
- |
-namespace WTF { |
- |
-class WTF_EXPORT StringBuilder { |
- WTF_MAKE_NONCOPYABLE(StringBuilder); |
- |
- public: |
- StringBuilder() : m_buffer(nullptr), m_length(0), m_is8Bit(true) {} |
- |
- ~StringBuilder() { clear(); } |
- |
- void append(const UChar*, unsigned length); |
- void append(const LChar*, unsigned length); |
- |
- ALWAYS_INLINE void append(const char* characters, unsigned length) { |
- append(reinterpret_cast<const LChar*>(characters), length); |
- } |
- |
- void append(const StringBuilder& other) { |
- if (!other.m_length) |
- return; |
- |
- if (!m_length && !hasBuffer() && !other.m_string.isNull()) { |
- m_string = other.m_string; |
- m_length = other.m_string.length(); |
- m_is8Bit = other.m_string.is8Bit(); |
- return; |
- } |
- |
- if (other.is8Bit()) |
- append(other.characters8(), other.m_length); |
- else |
- append(other.characters16(), other.m_length); |
- } |
- |
- // NOTE: The semantics of this are different than StringView(..., offset, |
- // length) in that an invalid offset or invalid length is a no-op instead of |
- // an error. |
- // TODO(esprehn): We should probably unify the semantics instead. |
- void append(const StringView& string, unsigned offset, unsigned length) { |
- unsigned extent = offset + length; |
- if (extent < offset || extent > string.length()) |
- return; |
- |
- // We can't do this before the above check since StringView's constructor |
- // doesn't accept invalid offsets or lengths. |
- append(StringView(string, offset, length)); |
- } |
- |
- void append(const StringView& string) { |
- if (string.isEmpty()) |
- return; |
- |
- // If we're appending to an empty builder, and there is not a buffer |
- // (reserveCapacity has not been called), then share the impl if |
- // possible. |
- // |
- // This is important to avoid string copies inside dom operations like |
- // Node::textContent when there's only a single Text node child, or |
- // inside the parser in the common case when flushing buffered text to |
- // a Text node. |
- StringImpl* impl = string.sharedImpl(); |
- if (!m_length && !hasBuffer() && impl) { |
- m_string = impl; |
- m_length = impl->length(); |
- m_is8Bit = impl->is8Bit(); |
- return; |
- } |
- |
- if (string.is8Bit()) |
- append(string.characters8(), string.length()); |
- else |
- append(string.characters16(), string.length()); |
- } |
- |
- void append(UChar c) { |
- if (m_is8Bit && c <= 0xFF) { |
- append(static_cast<LChar>(c)); |
- return; |
- } |
- ensureBuffer16(1); |
- m_buffer16->push_back(c); |
- ++m_length; |
- } |
- |
- void append(LChar c) { |
- if (!m_is8Bit) { |
- append(static_cast<UChar>(c)); |
- return; |
- } |
- ensureBuffer8(1); |
- m_buffer8->push_back(c); |
- ++m_length; |
- } |
- |
- void append(char c) { append(static_cast<LChar>(c)); } |
- |
- void append(UChar32 c) { |
- if (U_IS_BMP(c)) { |
- append(static_cast<UChar>(c)); |
- return; |
- } |
- append(U16_LEAD(c)); |
- append(U16_TRAIL(c)); |
- } |
- |
- void appendNumber(int); |
- void appendNumber(unsigned); |
- void appendNumber(long); |
- void appendNumber(unsigned long); |
- void appendNumber(long long); |
- void appendNumber(unsigned long long); |
- void appendNumber(double, unsigned precision = 6); |
- |
- String toString(); |
- AtomicString toAtomicString(); |
- String substring(unsigned start, unsigned length) const; |
- |
- unsigned length() const { return m_length; } |
- bool isEmpty() const { return !m_length; } |
- |
- unsigned capacity() const; |
- void reserveCapacity(unsigned newCapacity); |
- |
- // TODO(esprehn): Rename to shrink(). |
- void resize(unsigned newSize); |
- |
- UChar operator[](unsigned i) const { |
- SECURITY_DCHECK(i < m_length); |
- if (m_is8Bit) |
- return characters8()[i]; |
- return characters16()[i]; |
- } |
- |
- const LChar* characters8() const { |
- DCHECK(m_is8Bit); |
- if (!length()) |
- return nullptr; |
- if (!m_string.isNull()) |
- return m_string.characters8(); |
- DCHECK(m_buffer8); |
- return m_buffer8->data(); |
- } |
- |
- const UChar* characters16() const { |
- DCHECK(!m_is8Bit); |
- if (!length()) |
- return nullptr; |
- if (!m_string.isNull()) |
- return m_string.characters16(); |
- DCHECK(m_buffer16); |
- return m_buffer16->data(); |
- } |
- |
- bool is8Bit() const { return m_is8Bit; } |
- |
- void clear(); |
- void swap(StringBuilder&); |
- |
- private: |
- static const unsigned kInlineBufferSize = 16; |
- static unsigned initialBufferSize() { return kInlineBufferSize; } |
- |
- typedef Vector<LChar, kInlineBufferSize> Buffer8; |
- typedef Vector<UChar, kInlineBufferSize> Buffer16; |
- |
- void ensureBuffer8(unsigned addedSize) { |
- DCHECK(m_is8Bit); |
- if (!hasBuffer()) |
- createBuffer8(addedSize); |
- } |
- |
- void ensureBuffer16(unsigned addedSize) { |
- if (m_is8Bit || !hasBuffer()) |
- createBuffer16(addedSize); |
- } |
- |
- void createBuffer8(unsigned addedSize); |
- void createBuffer16(unsigned addedSize); |
- void clearBuffer(); |
- bool hasBuffer() const { return m_buffer; } |
- |
- String m_string; |
- union { |
- Buffer8* m_buffer8; |
- Buffer16* m_buffer16; |
- void* m_buffer; |
- }; |
- unsigned m_length; |
- bool m_is8Bit; |
-}; |
- |
-template <typename CharType> |
-bool equal(const StringBuilder& s, const CharType* buffer, unsigned length) { |
- if (s.length() != length) |
- return false; |
- |
- if (s.is8Bit()) |
- return equal(s.characters8(), buffer, length); |
- |
- return equal(s.characters16(), buffer, length); |
-} |
- |
-template <typename CharType> |
-bool equalIgnoringCase(const StringBuilder& s, |
- const CharType* buffer, |
- unsigned length) { |
- if (s.length() != length) |
- return false; |
- |
- if (s.is8Bit()) |
- return equalIgnoringCase(s.characters8(), buffer, length); |
- |
- return equalIgnoringCase(s.characters16(), buffer, length); |
-} |
- |
-// Unicode aware case insensitive string matching. Non-ASCII characters might |
-// match to ASCII characters. This function is rarely used to implement web |
-// platform features. |
-inline bool equalIgnoringCase(const StringBuilder& s, const char* string) { |
- return equalIgnoringCase(s, reinterpret_cast<const LChar*>(string), |
- strlen(string)); |
-} |
- |
-template <typename StringType> |
-bool equal(const StringBuilder& a, const StringType& b) { |
- if (a.length() != b.length()) |
- return false; |
- |
- if (!a.length()) |
- return true; |
- |
- if (a.is8Bit()) { |
- if (b.is8Bit()) |
- return equal(a.characters8(), b.characters8(), a.length()); |
- return equal(a.characters8(), b.characters16(), a.length()); |
- } |
- |
- if (b.is8Bit()) |
- return equal(a.characters16(), b.characters8(), a.length()); |
- return equal(a.characters16(), b.characters16(), a.length()); |
-} |
- |
-inline bool operator==(const StringBuilder& a, const StringBuilder& b) { |
- return equal(a, b); |
-} |
-inline bool operator!=(const StringBuilder& a, const StringBuilder& b) { |
- return !equal(a, b); |
-} |
-inline bool operator==(const StringBuilder& a, const String& b) { |
- return equal(a, b); |
-} |
-inline bool operator!=(const StringBuilder& a, const String& b) { |
- return !equal(a, b); |
-} |
-inline bool operator==(const String& a, const StringBuilder& b) { |
- return equal(b, a); |
-} |
-inline bool operator!=(const String& a, const StringBuilder& b) { |
- return !equal(b, a); |
-} |
- |
-} // namespace WTF |
- |
-using WTF::StringBuilder; |
- |
-#endif // StringBuilder_h |
+// The contents of this header was moved to platform/wtf as part of |
+// WTF migration project. See the following post for details: |
+// https://groups.google.com/a/chromium.org/d/msg/blink-dev/tLdAZCTlcAA/bYXVT8gYCAAJ |