1
Files
2022-07-23 22:46:03 +02:00

85 lines
3.3 KiB
C++
Executable File

/*****************************************************************************
* *
* O U T S T R E A M *
* *
*---------------------------------------------------------------------------*
* Beschreibung: Die Klasse OutStream enthaelt die Definition des *
* << Operators fuer die wichtigsten der vordefinierten *
* Datentypen und realisiert somit die bekannte Ausgabe- *
* funktion der C++ iO_Stream Bibliothek. Zur Zeit wird *
* die Darstellung von Zeichen, Zeichenketten und ganzen *
* Zahlen unterstuetzt. Ein weiterer << Operator erlaubt *
* die Verwendung von Manipulatoren. *
* *
* Neben der Klasse OutStream sind hier auch die *
* Manipulatoren hex, dec, oct und bin fuer die Wahl der *
* Basis bei der Zahlendarstellung, sowie endl fuer den *
* Zeilenumbruch definiert. *
* *
* Autor: Olaf Spinczyk, TU Dortmund *
* Aenderungen von Michael Schoettner, HHU, 1.8.16 *
*****************************************************************************/
#include "lib/OutStream.h"
void OutStream::put(char c) {
if (fill_width == 0) {
StringBuffer::put(c);
} else if (fill_used == fill_width - 1) {
// This indicates that content has been cut
StringBuffer::put('@');
fill_use_char();
} else if (fill_used == fill_width) {
// do nothing
} else {
StringBuffer::put(c);
fill_use_char();
}
}
void OutStream::fill_finalize() {
if (fill_width == 0 || fill_used == fill_width) {
// do nothing
} else if (fill_used > fill_width) {
// should never happen
} else {
for (unsigned char i = 0; i < fill_width - fill_used; ++i) {
StringBuffer::put(fill_char);
}
}
fill_used = 0;
}
void OutStream::fill_use_char() {
if (fill_width == 0) {
return;
}
fill_used++;
}
void OutStream::flush() {
// Flushing resets fixed width
base = 10;
fill_char = ' ';
fill_width = 0;
fill_used = 0;
}
//
// Zeichen und Zeichenketten in Stream ausgeben
//
// NOTE: The implementations now reside in the OutStream.h as I switched them to templated functions
//
// Manipulatorfunktionen
//
// Die folgenden Funktionen erhalten und liefern jeweils eine Referenz auf
// ein OutStream Objekt. Da die Klasse O_Stream einen Operator << fuer
// derartige Funktionen definiert, koennen sie mit Hilfe dieses Operators
// aufgerufen und sogar in weitere Eingaben eingebettet werden.
// Aufgabe der Manipulatoren ist, die Darstellung der nachfolgenden Ausgaben
// zu beeinflussen, z.B durch die Wahl des Zahlensystems.
// NOTE: The implementations now resides in the OutStream.h as I switched them to templated functions