mirror of https://github.com/acidanthera/audk.git
99 lines
1.9 KiB
C++
99 lines
1.9 KiB
C++
|
|
/************************************************************/
|
|
/* */
|
|
/* 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 */
|
|
|