Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1410)

Unified Diff: Source/wtf/text/StringConcatenate.cpp

Issue 559133002: Shrink the binary by not super inlining all string concatenations. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: String concatenations: Now with WTF_EXPORT. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/wtf/text/StringConcatenate.cpp
diff --git a/Source/wtf/text/StringConcatenate.cpp b/Source/wtf/text/StringConcatenate.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ae083e53dae07f245117a963b71a8d38cdea72bf
--- /dev/null
+++ b/Source/wtf/text/StringConcatenate.cpp
@@ -0,0 +1,150 @@
+/*
+ * Copyright 2014 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 "config.h"
+#include "StringConcatenate.h"
+
+// This macro is helpful for testing how many intermediate Strings are created while evaluating an
+// expression containing operator+.
+#ifndef WTF_STRINGTYPEADAPTER_COPIED_WTF_STRING
+#define WTF_STRINGTYPEADAPTER_COPIED_WTF_STRING() ((void)0)
+#endif
+
+void WTF::StringTypeAdapter<char*>::writeTo(LChar* destination)
+{
+ for (unsigned i = 0; i < m_length; ++i)
+ destination[i] = static_cast<LChar>(m_buffer[i]);
+}
+
+void WTF::StringTypeAdapter<char*>::writeTo(UChar* destination)
+{
+ for (unsigned i = 0; i < m_length; ++i) {
+ unsigned char c = m_buffer[i];
+ destination[i] = c;
+ }
+}
+
+WTF::StringTypeAdapter<LChar*>::StringTypeAdapter(LChar* buffer)
+ : m_buffer(buffer)
+ , m_length(strlen(reinterpret_cast<char*>(buffer)))
+{
+}
+
+void WTF::StringTypeAdapter<LChar*>::writeTo(LChar* destination)
+{
+ memcpy(destination, m_buffer, m_length * sizeof(LChar));
+}
+
+void WTF::StringTypeAdapter<LChar*>::writeTo(UChar* destination)
+{
+ StringImpl::copyChars(destination, m_buffer, m_length);
+}
+
+WTF::StringTypeAdapter<const UChar*>::StringTypeAdapter(const UChar* buffer)
+ : m_buffer(buffer)
+{
+ size_t len = 0;
+ while (m_buffer[len] != UChar(0))
+ ++len;
+
+ RELEASE_ASSERT(len <= std::numeric_limits<unsigned>::max());
+
+ m_length = len;
+}
+
+void WTF::StringTypeAdapter<const UChar*>::writeTo(UChar* destination)
+{
+ memcpy(destination, m_buffer, m_length * sizeof(UChar));
+}
+
+WTF::StringTypeAdapter<const char*>::StringTypeAdapter(const char* buffer)
+: m_buffer(buffer)
+, m_length(strlen(buffer))
+{
+}
+
+void WTF::StringTypeAdapter<const char*>::writeTo(LChar* destination)
+{
+ memcpy(destination, m_buffer, static_cast<size_t>(m_length) * sizeof(LChar));
+}
+
+void WTF::StringTypeAdapter<const char*>::writeTo(UChar* destination)
+{
+ for (unsigned i = 0; i < m_length; ++i) {
+ unsigned char c = m_buffer[i];
+ destination[i] = c;
+ }
+}
+
+WTF::StringTypeAdapter<const LChar*>::StringTypeAdapter(const LChar* buffer)
+: m_buffer(buffer)
+, m_length(strlen(reinterpret_cast<const char*>(buffer)))
+{
+}
+
+void WTF::StringTypeAdapter<const LChar*>::writeTo(LChar* destination)
+{
+ memcpy(destination, m_buffer, static_cast<size_t>(m_length) * sizeof(LChar));
+}
+
+void WTF::StringTypeAdapter<const LChar*>::writeTo(UChar* destination)
+{
+ StringImpl::copyChars(destination, m_buffer, m_length);
+}
+
+void WTF::StringTypeAdapter<Vector<char> >::writeTo(LChar* destination)
+{
+ for (size_t i = 0; i < m_buffer.size(); ++i)
+ destination[i] = static_cast<unsigned char>(m_buffer[i]);
+}
+
+void WTF::StringTypeAdapter<Vector<char> >::writeTo(UChar* destination)
+{
+ for (size_t i = 0; i < m_buffer.size(); ++i)
+ destination[i] = static_cast<unsigned char>(m_buffer[i]);
+}
+
+void WTF::StringTypeAdapter<Vector<LChar> >::writeTo(LChar* destination)
+{
+ for (size_t i = 0; i < m_buffer.size(); ++i)
+ destination[i] = m_buffer[i];
+}
+
+void WTF::StringTypeAdapter<Vector<LChar> >::writeTo(UChar* destination)
+{
+ for (size_t i = 0; i < m_buffer.size(); ++i)
+ destination[i] = m_buffer[i];
+}
+
+void WTF::StringTypeAdapter<String>::writeTo(LChar* destination)
+{
+ unsigned length = m_buffer.length();
+
+ ASSERT(is8Bit());
+ const LChar* data = m_buffer.characters8();
+ for (unsigned i = 0; i < length; ++i)
+ destination[i] = data[i];
+
+ WTF_STRINGTYPEADAPTER_COPIED_WTF_STRING();
+}
+
+void WTF::StringTypeAdapter<String>::writeTo(UChar* destination)
+{
+ unsigned length = m_buffer.length();
+
+ if (is8Bit()) {
+ const LChar* data = m_buffer.characters8();
+ for (unsigned i = 0; i < length; ++i)
+ destination[i] = data[i];
+ } else {
+ const UChar* data = m_buffer.characters16();
+ for (unsigned i = 0; i < length; ++i)
+ destination[i] = data[i];
+ }
+
+ WTF_STRINGTYPEADAPTER_COPIED_WTF_STRING();
+}
+

Powered by Google App Engine
This is Rietveld 408576698