]> git.saurik.com Git - apple/javascriptcore.git/blob - runtime/UStringConcatenate.h
JavaScriptCore-1097.3.3.tar.gz
[apple/javascriptcore.git] / runtime / UStringConcatenate.h
1 /*
2 * Copyright (C) 2010 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26 #ifndef UStringConcatenate_h
27 #define UStringConcatenate_h
28
29 #include "UString.h"
30 #include <wtf/text/StringConcatenate.h>
31
32 namespace WTF {
33
34 template<>
35 class StringTypeAdapter<JSC::UString> {
36 public:
37 StringTypeAdapter<JSC::UString>(JSC::UString& string)
38 : m_string(string)
39 , m_length(string.length())
40 {
41 }
42
43 unsigned length() { return m_length; }
44
45 bool is8Bit() { return m_string.isNull() || m_string.is8Bit(); }
46
47 void writeTo(LChar* destination)
48 {
49 const LChar* characters = m_string.characters8();
50 for (unsigned i = 0; i < m_length; ++i)
51 destination[i] = characters[i];
52 }
53
54 void writeTo(UChar* destination)
55 {
56 if (is8Bit()) {
57 const LChar* characters = m_string.characters8();
58 for (unsigned i = 0; i < m_length; ++i)
59 destination[i] = characters[i];
60 } else {
61 const UChar* characters = m_string.characters16();
62 for (unsigned i = 0; i < m_length; ++i)
63 destination[i] = characters[i];
64 }
65 }
66
67 private:
68 const JSC::UString& m_string;
69 unsigned m_length;
70 };
71
72 }; // namespace WTF
73
74 namespace JSC {
75
76 template<typename StringType1, typename StringType2>
77 UString makeUString(StringType1 string1, StringType2 string2)
78 {
79 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2);
80 if (!resultImpl)
81 CRASH();
82 return resultImpl;
83 }
84
85 template<typename StringType1, typename StringType2, typename StringType3>
86 UString makeUString(StringType1 string1, StringType2 string2, StringType3 string3)
87 {
88 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2, string3);
89 if (!resultImpl)
90 CRASH();
91 return resultImpl;
92 }
93
94 template<typename StringType1, typename StringType2, typename StringType3, typename StringType4>
95 UString makeUString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4)
96 {
97 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2, string3, string4);
98 if (!resultImpl)
99 CRASH();
100 return resultImpl;
101 }
102
103 template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5>
104 UString makeUString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5)
105 {
106 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2, string3, string4, string5);
107 if (!resultImpl)
108 CRASH();
109 return resultImpl;
110 }
111
112 template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6>
113 UString makeUString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6)
114 {
115 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2, string3, string4, string5, string6);
116 if (!resultImpl)
117 CRASH();
118 return resultImpl;
119 }
120
121 template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6, typename StringType7>
122 UString makeUString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6, StringType7 string7)
123 {
124 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2, string3, string4, string5, string6, string7);
125 if (!resultImpl)
126 CRASH();
127 return resultImpl;
128 }
129
130 template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6, typename StringType7, typename StringType8>
131 UString makeUString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6, StringType7 string7, StringType8 string8)
132 {
133 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2, string3, string4, string5, string6, string7, string8);
134 if (!resultImpl)
135 CRASH();
136 return resultImpl;
137 }
138
139 } // namespace JSC
140
141 #endif