freertos/Demo/Common/SimpleOStream.hpp

74 lines
1.8 KiB
C++

#ifndef SIMPLEOSTREAM_HPP
#define SIMPLEOSTREAM_HPP
#include <cstdio> // dla putchar
class SimpleOStream {
public:
SimpleOStream& operator<<(const char* str) {
while (*str) {
putchar(*str++);
}
return *this;
}
SimpleOStream& operator<<(char c) {
putchar(c);
return *this;
}
SimpleOStream& operator<<(int num) {
char buffer[12]; // wystarczająco duży, aby pomieścić liczbę int
snprintf(buffer, sizeof(buffer), "%d", num);
return *this << buffer;
}
SimpleOStream& operator<<(unsigned int num) {
char buffer[12];
snprintf(buffer, sizeof(buffer), "%u", num);
return *this << buffer;
}
SimpleOStream& operator<<(long num) {
char buffer[20]; // wystarczająco duży, aby pomieścić liczbę long
snprintf(buffer, sizeof(buffer), "%ld", num);
return *this << buffer;
}
SimpleOStream& operator<<(unsigned long num) {
char buffer[20];
snprintf(buffer, sizeof(buffer), "%lu", num);
return *this << buffer;
}
SimpleOStream& operator<<(double num) {
char buffer[64]; // wystarczająco duży, aby pomieścić liczbę double
snprintf(buffer, sizeof(buffer), "%f", num);
return *this << buffer;
}
SimpleOStream& operator<<(void* ptr) {
char buffer[20];
snprintf(buffer, sizeof(buffer), "%p", ptr);
return *this << buffer;
}
// Użyj tego operatora do manipulacji takimi jak std::endl
SimpleOStream& operator<<(SimpleOStream& (*manip)(SimpleOStream&)) {
return manip(*this);
}
};
// Manipulator std::endl
SimpleOStream& endl(SimpleOStream& os) {
os << '\n';
fflush(stdout);
return os;
}
// Globalny obiekt dla strumienia wyjściowego
extern SimpleOStream simpleCout;
#endif // SIMPLEOSTREAM_HPP