00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00038 #ifndef LIBEBML_UNICODE_STRING_H
00039 #define LIBEBML_UNICODE_STRING_H
00040
00041 #include <string>
00042
00043 #include "EbmlTypes.h"
00044 #include "EbmlElement.h"
00045
00046 START_LIBEBML_NAMESPACE
00047
00053 class EBML_DLL_API UTFstring {
00054 public:
00055 typedef wchar_t value_type;
00056
00057 UTFstring();
00058 UTFstring(const wchar_t *);
00059 UTFstring(const UTFstring &);
00060
00061 virtual ~UTFstring();
00062 bool operator==(const UTFstring&) const;
00063 inline bool operator!=(const UTFstring &cmp) const
00064 {
00065 return !(*this == cmp);
00066 }
00067 UTFstring & operator=(const UTFstring &);
00068 UTFstring & operator=(const wchar_t *);
00069 UTFstring & operator=(wchar_t);
00070
00072 size_t length() const {return _Length;}
00073
00074 operator const wchar_t*() const {return _Data;}
00075 const wchar_t* c_str() const {return _Data;}
00076
00077 const std::string & GetUTF8() const {return UTF8string;}
00078 void SetUTF8(const std::string &);
00079
00080 #if defined(EBML_STRICT_API)
00081 private:
00082 #else
00083 protected:
00084 #endif
00085 size_t _Length;
00086 wchar_t* _Data;
00087 std::string UTF8string;
00088 static bool wcscmp_internal(const wchar_t *str1, const wchar_t *str2);
00089 void UpdateFromUTF8();
00090 void UpdateFromUCS2();
00091 };
00092
00093
00099 class EBML_DLL_API EbmlUnicodeString : public EbmlElement {
00100 public:
00101 EbmlUnicodeString();
00102 EbmlUnicodeString(const UTFstring & DefaultValue);
00103 EbmlUnicodeString(const EbmlUnicodeString & ElementToClone);
00104
00105 virtual ~EbmlUnicodeString() {}
00106
00107 virtual bool ValidateSize() const {return IsFiniteSize();}
00108 filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false);
00109 filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
00110 filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false);
00111
00112 EbmlUnicodeString & operator=(const UTFstring &);
00113 operator const UTFstring &() const {return Value;}
00114
00115 void SetDefaultValue(UTFstring &);
00116
00117 const UTFstring & DefaultVal() const;
00118
00119 bool IsDefaultValue() const {
00120 return (DefaultISset() && Value == DefaultValue);
00121 }
00122
00123 #if defined(EBML_STRICT_API)
00124 private:
00125 #else
00126 protected:
00127 #endif
00128 UTFstring Value;
00129 UTFstring DefaultValue;
00130 };
00131
00132 END_LIBEBML_NAMESPACE
00133
00134 #endif // LIBEBML_UNICODE_STRING_H