///////////////////////////////////////////////////////////////////////////// // strx.h // // SIMLIB version: 2.16.3 // Date: 2001-04-04 // Copyright (c) 1999-2001 David Martinek, Dr. Ing. Petr Peringer // // This library is licensed under GNU Library GPL. See the file COPYING. // // Warning: this is EXPERIMENTAL code, interfaces can be changed // // Fuzzy subsystem for SIMLIB // version 0.6 --- We apr 4 10:33:52 CEST 2001 // ///////////////////////////////////////////////////////////////////////////// // Utility for transcoding between unicode and ascii. ///////////////////////////////////////////////////////////////////////////// #include #include #include //#include //#include //#include /** * Class for transcoding between unicode and ascii.
Třída pro převod mezi unicode a ascii. * * This is a simple class that lets us do easy (thoutgh not terribly efficient) * transcoding of XMLCh data (unicode) to local code page (ascii) and on the * contrary. * * Toto je jednoduchá třída, která umožňuje jednoduše (i když ne příliš efektivně) * převádět data z XMLCh (unicode) do lokálního kódování (ascii) a naopak. * @ingroup xml */ class StrX { public : // ----------------------------------------------------------------------- // Constructors and Destructor // ----------------------------------------------------------------------- /** * It creates a copy according to unicode value.
* Vytvoří kopii podle unicode hodnoty. */ StrX(const XMLCh* const value) : ascii(NULL), unicode(NULL) { setValue(value); } /** * It creates a copy according to ascii value.
* Vytvoří kopii podle ascii hodnoty. */ StrX(const char* const value) : ascii(NULL), unicode(NULL) { setValue(value); } /** * It creates a copy according to unicode value.
* Vytvoří kopii podle unicode hodnoty. */ void setValue(const XMLCh* const value) { release(); ascii = XMLString::transcode(value); unicode = XMLString::replicate(value); } /** * It creates a copy according to ascii value.
* Vytvoří kopii podle ascii hodnoty. */ void setValue(const char* const value) { release(); ascii = XMLString::replicate(value); unicode = XMLString::transcode(value); } /** It releases memory.
Uvolní paměť. */ ~StrX() { release(); } // ----------------------------------------------------------------------- // Getter methods // ----------------------------------------------------------------------- /** It returns ascii string.
Vrátí ascii řetězec. */ const char* toAscii() const { return ascii; } /** It returns unicode strign.
Vrátí unicode řetězec. */ const XMLCh* toUnicode() const { return unicode; } /** Comparising with ascii string.
Porovnání s ascii řetězcem. */ bool equals(const char * str) { return XMLString::compareString(ascii, str) == 0; } /** Comparising with unicode string.
Porovnání s unicode řetězcem. */ bool equals(const XMLCh * str) { return XMLString::compareString(unicode, str) == 0; } private : // ----------------------------------------------------------------------- // Private data members // // ascii // This is the local code page form of the string. // ----------------------------------------------------------------------- char* ascii; /**< Ascii string. */ XMLCh* unicode; /**< Unicode string. */ /** It releases memory.
Uvolní paměť. */ void release() { if (ascii != NULL) delete [] ascii; if (unicode != NULL) delete [] unicode; ascii = NULL; unicode = NULL; } }; /** * @ingroup xml * Writing into stream.
Zápis do streamu. */ inline ostream& operator<<(ostream& target, const StrX& toDump) { target << toDump.toAscii(); return target; }