tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

nsHtml5ArrayCopy.h (2567B)


      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 class nsHtml5StackNode;
     27 
     28 // Unfortunately, these don't work as template functions because the arguments
     29 // would need coercion from a template class, which complicates things.
     30 class nsHtml5ArrayCopy {
     31 public:
     32  static inline void arraycopy(char16_t* source, int32_t sourceOffset,
     33                               char16_t* target, int32_t targetOffset,
     34                               int32_t length) {
     35    memcpy(&(target[targetOffset]), &(source[sourceOffset]),
     36           size_t(length) * sizeof(char16_t));
     37  }
     38 
     39  static inline void arraycopy(char16_t* source, char16_t* target,
     40                               int32_t length) {
     41    memcpy(target, source, size_t(length) * sizeof(char16_t));
     42  }
     43 
     44  static inline void arraycopy(int32_t* source, int32_t* target,
     45                               int32_t length) {
     46    memcpy(target, source, size_t(length) * sizeof(int32_t));
     47  }
     48 
     49  static inline void arraycopy(nsHtml5StackNode** source,
     50                               nsHtml5StackNode** target, int32_t length) {
     51    memcpy(target, source, size_t(length) * sizeof(nsHtml5StackNode*));
     52  }
     53 
     54  static inline void arraycopy(nsHtml5StackNode** arr, int32_t sourceOffset,
     55                               int32_t targetOffset, int32_t length) {
     56    memmove(&(arr[targetOffset]), &(arr[sourceOffset]),
     57            size_t(length) * sizeof(nsHtml5StackNode*));
     58  }
     59 };
     60 #endif  // nsHtml5ArrayCopy_h