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
28 static void *memmove_inline(void *dest, const void *src, size_t count,
29 size_t size);
30
memmove_inline(void * dest,const void * src,size_t count,size_t size)31 static 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