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

Unified Diff: Source/wtf/text/StringOperators.h

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/StringOperators.h
diff --git a/Source/wtf/text/StringOperators.h b/Source/wtf/text/StringOperators.h
index a4ed953d3c86e2ffa2043d62172cecac8e46ee19..65342dc033cd6212c8658ee0843dacd3d1782ed5 100644
--- a/Source/wtf/text/StringOperators.h
+++ b/Source/wtf/text/StringOperators.h
@@ -22,57 +22,26 @@
#ifndef StringOperators_h
#define StringOperators_h
+#include "StringConcatenate.h"
+
namespace WTF {
template<typename StringType1, typename StringType2>
class StringAppend {
public:
- StringAppend(StringType1 string1, StringType2 string2)
- : m_string1(string1)
- , m_string2(string2)
- {
- }
+ StringAppend(StringType1 string1, StringType2 string2);
- operator String() const
- {
- return String(makeString(m_string1, m_string2));
- }
+ operator String() const;
- operator AtomicString() const
- {
- return AtomicString(makeString(m_string1, m_string2));
- }
+ operator AtomicString() const;
- bool is8Bit()
- {
- StringTypeAdapter<StringType1> adapter1(m_string1);
- StringTypeAdapter<StringType2> adapter2(m_string2);
- return adapter1.is8Bit() && adapter2.is8Bit();
- }
+ bool is8Bit();
- void writeTo(LChar* destination)
- {
- ASSERT(is8Bit());
- StringTypeAdapter<StringType1> adapter1(m_string1);
- StringTypeAdapter<StringType2> adapter2(m_string2);
- adapter1.writeTo(destination);
- adapter2.writeTo(destination + adapter1.length());
- }
+ void writeTo(LChar* destination);
- void writeTo(UChar* destination)
- {
- StringTypeAdapter<StringType1> adapter1(m_string1);
- StringTypeAdapter<StringType2> adapter2(m_string2);
- adapter1.writeTo(destination);
- adapter2.writeTo(destination + adapter1.length());
- }
+ void writeTo(UChar* destination);
- unsigned length()
- {
- StringTypeAdapter<StringType1> adapter1(m_string1);
- StringTypeAdapter<StringType2> adapter2(m_string2);
- return adapter1.length() + adapter2.length();
- }
+ unsigned length();
private:
StringType1 m_string1;
@@ -80,6 +49,60 @@ private:
};
template<typename StringType1, typename StringType2>
+StringAppend<StringType1, StringType2>::StringAppend(StringType1 string1, StringType2 string2)
+ : m_string1(string1)
+ , m_string2(string2)
+{
+}
+
+template<typename StringType1, typename StringType2>
+StringAppend<StringType1, StringType2>::operator String() const
+{
+ return String(makeString(m_string1, m_string2));
+}
+
+template<typename StringType1, typename StringType2>
+StringAppend<StringType1, StringType2>::operator AtomicString() const
+{
+ return AtomicString(makeString(m_string1, m_string2));
+}
+
+template<typename StringType1, typename StringType2>
+bool StringAppend<StringType1, StringType2>::is8Bit()
+{
+ StringTypeAdapter<StringType1> adapter1(m_string1);
+ StringTypeAdapter<StringType2> adapter2(m_string2);
+ return adapter1.is8Bit() && adapter2.is8Bit();
+}
+
+template<typename StringType1, typename StringType2>
+void StringAppend<StringType1, StringType2>::writeTo(LChar* destination)
+{
+ ASSERT(is8Bit());
+ StringTypeAdapter<StringType1> adapter1(m_string1);
+ StringTypeAdapter<StringType2> adapter2(m_string2);
+ adapter1.writeTo(destination);
+ adapter2.writeTo(destination + adapter1.length());
+}
+
+template<typename StringType1, typename StringType2>
+void StringAppend<StringType1, StringType2>::writeTo(UChar* destination)
+{
+ StringTypeAdapter<StringType1> adapter1(m_string1);
+ StringTypeAdapter<StringType2> adapter2(m_string2);
+ adapter1.writeTo(destination);
+ adapter2.writeTo(destination + adapter1.length());
+}
+
+template<typename StringType1, typename StringType2>
+unsigned StringAppend<StringType1, StringType2>::length()
+{
+ StringTypeAdapter<StringType1> adapter1(m_string1);
+ StringTypeAdapter<StringType2> adapter2(m_string2);
+ return adapter1.length() + adapter2.length();
+}
+
+template<typename StringType1, typename StringType2>
class StringTypeAdapter<StringAppend<StringType1, StringType2> > {
public:
StringTypeAdapter<StringAppend<StringType1, StringType2> >(StringAppend<StringType1, StringType2>& buffer)

Powered by Google App Engine
This is Rietveld 408576698