fontservices/textshaperplugin/IcuSource/common/charstr.h
changeset 0 1fb32624e06b
equal deleted inserted replaced
-1:000000000000 0:1fb32624e06b
       
     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