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