]> git.tdb.fi Git - libs/core.git/blobdiff - source/stringcodec/codec.h
Rename UnicodeChar to unichar
[libs/core.git] / source / stringcodec / codec.h
index ab2a3ea7c8491edc0297ae81ffddd1ae4e20c23e..eec1e4bddb092a80a03574aa6207c30df53150ea 100644 (file)
@@ -7,9 +7,9 @@
 namespace Msp {
 namespace StringCodec {
 
-typedef int UnicodeChar;
+typedef int unichar;
 
-typedef std::basic_string<UnicodeChar> ustring;
+typedef std::basic_string<unichar> ustring;
 
 enum ErrorMode
 {
@@ -58,7 +58,7 @@ public:
 
                /** Encodes a single unicode character.  If the character can't be
                represented in this encoding, error() should be called. */
-               virtual void encode_char(UnicodeChar ch, std::string &buf) = 0;
+               virtual void encode_char(unichar ch, std::string &buf) = 0;
 
                /** Encodes a unicode string.  This is equivalent to calling encode_char
                for each character in the string with the same buffer. */
@@ -79,11 +79,11 @@ public:
                THROW_ON_ERROR: throws CodecError(msg)
                IGNORE_ERRORS: does nothing
                TRANSLITERATE: calls transliterate(ch, buf) */
-               void error(UnicodeChar ch, std::string &buf, const std::string &msg);
+               void error(unichar ch, std::string &buf, const std::string &msg);
 
                /** Attempts to produce an alternative encoding for a unicode character.
                Typically this includes dropping accent marks or romanizing letters. */
-               virtual void transliterate(UnicodeChar ch, std::string &buf) = 0;
+               virtual void transliterate(unichar ch, std::string &buf) = 0;
        };
 
        /**
@@ -105,7 +105,7 @@ public:
                state change sequence was decoded but no character followed it.  If
                invalid input is encountered, the error() function should be called and
                the iterator advanced only if it doesn't throw. */
-               virtual UnicodeChar decode_char(const std::string &str, std::string::const_iterator &i) = 0;
+               virtual unichar decode_char(const std::string &str, std::string::const_iterator &i) = 0;
 
                /** Decodes a string. */
                virtual void decode(const std::string &str, ustring &buf);
@@ -122,7 +122,7 @@ public:
                THROW_ON_ERROR: throws CodecError(msg)
                IGNORE_ERRORS: returns -1
                TRANSLITERATE: return 0xFFFE */
-               UnicodeChar error(const std::string &msg);
+               unichar error(const std::string &msg);
        };
 
 protected:
@@ -154,9 +154,7 @@ template<class C>
 ustring decode(const std::string &s)
 {
        typename C::Decoder dec;
-       ustring result;
-       dec.decode(s, result);
-       return result;
+       return dec.decode(s);
 }
 
 /** Convenience function that encodes a string. */
@@ -164,24 +162,14 @@ template<class C>
 std::string encode(const ustring &s)
 {
        typename C::Encoder enc;
-       std::string result;
-       enc.encode(s, result);
-       enc.sync(result);
-       return result;
+       return enc.encode(s);
 }
 
 /** Convenience function that transcodes a string from one codec to another. */
 template<class F, class T>
 std::string transcode(const std::string &s)
 {
-       typename F::Decoder from;
-       typename T::Encoder to;
-       ustring temp;
-       from.decode(s, temp);
-       std::string result;
-       to.encode(temp, result);
-       to.sync(result);
-       return result;
+       return encode<T>(decode<F>(s));
 }
 
 /** Creates a codec for an encoding by name.  The caller is responsible for