00001
00002
00003
00004
00005
00006
00007
00008 #ifndef _SK_RT_LOGGER_STREAM_
00009 #define _SK_RT_LOGGER_STREAM_
00010
00011 #include <sk/util/Object.h>
00012 #include <sk/rt/logger/IScope.h>
00013 #include <sk/rt/logger/Level.h>
00014 #include <sstream>
00015
00016 namespace sk {
00017 namespace rt {
00018 namespace logger {
00019 class Level;
00020
00021 class Stream
00022 : public virtual sk::util::Object
00023 {
00024 public:
00025 Stream(const sk::util::String& label, const Level& level, const logger::IScope& scope);
00026 Stream(const Stream& other);
00027 virtual ~Stream();
00028
00029 bool isEnabled() const;
00030 std::ostream& getStream() const;
00031
00032
00033 const sk::util::Class getClass() const;
00034
00035 private:
00036 Stream& operator = (const Stream& other);
00037
00038 void makeHeader(std::ostream& stream) const;
00039
00040 const logger::IConfig& _config;
00041 const logger::IScope& _scope;
00042 const sk::util::String& _label;
00043 const Level& _level;
00044 mutable std::stringstream _stream;
00045 mutable bool _requested;
00046 bool _enabled;
00047 };
00048
00049 template<typename T>
00050 inline const sk::rt::logger::Stream& operator<<(const sk::rt::logger::Stream& stream, const T& object) {
00051 if(stream.isEnabled() == true) {
00052 stream.getStream() << object;
00053 }
00054 return stream;
00055 }
00056 }
00057 }
00058 }
00059
00060 #endif