Blame | Last modification | View Log | RSS feed
#ifndef STREAM_BASE_INCLUDED#define STREAM_BASE_INCLUDEDnamespace mystream {class stream_base{public:enum state{goodbit=0,failbit=1,eofbit=2,badbit=4};enum seek_type{seek_begin,seek_end,seek_current};struct pos_type;struct off_type{int offset;off_type() { offset=0; }off_type(const off_type& other) { offset=other.offset; }explicit off_type(const pos_type& other) { offset=(int)other.pos; }off_type(size_t s) { offset=(int)s; }operator long() { return (long) offset; }off_type operator -(const off_type& other) const { return (off_type)(offset - other.offset); }off_type operator -(int other) const { return (off_type)(offset - other); }off_type operator +(const off_type& other) const { return (off_type)(offset + other.offset); }off_type operator +(int i) const { return (off_type)(offset + i); }off_type operator +=(const off_type& other) { return offset+=other.offset; }bool operator ==(const off_type& other) const { return offset==other.offset; }};typedef off_type offset_type;struct pos_type{size_t pos;pos_type() { pos=0; }pos_type(const pos_type& other) { pos=other.pos; }pos_type(size_t s) { pos=s; }offset_type operator -(const pos_type& other) const { return (offset_type)(pos - other.pos); }offset_type operator +(const pos_type& other) const { return (offset_type)(pos + other.pos); }bool operator ==(const pos_type& other) const { return pos==other.pos; }bool operator ==(int i) const { return pos == (size_t)i; }operator size_t () const { return (size_t)pos; }};typedef size_t size_type;private:int m_state;int m_flags;public:stream_base() { m_flags=0; clear(goodbit); }virtual ~stream_base() { }void clear(state s) { m_state=s; }int setstate(state s){int old=m_state;m_state|=s;return old;}int rdstate() const { return m_state; }bool good() const { return rdstate() == goodbit; }bool bad() const { return (rdstate() & badbit) > 0; }bool fail() const { return ((rdstate() & (failbit | badbit))!=0); }bool eof() const { return (rdstate() & eofbit) > 0; }int flags() const { return m_flags; }int flags(int newflags){int old=m_flags;m_flags = newflags;return old;}int setf(int newflags){int old=m_flags;m_flags|=newflags;return old;}void unsetf(int mask) { m_flags&=~mask; }};}#endif // !defined(STREAM_BASE_INCLUDED)