Die innere Klasse OG_constreambuf wird von streambuf abgeleitet.
class OG_constreambuf : public std::streambuf{public: OG_constreambuf(int iBuffersize=100); virtual ~OG_constreambuf();
private: void WriteCharToConsole(int); void WriteToConsole(); void DeleteConsole(); void CreateConsole();
HANDLE hConsoleOut; char* pReserve;protected: int_type overflow(int_type); int_type sync();};
Die Elemente im public- und im protected-Bereich stellen Überschreibungen der Basisklasse dar, die Elemente im private-Bereich sind Erweiterungen. Die Klasse benutzt einen Ausgabe-Puffer, auf den pReserve zeigt und der in dem Konstruktor reserviert wird. Der Konstruktor erlaubt die Angabe der Puffergrösse.
OG_constreambuf::OG_constreambuf(int iBuffersize){ if (iBuffersize) { pReserve = new char[iBuffersize]; setp(pReserve, pReserve + iBuffersize); } else { pReserve = NULL; setp(0, 0); }
setg(0, 0, 0);
CreateConsole();}
Der Konstruktor ruft dann noch die Funktionen setp, setg und CreateConsole auf. Die Funktionen setp und setg sind von der Basisklasse geerbt und dienen dazu den Ein- bzw. Ausgabepuffer für die Benutzung durch die Stream-Klasse bekannt zu machen. setp setzt den Beginn und das Ende des Ausgabe-Puffers, setg ist das Pendant für den Eingabe-Puffer (hier 0, da kein Eingabe-Puffer vorhanden ist). Die Funktion CreateConsole öffnet ein Konsolen-Fenster. Falls schon ein Konsolen-Fenster existiert, wird es zuerst zerstört. Der HANDLE hConsoleOut wird für die Ausgabe benötigt.
void OG_constreambuf::CreateConsole(){ if (!AllocConsole()) { FreeConsole(); AllocConsole(); } hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);}