/************************************************************/ | |
/* */ | |
/* 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 */ | |