git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8964 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			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 */
 | |
| 
 |