www.pudn.com > zfxcengine-0.1.0.zip > ceConsoleStreams.cpp


// $Id: ceConsoleStreams.cpp,v 1.6 2005/06/04 15:12:12 jubu Exp $ 
///////////////////////////////////////////////////////////////////////// 
//  Module:    Scripting 
//! \file      ceConsoleStreams.cpp 
//! \brief     Enthält Klassen ceConsoleStreamBuf,ceLuaConsoleStream 
//! \author    Bjoern Meier 
// 
// Diese Datei steht unter der LGPL-Lizenz, welche 
// im Hauptordner(ZFXC-Engine) unter LICENSE 
// nachlesbar ist. 
//////////////////////////////////////////////////////////////////////////////// 
#include "Core/ceConsoleStreams.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
//notused : static char THIS_FILE[]=__FILE__; 
#endif 
 
#include "Core/ceMemManager.h" 
 
namespace ZFXCE  
{ 
	//////////////////////////////////////////////////////////////////////////////// 
	using std::ostream; 
 
	//////////////////////////////////////////////////////////////////////////////// 
	ceConsoleStreamBuf::ceConsoleStreamBuf() 
	{ 
		PUSH_FUNCTION; 
 
		m_sSize = 0; 
		m_ceConsole = NULL; 
		pReserve = new char[100]; 
		ce_assert (NULL != pReserve); 
		m_sSize = 100; 
		setp(pReserve, pReserve + 100); 
		setg(0, 0, 0);		// Version 1 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	ceConsoleStreamBuf::ceConsoleStreamBuf(ceConsole* Console) 
	{ 
		PUSH_FUNCTION; 
 
		ce_assert (NULL != Console); 
		m_sSize = 0; 
		pReserve = new char[100]; 
		ce_assert (NULL != pReserve); 
		m_sSize = 100; 
		setp(pReserve, pReserve + 100); 
		setg(0, 0, 0);		// Version 1 
		m_ceConsole = Console; 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	ceConsoleStreamBuf::~ceConsoleStreamBuf() 
	{ 
		PUSH_FUNCTION; 
 
		sync(); 
		if (m_sSize>1) 
			delete [] pReserve; 
		else 
			delete  pReserve; 
 
		pReserve = NULL; 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	INT ceConsoleStreamBuf::sync() 
	{ 
		PUSH_FUNCTION; 
 
		WriteToConsole(); 
		return (0); 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	void ceConsoleStreamBuf::WriteToConsole() 
	{ 
		PUSH_FUNCTION; 
 
		const DWORD dwCharsToWrite = pptr() - pbase(); 
		CHAR* sTemp = pbase(); 
		std::string sOutPut; 
 
		for (UINT i = 0; i(*sTemp)) 
				sOutPut += *sTemp; 
			++sTemp; 
		} 
 
		// Write messages and  
		if (dwCharsToWrite) { 
			if (NULL != m_ceConsole) { 
				m_ceConsole->AddOutPut(sOutPut); 
			} 
			setp(pbase(), epptr()); 
		} 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	INT ceConsoleStreamBuf::overflow(INT c) 
	{ 
		PUSH_FUNCTION; 
 
		WriteToConsole(); 
		if (c != EOF) { 
			if (pbase() == epptr()) 
				WriteCharToConsole(c); 
			else 
				sputc(c); 
		} 
		 
		return 0; 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	void ceConsoleStreamBuf::WriteCharToConsole(INT c) 
	{ 
		PUSH_FUNCTION; 
 
		std::string sOutPut; 
		sOutPut = static_cast(c); 
		m_ceConsole->AddOutPut(sOutPut); 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	ceConsole *ceConsoleStreamBuf::GetConsole() const 
	{ 
		PUSH_FUNCTION; 
 
		return m_ceConsole; 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	void ceConsoleStreamBuf::SetConsole(ceConsole *pConsole) 
	{ 
		PUSH_FUNCTION; 
 
		ce_assert (NULL != pConsole); 
		m_ceConsole = pConsole; 
	} 
} // Namespace ZFXCE