Home | History | Annotate | Download | only in common
      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