| /* | 
 | ********************************************************************** | 
 | *   Copyright (c) 2001, International Business Machines | 
 | *   Corporation and others.  All Rights Reserved. | 
 | ********************************************************************** | 
 | *   Date        Name        Description | 
 | *   11/19/2001  aliu        Creation. | 
 | ********************************************************************** | 
 | */ | 
 |  | 
 | #include "unicode/utypes.h" | 
 | #include "unicode/unistr.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 CharString { | 
 |  public: | 
 |     inline CharString(const UnicodeString& str); | 
 |     inline ~CharString(); | 
 |     inline operator const char*() { return ptr; } | 
 |  private: | 
 |     char buf[128]; | 
 |     char* ptr; | 
 | }; | 
 |  | 
 | inline CharString::CharString(const UnicodeString& str) { | 
 |     // TODO This isn't quite right -- we should probably do | 
 |     // preflighting here to determine the real length. | 
 |     if (str.length() >= (int32_t)sizeof(buf)) { | 
 |         ptr = new char[str.length() + 8]; | 
 |     } else { | 
 |         ptr = buf; | 
 |     } | 
 |     str.extract(0, 0x7FFFFFFF, ptr, ""); | 
 | } | 
 |  | 
 | inline CharString::~CharString() { | 
 |     if (ptr != buf) { | 
 |         delete[] ptr; | 
 |     } | 
 | } | 
 |  | 
 | U_NAMESPACE_END | 
 |  | 
 | //eof |