diff -r 000000000000 -r 1fb32624e06b fontservices/textshaperplugin/IcuSource/common/charstr.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fontservices/textshaperplugin/IcuSource/common/charstr.h Tue Feb 02 02:02:46 2010 +0200 @@ -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