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
00031
00032
00033
00039 #ifndef BLOCXX_CHAR16_HPP_INCLUDE_GUARD_
00040 #define BLOCXX_CHAR16_HPP_INCLUDE_GUARD_
00041 #include "blocxx/BLOCXX_config.h"
00042 #include "blocxx/ArrayFwd.hpp"
00043 #include "blocxx/Types.hpp"
00044 #include "blocxx/Bool.hpp"
00045 #include "blocxx/CommonFwd.hpp"
00046 #include "blocxx/SafeBool.hpp"
00047 #include <iosfwd>
00048
00049 namespace BLOCXX_NAMESPACE
00050 {
00051
00052 class String;
00056 class BLOCXX_COMMON_API Char16
00057 {
00058 public:
00062 Char16() : m_value(0) {}
00067 Char16(const Char16& arg) : m_value(arg.m_value) {}
00072 explicit Char16(char c) : m_value(c) {}
00078 explicit Char16(const String& x);
00085 Char16(UInt16 val) : m_value(val) {}
00090 explicit Char16(Int16 val) : m_value(val) {}
00095 explicit Char16(UInt8 val) : m_value(val) {}
00100 explicit Char16(Int8 val) : m_value(val) {}
00105 explicit Char16(UInt32 val) : m_value(val) {}
00110 explicit Char16(Int32 val) : m_value(val) {}
00115 explicit Char16(UInt64 val) : m_value(static_cast<UInt16>(val)) {}
00120 explicit Char16(Int64 val) : m_value(static_cast<UInt16>(val)) {}
00125 explicit Char16(Real32 val) : m_value(static_cast<UInt16>(val)) {}
00130 explicit Char16(Real64 val) : m_value(static_cast<UInt16>(val)) {}
00135 explicit Char16(Bool val) : m_value(val) {}
00139 UInt16 getValue() const { return m_value; }
00143 operator UInt16() const { return getValue(); }
00149 Char16& operator= (const Char16& arg)
00150 {
00151 m_value = arg.m_value;
00152 return *this;
00153 }
00159 bool operator== (const Char16& arg) const
00160 {
00161 return m_value == arg.m_value;
00162 }
00168 bool operator!= (const Char16& arg) const
00169 {
00170 return m_value != arg.m_value;
00171 }
00177 bool operator< (const Char16& arg) const
00178 {
00179 return m_value < arg.m_value;
00180 }
00187 bool operator<= (const Char16& arg) const
00188 {
00189 return m_value <= arg.m_value;
00190 }
00196 bool operator> (const Char16& arg) const
00197 {
00198 return m_value > arg.m_value;
00199 }
00206 bool operator>= (const Char16& arg) const
00207 {
00208 return m_value >= arg.m_value;
00209 }
00215 Char16& operator+= (const Char16& arg)
00216 {
00217 m_value += arg.m_value;
00218 return *this;
00219 }
00225 Char16& operator-= (const Char16& arg)
00226 {
00227 m_value -= arg.m_value;
00228 return *this;
00229 }
00235 Char16& operator*= (const Char16& arg)
00236 {
00237 m_value *= arg.m_value;
00238 return *this;
00239 }
00245 Char16& operator/= (const Char16& arg)
00246 {
00247 m_value /= arg.m_value;
00248 return *this;
00249 }
00250
00251 BLOCXX_SAFE_BOOL_IMPL(Char16, UInt16, Char16::m_value, m_value)
00252
00253
00256 String toUTF8() const BLOCXX_DEPRECATED;
00260 String toString() const;
00265 void writeObject(std::streambuf & ostrm) const;
00270 void readObject(std::streambuf & istrm);
00271 private:
00272 UInt16 m_value;
00273 };
00274 BLOCXX_EXPORT_TEMPLATE(BLOCXX_COMMON_API, Array, Char16);
00275
00276 inline bool operator== (char c, const Char16& arg)
00277 {
00278 return Char16(c) == arg;
00279 }
00280 inline bool operator== (const Char16& arg, int v)
00281 {
00282 return (arg.getValue() == v);
00283 }
00284 inline bool operator== (int v, const Char16& arg)
00285 {
00286 return (arg.getValue() == v);
00287 }
00288 inline bool operator!= (const Char16& arg, int v)
00289 {
00290 return (arg.getValue() != v);
00291 }
00292 inline bool operator!= (int v, const Char16& arg)
00293 {
00294 return (arg.getValue() != v);
00295 }
00296 inline bool operator!= (char c, const Char16& arg)
00297 {
00298 return Char16(c) != arg;
00299 }
00300 inline bool operator< (char c, const Char16& arg)
00301 {
00302 return Char16(c) < arg;
00303 }
00304 inline bool operator<= (char c, const Char16& arg)
00305 {
00306 return Char16(c) <= arg;
00307 }
00308 inline bool operator> (char c, const Char16& arg)
00309 {
00310 return Char16(c) > arg;
00311 }
00312 inline bool operator>= (char c, const Char16& arg)
00313 {
00314 return Char16(c) >= arg;
00315 }
00316 inline Char16 operator+ (const Char16& arg1, const Char16& arg2)
00317 {
00318 return Char16(UInt16(arg1.getValue() + arg2.getValue()));
00319 }
00320 inline Char16 operator- (const Char16& arg1, const Char16& arg2)
00321 {
00322 return Char16(UInt16(arg1.getValue() - arg2.getValue()));
00323 }
00324 inline Char16 operator* (const Char16& arg1, const Char16& arg2)
00325 {
00326 return Char16(UInt16(arg1.getValue() * arg2.getValue()));
00327 }
00328 inline Char16 operator/ (const Char16& arg1, const Char16& arg2)
00329 {
00330 return Char16(UInt16(arg1.getValue() / arg2.getValue()));
00331 }
00332 BLOCXX_COMMON_API std::ostream& operator<< (std::ostream& ostrm, const Char16& arg);
00333
00334 }
00335
00336 #endif