Home | History | Annotate | Download | only in runtime
      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