#ifndef SIMPLEOSTREAM_HPP #define SIMPLEOSTREAM_HPP #include // 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