diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WTF/wtf/text/StringBuilder.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WTF/wtf/text/StringBuilder.h')
-rw-r--r-- | Source/WTF/wtf/text/StringBuilder.h | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/Source/WTF/wtf/text/StringBuilder.h b/Source/WTF/wtf/text/StringBuilder.h index 26be90633..d02737a02 100644 --- a/Source/WTF/wtf/text/StringBuilder.h +++ b/Source/WTF/wtf/text/StringBuilder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009, 2010, 2012, 2013 Apple Inc. All rights reserved. + * Copyright (C) 2009-2010, 2012-2013, 2016 Apple Inc. All rights reserved. * Copyright (C) 2012 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -28,6 +28,8 @@ #define StringBuilder_h #include <wtf/text/AtomicString.h> +#include <wtf/text/IntegerToStringConversion.h> +#include <wtf/text/StringView.h> #include <wtf/text/WTFString.h> namespace WTF { @@ -40,7 +42,6 @@ public: StringBuilder() : m_length(0) , m_is8Bit(true) - , m_valid16BitShadowLength(0) , m_bufferCharacters8(0) { } @@ -50,6 +51,11 @@ public: ALWAYS_INLINE void append(const char* characters, unsigned length) { append(reinterpret_cast<const LChar*>(characters), length); } + void append(const AtomicString& atomicString) + { + append(atomicString.string()); + } + void append(const String& string) { if (!string.length()) @@ -89,6 +95,21 @@ public: append(other.characters16(), other.m_length); } + void append(StringView stringView) + { + if (stringView.is8Bit()) + append(stringView.characters8(), stringView.length()); + else + append(stringView.characters16(), stringView.length()); + } + +#if USE(CF) + WTF_EXPORT_PRIVATE void append(CFStringRef); +#endif +#if USE(CF) && defined(__OBJC__) + void append(NSString *string) { append((__bridge CFStringRef)string); } +#endif + void append(const String& string, unsigned offset, unsigned length) { if (!string.length()) @@ -151,6 +172,8 @@ public: append(U16_TRAIL(c)); } + WTF_EXPORT_PRIVATE void appendQuotedJSONString(const String&); + template<unsigned charactersCount> ALWAYS_INLINE void appendLiteral(const char (&characters)[charactersCount]) { append(characters, charactersCount - 1); } @@ -248,32 +271,15 @@ public: return m_buffer->characters16(); } - const UChar* characters() const { return deprecatedCharacters(); } // FIXME: Delete this. - const UChar* deprecatedCharacters() const - { - if (!m_length) - return 0; - if (!m_string.isNull()) - return m_string.deprecatedCharacters(); - ASSERT(m_buffer); - if (m_buffer->has16BitShadow() && m_valid16BitShadowLength < m_length) - m_buffer->upconvertCharacters(m_valid16BitShadowLength, m_length); - - m_valid16BitShadowLength = m_length; - - return m_buffer->deprecatedCharacters(); - } - bool is8Bit() const { return m_is8Bit; } void clear() { m_length = 0; m_string = String(); - m_buffer = 0; + m_buffer = nullptr; m_bufferCharacters8 = 0; m_is8Bit = true; - m_valid16BitShadowLength = 0; } void swap(StringBuilder& stringBuilder) @@ -282,8 +288,8 @@ public: m_string.swap(stringBuilder.m_string); m_buffer.swap(stringBuilder.m_buffer); std::swap(m_is8Bit, stringBuilder.m_is8Bit); - std::swap(m_valid16BitShadowLength, stringBuilder.m_valid16BitShadowLength); std::swap(m_bufferCharacters8, stringBuilder.m_bufferCharacters8); + ASSERT(!m_buffer || m_buffer->length() >= m_length); } private: @@ -304,7 +310,6 @@ private: mutable String m_string; RefPtr<StringImpl> m_buffer; bool m_is8Bit; - mutable unsigned m_valid16BitShadowLength; union { LChar* m_bufferCharacters8; UChar* m_bufferCharacters16; @@ -364,6 +369,12 @@ inline bool operator!=(const StringBuilder& a, const String& b) { return !equal( 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); } +template<> struct IntegerToStringConversionTrait<StringBuilder> { + using ReturnType = void; + using AdditionalArgumentType = StringBuilder; + static void flush(LChar* characters, unsigned length, StringBuilder* stringBuilder) { stringBuilder->append(characters, length); } +}; + } // namespace WTF using WTF::StringBuilder; |