1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /************************************************************/
- /* */
- /* 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 responsibility 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 unwarranted...
- // 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 hitting 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 */
|