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