1 /*
2  * Copyright (c) 2008 Mozilla Foundation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20  * DEALINGS IN THE SOFTWARE.
21  */
22 
23 #ifndef nsHtml5ArrayCopy_h
24 #define nsHtml5ArrayCopy_h
25 
26 
27 class nsString;
28 class nsHtml5StackNode;
29 class nsHtml5AttributeName;
30 
31 // Unfortunately, these don't work as template functions because the arguments
32 // would need coercion from a template class, which complicates things.
33 class nsHtml5ArrayCopy {
34   public:
35 
36     static inline void
arraycopy(char16_t * source,int32_t sourceOffset,char16_t * target,int32_t targetOffset,int32_t length)37     arraycopy(char16_t* source, int32_t sourceOffset, char16_t* target, int32_t targetOffset, int32_t length)
38     {
39       memcpy(&(target[targetOffset]), &(source[sourceOffset]), size_t(length) * sizeof(char16_t));
40     }
41 
42     static inline void
arraycopy(char16_t * source,char16_t * target,int32_t length)43     arraycopy(char16_t* source, char16_t* target, int32_t length)
44     {
45       memcpy(target, source, size_t(length) * sizeof(char16_t));
46     }
47 
48     static inline void
arraycopy(int32_t * source,int32_t * target,int32_t length)49     arraycopy(int32_t* source, int32_t* target, int32_t length)
50     {
51       memcpy(target, source, size_t(length) * sizeof(int32_t));
52     }
53 
54     static inline void
arraycopy(nsString ** source,nsString ** target,int32_t length)55     arraycopy(nsString** source, nsString** target, int32_t length)
56     {
57       memcpy(target, source, size_t(length) * sizeof(nsString*));
58     }
59 
60     static inline void
arraycopy(nsHtml5AttributeName ** source,nsHtml5AttributeName ** target,int32_t length)61     arraycopy(nsHtml5AttributeName** source, nsHtml5AttributeName** target, int32_t length)
62     {
63       memcpy(target, source, size_t(length) * sizeof(nsHtml5AttributeName*));
64     }
65 
66     static inline void
arraycopy(nsHtml5StackNode ** source,nsHtml5StackNode ** target,int32_t length)67     arraycopy(nsHtml5StackNode** source, nsHtml5StackNode** target, int32_t length)
68     {
69       memcpy(target, source, size_t(length) * sizeof(nsHtml5StackNode*));
70     }
71 
72     static inline void
arraycopy(nsHtml5StackNode ** arr,int32_t sourceOffset,int32_t targetOffset,int32_t length)73     arraycopy(nsHtml5StackNode** arr, int32_t sourceOffset, int32_t targetOffset, int32_t length)
74     {
75       memmove(&(arr[targetOffset]), &(arr[sourceOffset]), size_t(length) * sizeof(nsHtml5StackNode*));
76     }
77 };
78 #endif // nsHtml5ArrayCopy_h
79