Line data Source code
1 : #pragma once 2 : 3 : #include "Log/ProgressLogger.hpp" 4 : 5 : namespace Log { 6 : class ProgressLoggerTableOStream: public ProgressLogger { 7 : template<class T> 8 142 : ProgressLogger &send(const T &t) { 9 142 : if(s != TEXT) 10 0 : throw std::logic_error("Cannot send if state is not TEXT"); 11 142 : os << t; 12 142 : return *this; 13 : } 14 : 15 : private: 16 : std::ostream &os; 17 : 18 : bool firstField = true; 19 : 20 : enum State { 21 : NO_MESSAGE, 22 : MESSAGE, 23 : TEXT 24 : }; 25 : State s = NO_MESSAGE; 26 : 27 : public: 28 : ProgressLoggerTableOStream(std::ostream &os = std::cout); 29 : 30 : virtual ProgressLoggerTableOStream &operator<<(const Progress &progress); 31 : virtual ProgressLoggerTableOStream &operator<<(const Elapsed &elapsed); 32 : virtual ProgressLoggerTableOStream &operator<<(const ETA &eta); 33 : virtual ProgressLoggerTableOStream &operator<<(const StartText &); 34 : virtual ProgressLoggerTableOStream &operator<<(const EndText &); 35 : virtual ProgressLoggerTableOStream &operator<<(const StartMessage &); 36 : virtual ProgressLoggerTableOStream &operator<<(const EndMessage &); 37 : 38 : virtual ProgressLoggerTableOStream &operator<<(const int &t); 39 : virtual ProgressLoggerTableOStream &operator<<(const unsigned long &t); 40 : virtual ProgressLoggerTableOStream &operator<<(const double &t); 41 : virtual ProgressLoggerTableOStream &operator<<(const char *t); 42 : 43 : virtual ProgressLoggerTableOStream &operator<<(std::_Setprecision f); 44 : 45 : ProgressLogger &operator<<(ProgressLogger &(*pf)(ProgressLogger &)); 46 : 47 : protected: 48 : virtual ProgressLoggerTableOStream &fixed(); 49 : }; 50 : 51 : } // namespace Log