00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _LOG4SHIB_CATEGORYSTREAM_HH
00011 #define _LOG4SHIB_CATEGORYSTREAM_HH
00012
00013 #include <log4shib/Portability.hh>
00014 #include <log4shib/Priority.hh>
00015 #ifdef LOG4SHIB_HAVE_SSTREAM
00016 #include <sstream>
00017 #endif
00018
00019 namespace log4shib {
00020
00021 class LOG4SHIB_EXPORT Category;
00022 class LOG4SHIB_EXPORT CategoryStream;
00023
00027 LOG4SHIB_EXPORT CategoryStream& eol (CategoryStream& os);
00028
00033 class LOG4SHIB_EXPORT CategoryStream {
00034 public:
00035
00042 CategoryStream(Category& category, Priority::Value priority);
00043
00047 ~CategoryStream();
00048
00053 inline Category& getCategory() const { return _category; };
00054
00059 inline Priority::Value getPriority() const throw() {
00060 return _priority;
00061 };
00062
00067 void flush();
00068
00074 template<typename T> CategoryStream& operator<<(const T& t) {
00075 if (getPriority() != Priority::NOTSET) {
00076 if (!_buffer) {
00077 if (!(_buffer = new std::ostringstream)) {
00078
00079 }
00080 }
00081 (*_buffer) << t;
00082 }
00083 return *this;
00084 }
00085
00086 private:
00087 Category& _category;
00088 Priority::Value _priority;
00089 std::ostringstream* _buffer;
00090
00091 public:
00092 typedef CategoryStream& (*cspf) (CategoryStream&);
00093 CategoryStream& operator << (cspf);
00094 LOG4SHIB_EXPORT friend CategoryStream& eol (CategoryStream& os);
00095 };
00096
00097 }
00098 #endif // _LOG4SHIB_CATEGORYSTREAM_HH