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