diff options
Diffstat (limited to 'Build/source/libs/icu/icu-xetex/common/charstr.h')
-rw-r--r-- | Build/source/libs/icu/icu-xetex/common/charstr.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/Build/source/libs/icu/icu-xetex/common/charstr.h b/Build/source/libs/icu/icu-xetex/common/charstr.h new file mode 100644 index 00000000000..3bb11cbad35 --- /dev/null +++ b/Build/source/libs/icu/icu-xetex/common/charstr.h @@ -0,0 +1,88 @@ +/* +********************************************************************** +* 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 |