Logo Search packages:      
Sourcecode: pccts version File versions  Download package

DLG_stream_input.h

/************************************************************/
/*                                                                                        */
/*          Predefined char stream: Input from (c++) stream.      */
/*                                                                                        */
/* By Hubert Holin (Hubert.Holin@Bigfoot.com), 1998.        */
/*                                                                                        */
/* This is completely free stuff, do whatever you want with */
/* it (but then, I will take no responsability for whatever */
/* may happen if you do either... caveat emptor!).                */
/*                                                                                        */
/************************************************************/

#ifndef _DLG_STREAM_INPUT_H
#define _DLG_STREAM_INPUT_H

#include "pccts_istream.h"

PCCTS_NAMESPACE_STD

#ifndef DLGX_H
#include "DLexerBase.h"
#endif


// NOTES:   The semantics of the copy constructor
//                and the affectation operator may be unwaranted...
//                and the stream may not be reset.
//
//                It would have been so much nicer for nextChar()
//                to throw (of for the DLGInputStream to change status)
//                upon hiting EOF than to return an "int"...

template    <
                        class E,
                        class T = ::std::char_traits<E>
                  >
class DLG_stream_input : public DLGInputStream
{
public:
      
                                    DLG_stream_input(::std::basic_istream<E,T> * p_input_stream)
      :     input(p_input_stream)
      {
            // nothing to do!
      };
      
                                    DLG_stream_input(const DLG_stream_input & a_recopier)
      :     input(a_recopier.input)
      {
            // nothing to do!
      };
      
      virtual                       ~DLG_stream_input()
      {
            this->purge();    // bloody templarized lookup...
      };
      
      DLG_stream_input  operator = (const DLG_stream_input & a_affecter)
      {
            if (this != &a_affecter)
            {
                  input = a_affecter.input;
            }

            return(*this);
      };
      
      virtual int             nextChar()
      {
            E     extracted_stuff;
            
            input->get(extracted_stuff);
            
            if    (*input)
            {
                  return(int(extracted_stuff));
            }
            else
            {
                  return(EOF);
            }
      };
      
protected:
      
      ::std::basic_istream<E,T> *   input;
      
private:
      
      void  purge()
      {
            // nothing to do!
      };
};

#endif /* _DLG_STREAM_INPUT_H */


Generated by  Doxygen 1.6.0   Back to index