1/*---------------------------------------------------------------------------*
2 *  memmove.h  *
3 *                                                                           *
4 *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
5 *                                                                           *
6 *  Licensed under the Apache License, Version 2.0 (the 'License');          *
7 *  you may not use this file except in compliance with the License.         *
8 *                                                                           *
9 *  You may obtain a copy of the License at                                  *
10 *      http://www.apache.org/licenses/LICENSE-2.0                           *
11 *                                                                           *
12 *  Unless required by applicable law or agreed to in writing, software      *
13 *  distributed under the License is distributed on an 'AS IS' BASIS,        *
14 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
15 *  See the License for the specific language governing permissions and      *
16 *  limitations under the License.                                           *
17 *                                                                           *
18 *---------------------------------------------------------------------------*/
19
20#ifndef _inl_memmove_
21#define _inl_memmove_
22
23#if USE_SYSTEM_MEMMOVE
24#define MEMMOVE(S,D,N,Z) memmove(S,D,(N)*(Z))
25#else
26#define MEMMOVE memmove_inline
27
28static void *memmove_inline(void *dest, const void *src, size_t count,
29                            size_t size);
30
31static void *memmove_inline(void *dest, const void *src, size_t count,
32                            size_t size)
33/*
34**  A more efficient implementation of memmove
35*/
36{
37  ASSERT(dest);
38  ASSERT(src);
39
40  while (count-- > 0)
41  {
42    memcpy(dest, src, size);
43    dest = (void *)(((char *)dest) + size);
44    src = (void *)(((char *)src) + size);
45  }
46  return (dest);  /* TODO: fix return */
47}
48#endif
49#endif
50