| /* | 
 | ********************************************************************** | 
 | *   Copyright (c) 2001-2004, International Business Machines | 
 | *   Corporation and others.  All Rights Reserved. | 
 | ********************************************************************** | 
 | *   Date        Name        Description | 
 | *   11/19/2001  aliu        Creation. | 
 | ********************************************************************** | 
 | */ | 
 |  | 
 | #ifndef CHARSTRING_H | 
 | #define CHARSTRING_H | 
 |  | 
 | #include "unicode/utypes.h" | 
 | #include "unicode/uobject.h" | 
 | #include "unicode/unistr.h" | 
 | #include "cmemory.h" | 
 |  | 
 | //-------------------------------------------------------------------- | 
 | // class CharString | 
 | // | 
 | // This is a tiny wrapper class that is used internally to make a | 
 | // UnicodeString look like a const char*.  It can be allocated on the | 
 | // stack.  It only creates a heap buffer if it needs to. | 
 | //-------------------------------------------------------------------- | 
 |  | 
 | U_NAMESPACE_BEGIN | 
 |  | 
 | class U_COMMON_API CharString : public UMemory { | 
 | public: | 
 |  | 
 | #if !UCONFIG_NO_CONVERSION | 
 |     // Constructor | 
 |     //     @param  str    The unicode string to be converted to char * | 
 |     //     @param  codepage   The char * code page.  ""   for invariant conversion. | 
 |     //                                               NULL for default code page. | 
 | //    inline CharString(const UnicodeString& str, const char *codepage); | 
 | #endif | 
 |  | 
 |     inline CharString(const UnicodeString& str); | 
 |     inline ~CharString(); | 
 |     inline operator const char*() const { return ptr; } | 
 |  | 
 | private: | 
 |     char buf[128]; | 
 |     char* ptr; | 
 |  | 
 |     CharString(const CharString &other); // forbid copying of this class | 
 |     CharString &operator=(const CharString &other); // forbid copying of this class | 
 | }; | 
 |  | 
 | #if !UCONFIG_NO_CONVERSION | 
 |  | 
 | // PLEASE DON'T USE THIS FUNCTION. | 
 | // We don't want the static dependency on conversion or the performance hit that comes from a codepage conversion. | 
 | /* | 
 | inline CharString::CharString(const UnicodeString& str, const char *codepage) { | 
 |     int32_t    len; | 
 |     ptr = buf; | 
 |     len = str.extract(0, 0x7FFFFFFF, buf ,sizeof(buf)-1, codepage); | 
 |     if (len >= (int32_t)(sizeof(buf)-1)) { | 
 |         ptr = (char *)uprv_malloc(len+1); | 
 |         str.extract(0, 0x7FFFFFFF, ptr, len+1, codepage); | 
 |     } | 
 | }*/ | 
 |  | 
 | #endif | 
 |  | 
 | inline CharString::CharString(const UnicodeString& str) { | 
 |     int32_t    len; | 
 |     ptr = buf; | 
 |     len = str.extract(0, 0x7FFFFFFF, buf, (int32_t)(sizeof(buf)-1), US_INV); | 
 |     if (len >= (int32_t)(sizeof(buf)-1)) { | 
 |         ptr = (char *)uprv_malloc(len+1); | 
 |         str.extract(0, 0x7FFFFFFF, ptr, len+1, US_INV); | 
 |     } | 
 | } | 
 |  | 
 | inline CharString::~CharString() { | 
 |     if (ptr != buf) { | 
 |         uprv_free(ptr); | 
 |     } | 
 | } | 
 |  | 
 | U_NAMESPACE_END | 
 |  | 
 | #endif | 
 | //eof |