/* ********************************************************************** * 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/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: 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 }; inline CharString::CharString(const UnicodeString& str) { // Invariant converter should create str.length() chars if (str.length() >= (int32_t)sizeof(buf)) { ptr = (char *)uprv_malloc(str.length() + 8); } else { ptr = buf; } str.extract(0, 0x7FFFFFFF, ptr, ""); } inline CharString::~CharString() { if (ptr != buf) { uprv_free(ptr); } } U_NAMESPACE_END //eof