forked from BSB-WS23/mpstubs
wip stringbuffer and outputputStream
This commit is contained in:
parent
3e8f31ac80
commit
7c3930bd1a
|
@ -1 +1,77 @@
|
||||||
#include "outputstream.h"
|
#include "outputstream.h"
|
||||||
|
|
||||||
|
OutputStream& OutputStream::operator<<(char c) {
|
||||||
|
put(c);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream& OutputStream::operator<<(unsigned char c) {
|
||||||
|
put(static_cast<char>(c));
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream& OutputStream::operator<< (const char* string) {
|
||||||
|
|
||||||
|
// check for sufficient space
|
||||||
|
// string length = sizeof(string)/sizeof(char)
|
||||||
|
// max size of buffer = sizeof(buffer)/sizeof(char)
|
||||||
|
// next position = pos
|
||||||
|
|
||||||
|
|
||||||
|
if (sizeof(string)/sizeof(char) <= (sizeof(buffer)/sizeof(char)) - pos) {
|
||||||
|
for (int i = 0; i < sizeof(string)/sizeof(char); i++) {
|
||||||
|
put(string[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream& OutputStream::operator<< (bool b) {
|
||||||
|
if (b) {
|
||||||
|
OutputStream::operator<<("True");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
OutputStream::operator<<("False");
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream& OutputStream::operator<< (short ival) {
|
||||||
|
if (base = 2) {
|
||||||
|
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream& OutputStream::operator<< (const void* ptr) {
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream& OutputStream::operator<< (OutputStream& (*f) (OutputStream&)) {
|
||||||
|
return f(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream& bin(OutputStream& os) {
|
||||||
|
os -> base = 2;
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream& hex(OutputStream& os) {
|
||||||
|
os -> base = 16;
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream& oct(OutputStream& os) {
|
||||||
|
os -> base = 8;
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream& dec(OutputStream& os) {
|
||||||
|
os -> base = 10;
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream& endl(OutputStream& os) {
|
||||||
|
os << "\n";
|
||||||
|
os.flush();
|
||||||
|
return os;
|
||||||
|
}
|
|
@ -58,7 +58,7 @@
|
||||||
* whose detailed description is given below.
|
* whose detailed description is given below.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class OutputStream {
|
class OutputStream : public Stringbuffer{
|
||||||
OutputStream(const OutputStream&) = delete;
|
OutputStream(const OutputStream&) = delete;
|
||||||
OutputStream& operator=(const OutputStream&) = delete;
|
OutputStream& operator=(const OutputStream&) = delete;
|
||||||
|
|
||||||
|
@ -73,7 +73,9 @@ class OutputStream {
|
||||||
* \todo Implement Constructor
|
* \todo Implement Constructor
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
OutputStream() {}
|
explicit OutputStream(int base = 10)::Stringbuffer() {
|
||||||
|
this -> base = base;
|
||||||
|
}
|
||||||
|
|
||||||
/*! \brief Destructor
|
/*! \brief Destructor
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,2 +1,15 @@
|
||||||
#include "stringbuffer.h"
|
#include "stringbuffer.h"
|
||||||
|
|
||||||
|
|
||||||
|
void Stringbuffer::put(char c) {
|
||||||
|
|
||||||
|
if (pos < sizeof(buffer)/sizeof(char)) {
|
||||||
|
buffer[pos] = c;
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pos >= sizeof(buffer)/sizeof(char)) {
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,22 +40,25 @@ class Stringbuffer {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// buffer containing characters that will be printed upon flush()
|
/// buffer containing characters that will be printed upon flush()
|
||||||
char buffer[80];
|
char buffer[80] = {0};
|
||||||
/// current position in the buffer
|
/// current position in the buffer
|
||||||
long unsigned pos;
|
long unsigned pos;
|
||||||
|
|
||||||
/*! \brief Constructor; Marks the buffer as empty
|
/*! \brief Constructor; Marks the buffer as empty
|
||||||
*
|
*
|
||||||
* \todo Complete Constructor
|
*
|
||||||
*/
|
*/
|
||||||
Stringbuffer() { }
|
Stringbuffer() {
|
||||||
|
pos = 0;
|
||||||
|
// buffer = {0};
|
||||||
|
}
|
||||||
|
|
||||||
/*! \brief Inserts a character into the buffer.
|
/*! \brief Inserts a character into the buffer.
|
||||||
*
|
*
|
||||||
* Once the buffer is full, a call to flush() will be issued and
|
* Once the buffer is full, a call to flush() will be issued and
|
||||||
* thereby clearing the buffer.
|
* thereby clearing the buffer.
|
||||||
*
|
*
|
||||||
* \todo Implement Method
|
*
|
||||||
*
|
*
|
||||||
* \param c Char to be added
|
* \param c Char to be added
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,2 +1,9 @@
|
||||||
#include "console_out.h"
|
#include "console_out.h"
|
||||||
|
|
||||||
|
ConsoleOut():OutputStream() {}
|
||||||
|
|
||||||
|
void flush() {
|
||||||
|
for(char output : buffer) {
|
||||||
|
putchar(output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue