84 lines
3.5 KiB
C++
Executable File
84 lines
3.5 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"
|
|
|
|
// NOTE: I added this, fixed width printing
|
|
void OutStream::put(char c) {
|
|
if (this->fill_width == 0) {
|
|
StringBuffer::put(c);
|
|
} else if (this->fill_used == this->fill_width - 1) {
|
|
// This indicates that content has been cut
|
|
StringBuffer::put('@');
|
|
this->fill_use_char();
|
|
} else if (this->fill_used == this->fill_width) {
|
|
// do nothing
|
|
} else {
|
|
StringBuffer::put(c);
|
|
this->fill_use_char();
|
|
}
|
|
}
|
|
void OutStream::fill_finalize() {
|
|
if (this->fill_width == 0 || this->fill_used == this->fill_width) {
|
|
// do nothing
|
|
} else if (this->fill_used > this->fill_width) {
|
|
// should never happen
|
|
} else {
|
|
for (unsigned char i = 0; i < this->fill_width - this->fill_used; ++i) {
|
|
StringBuffer::put(this->fill_char);
|
|
}
|
|
}
|
|
|
|
this->fill_used = 0;
|
|
}
|
|
void OutStream::fill_use_char() {
|
|
if (this->fill_width == 0) {
|
|
return;
|
|
}
|
|
this->fill_used++;
|
|
}
|
|
void OutStream::flush() {
|
|
// TODO: Should not be reset like this
|
|
// Flushing resets fixed width
|
|
this->base = 10;
|
|
this->fill_char = ' ';
|
|
this->fill_width = 0;
|
|
this->fill_used = 0;
|
|
}
|
|
|
|
//
|
|
// Zeichen und Zeichenketten in Stream ausgeben
|
|
//
|
|
// NOTE: The implementations now resides 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
|