| /* |
| ********************************************************************** |
| * 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 |