Subversion Repositories spk

Rev

Blame | Last modification | View Log | RSS feed

#ifndef EXT_STREAM_INCLUDED
#define EXT_STREAM_INCLUDED

namespace ext {

class stream_base
{
        public:
                enum state
                {
                        goodbit=0,
                        failbit=1,
                        eofbit=2,
                        badbit=4
                };
                
        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(EXT_STREAM_INCLUDED)