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_data(string.characters()) 39 , m_length(string.length()) 40 { 41 } 42 43 unsigned length() { return m_length; } 44 45 void writeTo(UChar* destination) 46 { 47 for (unsigned i = 0; i < m_length; ++i) 48 destination[i] = m_data[i]; 49 } 50 51 private: 52 const UChar* m_data; 53 unsigned m_length; 54 }; 55 56 }; // namespace WTF 57 58 namespace JSC { 59 60 template<typename StringType1, typename StringType2> 61 UString makeUString(StringType1 string1, StringType2 string2) 62 { 63 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2); 64 if (!resultImpl) 65 CRASH(); 66 return resultImpl; 67 } 68 69 template<typename StringType1, typename StringType2, typename StringType3> 70 UString makeUString(StringType1 string1, StringType2 string2, StringType3 string3) 71 { 72 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2, string3); 73 if (!resultImpl) 74 CRASH(); 75 return resultImpl; 76 } 77 78 template<typename StringType1, typename StringType2, typename StringType3, typename StringType4> 79 UString makeUString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4) 80 { 81 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2, string3, string4); 82 if (!resultImpl) 83 CRASH(); 84 return resultImpl; 85 } 86 87 template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5> 88 UString makeUString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5) 89 { 90 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2, string3, string4, string5); 91 if (!resultImpl) 92 CRASH(); 93 return resultImpl; 94 } 95 96 template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6> 97 UString makeUString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6) 98 { 99 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2, string3, string4, string5, string6); 100 if (!resultImpl) 101 CRASH(); 102 return resultImpl; 103 } 104 105 template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6, typename StringType7> 106 UString makeUString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6, StringType7 string7) 107 { 108 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2, string3, string4, string5, string6, string7); 109 if (!resultImpl) 110 CRASH(); 111 return resultImpl; 112 } 113 114 template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6, typename StringType7, typename StringType8> 115 UString makeUString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6, StringType7 string7, StringType8 string8) 116 { 117 PassRefPtr<StringImpl> resultImpl = WTF::tryMakeString(string1, string2, string3, string4, string5, string6, string7, string8); 118 if (!resultImpl) 119 CRASH(); 120 return resultImpl; 121 } 122 123 } // namespace JSC 124 125 #endif 126