#ifndef PIINCLUDES_H #define PIINCLUDES_H #if __WIN32__ || __WIN64__ # define WINDOWS #endif #if __QNX__ # define QNX #endif #include #include #ifndef QNX # include # include #else # include # include #endif #include #include #include #include #include #include #include #include #ifdef WINDOWS #include #include #include #endif #define FOREVER for (;;) #define FOREVER_WAIT FOREVER msleep(10); typedef long long llong; typedef unsigned char uchar; typedef unsigned short int ushort; typedef unsigned int uint; typedef unsigned long ulong; typedef unsigned long long ullong; typedef long double ldouble; using std::cout; using std::cin; using std::endl; using std::flush; using std::vector; using std::list; using std::deque; using std::string; template > class PIVector: public vector { public: inline const Type & at(uint index) const {return (*this)[index];} inline Type & at(uint index) {return (*this)[index];} inline const Type * data(uint index = 0) const {return &(*this)[index];} inline Type * data(uint index = 0) {return &(*this)[index];} inline void fill(const Type & t) {vector::assign(vector::size(), t);} inline void pop_front() {vector::erase(vector::begin());} inline void push_front(const Type & t) {vector::insert(vector::begin(), t);} inline void remove(uint num) {vector::erase(vector::begin() + num);} inline void remove(uint num, uint count) {vector::erase(vector::begin() + num, vector::begin() + num + count);} inline void insert(uint pos, const Type & t) {vector::insert(vector::begin() + pos, t);} }; template > class PIList: public list { public: inline const Type * data(uint index = 0) const {return &(*this)[index];} inline Type * data(uint index = 0) {return &(*this)[index];} inline void fill(const Type & t) {list::assign(list::size(), t);} inline void remove(uint num) {list::erase(list::begin() + num);} inline void remove(uint num, uint count) {list::erase(list::begin() + num, list::begin() + num + count);} inline void insert(uint pos, const Type & t) {list::insert(list::begin() + pos, t);} }; template class Flags { private: int flags; public: inline Flags(): flags(0) {;} inline Flags(Enum e): flags(e) {;} inline Flags(const Flags & f): flags(f.flags) {;} inline Flags(const int i): flags(i) {;} inline void operator =(const Flags & f) {flags = f.flags;} inline void operator |=(const Flags & f) {flags = flags | f.flags;} inline void operator |=(const Enum & e) {flags = flags | e;} inline void operator |=(const int i) {flags = flags | i;} inline void operator &=(const Flags & f) {flags = flags & f.flags;} inline void operator &=(const Enum & e) {flags = flags & e;} inline void operator &=(const int i) {flags = flags & i;} inline Flags & operator |(Flags f) const {Flags tf(flags | f.flags); return tf;} inline Flags & operator |(Enum e) const {Flags tf(flags | e); return tf;} inline Flags & operator |(int i) const {Flags tf(flags | i); return tf;} inline Flags & operator &(Flags f) const {Flags tf(flags & f.flags); return tf;} inline Flags & operator &(Enum e) const {Flags tf(flags & e); return tf;} inline Flags & operator &(int i) const {Flags tf(flags & i); return tf;} inline bool operator [](Enum e) {return (flags & e) == e;} inline operator int() const {return flags;} }; #ifdef WINDOWS inline int random() {return rand();} #endif template inline void piSwap(Type & f, Type & s) {Type t = f; f = s; s = t;} template inline Type piMin(const Type & f, const Type & s) {return (f > s) ? s : f;} template inline Type piMax(const Type & f, const Type & s) {return (f < s) ? s : f;} template inline Type piMin(const Type & f, const Type & s, const Type & t) {return (f < s && f < t) ? f : ((s < t) ? s : t);} template inline Type piMax(const Type & f, const Type & s, const Type & t) {return (f > s && f > t) ? f : ((s > t) ? s : t);} inline bool atob(const string & str) { return str == "1" ? true : false;}; inline string btos(const bool num) { return num ? "0" : "1";}; inline string itos(const int num) { char ch[256]; sprintf(ch, "%d", num); return string(ch); }; inline string ltos(const long num) { char ch[256]; sprintf(ch, "%ld", num); return string(ch); }; inline string uitos(const uint num) { char ch[256]; sprintf(ch, "%ud", num); return string(ch); }; inline string ultos(const ulong num) { char ch[256]; sprintf(ch, "%lud", num); return string(ch); }; inline string ftos(const float num) { char ch[256]; sprintf(ch, "%g", num); return string(ch); }; inline string dtos(const double num) { char ch[256]; sprintf(ch, "%g", num); return string(ch); }; #endif // PIINCLUDES_H