• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 ******************************************************************************
3 *
4 *   Copyright (C) 1997-2010, International Business Machines
5 *   Corporation and others.  All Rights Reserved.
6 *
7 ******************************************************************************
8 *   file name:  cpputils.h
9 *   encoding:   US-ASCII
10 *   tab size:   8 (not used)
11 *   indentation:4
12 */
13 
14 #ifndef CPPUTILS_H
15 #define CPPUTILS_H
16 
17 #include "unicode/utypes.h"
18 #include "unicode/unistr.h"
19 #include "cmemory.h"
20 
21 /*==========================================================================*/
22 /* Array copy utility functions */
23 /*==========================================================================*/
24 
25 static
uprv_arrayCopy(const double * src,double * dst,int32_t count)26 inline void uprv_arrayCopy(const double* src, double* dst, int32_t count)
27 { uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); }
28 
29 static
uprv_arrayCopy(const double * src,int32_t srcStart,double * dst,int32_t dstStart,int32_t count)30 inline void uprv_arrayCopy(const double* src, int32_t srcStart,
31               double* dst, int32_t dstStart, int32_t count)
32 { uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); }
33 
34 static
uprv_arrayCopy(const int8_t * src,int8_t * dst,int32_t count)35 inline void uprv_arrayCopy(const int8_t* src, int8_t* dst, int32_t count)
36     { uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); }
37 
38 static
uprv_arrayCopy(const int8_t * src,int32_t srcStart,int8_t * dst,int32_t dstStart,int32_t count)39 inline void uprv_arrayCopy(const int8_t* src, int32_t srcStart,
40               int8_t* dst, int32_t dstStart, int32_t count)
41 { uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); }
42 
43 static
uprv_arrayCopy(const int16_t * src,int16_t * dst,int32_t count)44 inline void uprv_arrayCopy(const int16_t* src, int16_t* dst, int32_t count)
45 { uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); }
46 
47 static
uprv_arrayCopy(const int16_t * src,int32_t srcStart,int16_t * dst,int32_t dstStart,int32_t count)48 inline void uprv_arrayCopy(const int16_t* src, int32_t srcStart,
49               int16_t* dst, int32_t dstStart, int32_t count)
50 { uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); }
51 
52 static
uprv_arrayCopy(const int32_t * src,int32_t * dst,int32_t count)53 inline void uprv_arrayCopy(const int32_t* src, int32_t* dst, int32_t count)
54 { uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); }
55 
56 static
uprv_arrayCopy(const int32_t * src,int32_t srcStart,int32_t * dst,int32_t dstStart,int32_t count)57 inline void uprv_arrayCopy(const int32_t* src, int32_t srcStart,
58               int32_t* dst, int32_t dstStart, int32_t count)
59 { uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); }
60 
61 static
62 inline void
uprv_arrayCopy(const UChar * src,int32_t srcStart,UChar * dst,int32_t dstStart,int32_t count)63 uprv_arrayCopy(const UChar *src, int32_t srcStart,
64         UChar *dst, int32_t dstStart, int32_t count)
65 { uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); }
66 
67 /**
68  * Copy an array of UnicodeString OBJECTS (not pointers).
69  * @internal
70  */
71 static inline void
uprv_arrayCopy(const U_NAMESPACE_QUALIFIER UnicodeString * src,U_NAMESPACE_QUALIFIER UnicodeString * dst,int32_t count)72 uprv_arrayCopy(const U_NAMESPACE_QUALIFIER UnicodeString *src, U_NAMESPACE_QUALIFIER UnicodeString *dst, int32_t count)
73 { while(count-- > 0) *dst++ = *src++; }
74 
75 /**
76  * Copy an array of UnicodeString OBJECTS (not pointers).
77  * @internal
78  */
79 static inline void
uprv_arrayCopy(const U_NAMESPACE_QUALIFIER UnicodeString * src,int32_t srcStart,U_NAMESPACE_QUALIFIER UnicodeString * dst,int32_t dstStart,int32_t count)80 uprv_arrayCopy(const U_NAMESPACE_QUALIFIER UnicodeString *src, int32_t srcStart,
81         U_NAMESPACE_QUALIFIER UnicodeString *dst, int32_t dstStart, int32_t count)
82 { uprv_arrayCopy(src+srcStart, dst+dstStart, count); }
83 
84 /**
85  * Checks that the string is readable and writable.
86  * Sets U_ILLEGAL_ARGUMENT_ERROR if the string isBogus() or has an open getBuffer().
87  */
88 inline void
uprv_checkCanGetBuffer(const U_NAMESPACE_QUALIFIER UnicodeString & s,UErrorCode & errorCode)89 uprv_checkCanGetBuffer(const U_NAMESPACE_QUALIFIER UnicodeString &s, UErrorCode &errorCode) {
90     if(U_SUCCESS(errorCode) && s.isBogus()) {
91         errorCode=U_ILLEGAL_ARGUMENT_ERROR;
92     }
93 }
94 
95 #endif /* _CPPUTILS */
96