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 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 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 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 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 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 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 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 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 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 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 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 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