summaryrefslogtreecommitdiff
path: root/Source/WTF/wtf/text/StringBuilder.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WTF/wtf/text/StringBuilder.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WTF/wtf/text/StringBuilder.h')
-rw-r--r--Source/WTF/wtf/text/StringBuilder.h55
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;