1
Files
lecture-operating-system-de…/c_os/lib/OutStream.cc
2022-07-15 01:28:18 +02:00

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