00001 /* 00002 * CategoryStream.hh 00003 * 00004 * Copyright 2001, LifeLine Networks BV (www.lifeline.nl). All rights reserved. 00005 * Copyright 2001, Bastiaan Bakker. All rights reserved. 00006 * 00007 * See the COPYING file for the terms of usage and distribution. 00008 */ 00009 00010 #ifndef _LOG4CPP_CATEGORYSTREAM_HH 00011 #define _LOG4CPP_CATEGORYSTREAM_HH 00012 00013 #include <log4cpp/Portability.hh> 00014 #include <log4cpp/Priority.hh> 00015 #ifdef LOG4CPP_HAVE_SSTREAM 00016 #include <sstream> 00017 #endif 00018 00019 namespace log4cpp { 00020 00021 class LOG4CPP_EXPORT Category; 00022 00027 class LOG4CPP_EXPORT CategoryStream { 00028 public: 00029 00034 typedef enum { 00035 ENDLINE 00036 } Separator; 00037 00044 CategoryStream(Category& category, Priority::Value priority); 00045 00049 ~CategoryStream(); 00050 00055 inline Category& getCategory() const { return _category; }; 00056 00061 inline Priority::Value getPriority() const throw() { 00062 return _priority; 00063 }; 00064 00072 CategoryStream& operator<<(Separator separator); 00073 00078 void flush(); 00079 00085 template<typename T> CategoryStream& operator<<(const T& t) { 00086 if (getPriority() != Priority::NOTSET) { 00087 if (!_buffer) { 00088 if (!(_buffer = new std::ostringstream)) { 00089 // XXX help help help 00090 } 00091 } 00092 (*_buffer) << t; 00093 } 00094 return *this; 00095 } 00096 00097 private: 00098 Category& _category; 00099 Priority::Value _priority; 00100 std::ostringstream* _buffer; 00101 }; 00102 00103 } 00104 #endif // _LOG4CPP_CATEGORYSTREAM_HH