DLG_stream_input.h
资源名称:pccts133.zip [点击查看]
上传用户:itx_2006
上传日期:2007-01-06
资源大小:493k
文件大小:2k
源码类别:
编译器/解释器
开发平台:
Others
- /************************************************************/
- /* */
- /* 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 */