Files
pip/pichar.h
2011-10-09 22:23:52 +04:00

103 lines
5.2 KiB
C++

#ifndef PICHAR_H
#define PICHAR_H
#include "piincludes.h"
class PIChar
{
friend class PIString;
public:
PIChar(const char c) {ch = c; ch &= 0xFF;}
PIChar(const short c) {ch = c; ch &= 0xFFFF;}
PIChar(const int c = 0) {ch = c;}
PIChar(const uchar c) {ch = c; ch &= 0xFF;}
PIChar(const ushort c) {ch = c; ch &= 0xFFFF;}
PIChar(const uint c) {ch = c;}
PIChar(const char * c) {ch = *reinterpret_cast<const int * >(c);}
//inline operator const int() {return static_cast<const int>(ch);}
//inline operator const char() {return toAscii();}
inline PIChar & operator =(const char v) {ch = v; return *this;}
/*inline PIChar & operator =(const short v) {ch = v; return *this;}
inline PIChar & operator =(const int v) {ch = v; return *this;}
inline PIChar & operator =(const uchar v) {ch = v; return *this;}
inline PIChar & operator =(const ushort v) {ch = v; return *this;}
inline PIChar & operator =(const uint v) {ch = v; return *this;}*/
inline bool operator ==(const PIChar & o) const {return strcmp(o.toCharPtr(), toCharPtr()) == 0;}
/*inline bool operator ==(const PIChar & o) const {if (o.isAscii() ^ isAscii()) return false;
if (isAscii()) return (o.toAscii() == toAscii());
return (o.toInt() == toInt());}
inline bool operator ==(const char o) const {return (PIChar(o) == *this);}
inline bool operator ==(const short o) const {return (PIChar(o) == *this);}
inline bool operator ==(const int o) const {return (PIChar(o) == *this);}
inline bool operator ==(const uchar o) const {return (PIChar(o) == *this);}
inline bool operator ==(const ushort o) const {return (PIChar(o) == *this);}
inline bool operator ==(const uint o) const {return (PIChar(o) == *this);}*/
inline bool operator !=(const PIChar & o) const {return !(o == *this);}
/*inline bool operator !=(const char o) const {return (PIChar(o) != *this);}
inline bool operator !=(const short o) const {return (PIChar(o) != *this);}
inline bool operator !=(const int o) const {return (PIChar(o) != *this);}
inline bool operator !=(const uchar o) const {return (PIChar(o) != *this);}
inline bool operator !=(const ushort o) const {return (PIChar(o) != *this);}
inline bool operator !=(const uint o) const {return (PIChar(o) != *this);}*/
inline bool operator >(const PIChar & o) const {return strcmp(o.toCharPtr(), toCharPtr()) < 0;}
inline bool operator <(const PIChar & o) const {return strcmp(o.toCharPtr(), toCharPtr()) > 0;}
inline bool operator >=(const PIChar & o) const {return strcmp(o.toCharPtr(), toCharPtr()) <= 0;}
inline bool operator <=(const PIChar & o) const {return strcmp(o.toCharPtr(), toCharPtr()) >= 0;}
inline bool isDigit() const {return isdigit(ch);}
inline bool isHex() const {return isxdigit(ch);}
inline bool isGraphical() const {return isgraph(ch);}
inline bool isControl() const {return iscntrl(ch);}
inline bool isLower() const {return islower(ch);}
inline bool isUpper() const {return isupper(ch);}
inline bool isPrint() const {return isprint(ch);}
inline bool isSpace() const {return isspace(ch);}
inline bool isAlpha() const {return isalpha(ch);}
inline bool isAscii() const {return isascii(ch);}
inline int toInt() const {return static_cast<const int>(ch);}
inline const wchar_t * toWCharPtr() const {return &ch;}
inline const char * toCharPtr() const {return reinterpret_cast<const char * >(&ch);}
inline const wchar_t toWChar() const {return ch;}
inline char toAscii() const {return ch % 256;}
inline int unicode16Code() const {wchar_t wc; if (mbtowc(&wc, toCharPtr(), 4) > 0) return wc; return 0;}
//#ifdef WINDOWS
// inline PIChar toUpper() const __attribute__ ((optimize(0))) {return PIChar(toupper(ch));}
// inline PIChar toLower() const __attribute__ ((optimize(0))) {return PIChar(tolower(ch));}
//#else
inline PIChar toUpper() const {return PIChar(toupper(ch));}
inline PIChar toLower() const {return PIChar(tolower(ch));}
//#endif
private:
wchar_t ch;
};
inline std::ostream & operator <<(std::ostream & s, const PIChar & v) {s << v.toCharPtr(); return s;}
inline bool operator ==(const char v, const PIChar & c) {return (PIChar(v) == c);}
inline bool operator >(const char v, const PIChar & c) {return (PIChar(v) > c);}
inline bool operator <(const char v, const PIChar & c) {return (PIChar(v) < c);}
inline bool operator >=(const char v, const PIChar & c) {return (PIChar(v) >= c);}
inline bool operator <=(const char v, const PIChar & c) {return (PIChar(v) <= c);}
inline bool operator ==(const char * v, const PIChar & c) {return (PIChar(v) == c);}
inline bool operator >(const char * v, const PIChar & c) {return (PIChar(v) > c);}
inline bool operator <(const char * v, const PIChar & c) {return (PIChar(v) < c);}
inline bool operator >=(const char * v, const PIChar & c) {return (PIChar(v) >= c);}
inline bool operator <=(const char * v, const PIChar & c) {return (PIChar(v) <= c);}
inline bool operator ==(const int v, const PIChar & c) {return (PIChar(v) == c);}
inline bool operator >(const int v, const PIChar & c) {return (PIChar(v) > c);}
inline bool operator <(const int v, const PIChar & c) {return (PIChar(v) < c);}
inline bool operator >=(const int v, const PIChar & c) {return (PIChar(v) >= c);}
inline bool operator <=(const int v, const PIChar & c) {return (PIChar(v) <= c);}
#endif // PICHAR_H