1 /* 2 * Copyright (C) 2011 Apple Inc. All rights reserved. 3 * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27 #ifndef TextCodecASCIIFastPath_h 28 #define TextCodecASCIIFastPath_h 29 30 #include "wtf/text/ASCIIFastPath.h" 31 32 namespace WTF { 33 34 template<size_t size> struct UCharByteFiller; 35 template<> struct UCharByteFiller<4> { 36 static void copy(LChar* destination, const uint8_t* source) 37 { 38 memcpy(destination, source, 4); 39 } 40 41 static void copy(UChar* destination, const uint8_t* source) 42 { 43 destination[0] = source[0]; 44 destination[1] = source[1]; 45 destination[2] = source[2]; 46 destination[3] = source[3]; 47 } 48 }; 49 template<> struct UCharByteFiller<8> { 50 static void copy(LChar* destination, const uint8_t* source) 51 { 52 memcpy(destination, source, 8); 53 } 54 55 static void copy(UChar* destination, const uint8_t* source) 56 { 57 destination[0] = source[0]; 58 destination[1] = source[1]; 59 destination[2] = source[2]; 60 destination[3] = source[3]; 61 destination[4] = source[4]; 62 destination[5] = source[5]; 63 destination[6] = source[6]; 64 destination[7] = source[7]; 65 } 66 }; 67 68 inline void copyASCIIMachineWord(LChar* destination, const uint8_t* source) 69 { 70 UCharByteFiller<sizeof(WTF::MachineWord)>::copy(destination, source); 71 } 72 73 inline void copyASCIIMachineWord(UChar* destination, const uint8_t* source) 74 { 75 UCharByteFiller<sizeof(WTF::MachineWord)>::copy(destination, source); 76 } 77 78 } // namespace WTF 79 80 #endif // TextCodecASCIIFastPath_h 81