1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* Copyright (C) 1997-2011, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* file name: cpputils.h 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* encoding: US-ASCII 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* tab size: 8 (not used) 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* indentation:4 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef CPPUTILS_H 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CPPUTILS_H 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unistr.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*==========================================================================*/ 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Array copy utility functions */ 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*==========================================================================*/ 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void uprv_arrayCopy(const double* src, double* dst, int32_t count) 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); } 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void uprv_arrayCopy(const double* src, int32_t srcStart, 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double* dst, int32_t dstStart, int32_t count) 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void uprv_arrayCopy(const int8_t* src, int8_t* dst, int32_t count) 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); } 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void uprv_arrayCopy(const int8_t* src, int32_t srcStart, 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int8_t* dst, int32_t dstStart, int32_t count) 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void uprv_arrayCopy(const int16_t* src, int16_t* dst, int32_t count) 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); } 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void uprv_arrayCopy(const int16_t* src, int32_t srcStart, 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int16_t* dst, int32_t dstStart, int32_t count) 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void uprv_arrayCopy(const int32_t* src, int32_t* dst, int32_t count) 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); } 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void uprv_arrayCopy(const int32_t* src, int32_t srcStart, 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t* dst, int32_t dstStart, int32_t count) 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuprv_arrayCopy(const UChar *src, int32_t srcStart, 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *dst, int32_t dstStart, int32_t count) 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Copy an array of UnicodeString OBJECTS (not pointers). 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic inline void 7283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusuprv_arrayCopy(const icu::UnicodeString *src, icu::UnicodeString *dst, int32_t count) 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ while(count-- > 0) *dst++ = *src++; } 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Copy an array of UnicodeString OBJECTS (not pointers). 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic inline void 8083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusuprv_arrayCopy(const icu::UnicodeString *src, int32_t srcStart, 8183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius icu::UnicodeString *dst, int32_t dstStart, int32_t count) 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ uprv_arrayCopy(src+srcStart, dst+dstStart, count); } 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** 8550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Checks that the string is readable and writable. 8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Sets U_ILLEGAL_ARGUMENT_ERROR if the string isBogus() or has an open getBuffer(). 8750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 8850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline void 8983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusuprv_checkCanGetBuffer(const icu::UnicodeString &s, UErrorCode &errorCode) { 9050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_SUCCESS(errorCode) && s.isBogus()) { 9150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errorCode=U_ILLEGAL_ARGUMENT_ERROR; 9250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 9350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* _CPPUTILS */ 96