]> git.saurik.com Git - apple/javascriptcore.git/blame - runtime/UStringConcatenate.h
JavaScriptCore-1097.3.3.tar.gz
[apple/javascriptcore.git] / runtime / UStringConcatenate.h
CommitLineData
14957cd0
A
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
32namespace WTF {
33
34template<>
35class StringTypeAdapter<JSC::UString> {
36public:
37 StringTypeAdapter<JSC::UString>(JSC::UString& string)
6fe7ccc8 38 : m_string(string)
14957cd0
A
39 , m_length(string.length())
40 {
41 }
42
43 unsigned length() { return m_length; }
44
6fe7ccc8
A
45 bool is8Bit() { return m_string.isNull() || m_string.is8Bit(); }
46
47 void writeTo(LChar* destination)
14957cd0 48 {
6fe7ccc8 49 const LChar* characters = m_string.characters8();
14957cd0 50 for (unsigned i = 0; i < m_length; ++i)
6fe7ccc8
A
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 }
14957cd0
A
65 }
66
67private:
6fe7ccc8 68 const JSC::UString& m_string;
14957cd0
A
69 unsigned m_length;
70};
71
72}; // namespace WTF
73
74namespace JSC {
75
76template<typename StringType1, typename StringType2>
77UString makeUString(StringType1 string1, StringType2 string2)
78{
79 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2);
80 if (!resultImpl)
81 CRASH();
82 return resultImpl;
83}
84
85template<typename StringType1, typename StringType2, typename StringType3>
86UString 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
94template<typename StringType1, typename StringType2, typename StringType3, typename StringType4>
95UString 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
103template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5>
104UString 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
112template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6>
113UString 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
121template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6, typename StringType7>
122UString 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
130template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6, typename StringType7, typename StringType8>
131UString 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