os/textandloc/fontservices/textshaperplugin/IcuSource/common/charstr.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 /*
     2 **********************************************************************
     3 *   Copyright (c) 2001-2004, International Business Machines
     4 *   Corporation and others.  All Rights Reserved.
     5 **********************************************************************
     6 *   Date        Name        Description
     7 *   11/19/2001  aliu        Creation.
     8 **********************************************************************
     9 */
    10 
    11 #ifndef CHARSTRING_H
    12 #define CHARSTRING_H
    13 
    14 #include "unicode/utypes.h"
    15 #include "unicode/uobject.h"
    16 #include "unicode/unistr.h"
    17 #include "cmemory.h"
    18 
    19 //--------------------------------------------------------------------
    20 // class CharString
    21 //
    22 // This is a tiny wrapper class that is used internally to make a
    23 // UnicodeString look like a const char*.  It can be allocated on the
    24 // stack.  It only creates a heap buffer if it needs to.
    25 //--------------------------------------------------------------------
    26 
    27 U_NAMESPACE_BEGIN
    28 
    29 class U_COMMON_API CharString : public UMemory {
    30 public:
    31 
    32 #if !UCONFIG_NO_CONVERSION
    33     // Constructor
    34     //     @param  str    The unicode string to be converted to char *
    35     //     @param  codepage   The char * code page.  ""   for invariant conversion.
    36     //                                               NULL for default code page.
    37 //    inline CharString(const UnicodeString& str, const char *codepage);
    38 #endif
    39 
    40     inline CharString(const UnicodeString& str);
    41     inline ~CharString();
    42     inline operator const char*() const { return ptr; }
    43 
    44 private:
    45     char buf[128];
    46     char* ptr;
    47 
    48     CharString(const CharString &other); // forbid copying of this class
    49     CharString &operator=(const CharString &other); // forbid copying of this class
    50 };
    51 
    52 #if !UCONFIG_NO_CONVERSION
    53 
    54 // PLEASE DON'T USE THIS FUNCTION.
    55 // We don't want the static dependency on conversion or the performance hit that comes from a codepage conversion.
    56 /*
    57 inline CharString::CharString(const UnicodeString& str, const char *codepage) {
    58     int32_t    len;
    59     ptr = buf;
    60     len = str.extract(0, 0x7FFFFFFF, buf ,sizeof(buf)-1, codepage);
    61     if (len >= (int32_t)(sizeof(buf)-1)) {
    62         ptr = (char *)uprv_malloc(len+1);
    63         str.extract(0, 0x7FFFFFFF, ptr, len+1, codepage);
    64     }
    65 }*/
    66 
    67 #endif
    68 
    69 inline CharString::CharString(const UnicodeString& str) {
    70     int32_t    len;
    71     ptr = buf;
    72     len = str.extract(0, 0x7FFFFFFF, buf, (int32_t)(sizeof(buf)-1), US_INV);
    73     if (len >= (int32_t)(sizeof(buf)-1)) {
    74         ptr = (char *)uprv_malloc(len+1);
    75         str.extract(0, 0x7FFFFFFF, ptr, len+1, US_INV);
    76     }
    77 }
    78 
    79 inline CharString::~CharString() {
    80     if (ptr != buf) {
    81         uprv_free(ptr);
    82     }
    83 }
    84 
    85 U_NAMESPACE_END
    86 
    87 #endif
    88 //eof