Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00034 #ifndef KEYVALUE_SYS_MESSAGE_H_
00035 #define KEYVALUE_SYS_MESSAGE_H_
00036 
00037 #include <iosfwd>
00038 #include <sstream>
00039 
00040 #include "keyvalue/extern/String.h"
00041 #include "keyvalue/sys/logger/ConsoleColors.h"
00042 
00043 namespace keyvalue {
00044 
00055 class Message {
00056 
00057 public:
00058 
00059   virtual ~Message();
00060 
00066   unsigned int
00067   getLevel() const;
00068 
00074   string
00075   getString() const;
00076 
00082   virtual const string&
00083   getPrefix() const = 0;
00084 
00090   virtual logger::Color
00091   getColor() const = 0;
00092 
00127   template <typename DataType>
00128   Message&
00129   operator&(const DataType& data);
00130 
00131 protected:
00132 
00138   explicit
00139   Message(unsigned int level);
00140 
00141   Message(const Message& orig);
00142 
00143   struct Traits_ {
00144     string        prefix_;
00145     logger::Color color_;
00146   };
00147 
00148   static const Traits_ traits_[];
00149 
00150 private:
00151 
00152   unsigned int                level_;
00153   mutable std::ostringstream  buf_;
00154 
00155   
00156   Message&
00157   operator=(const Message& orig);
00158 
00159 }; 
00160 
00166 std::ostream&
00167 operator<<(std::ostream& os, const Message& message);
00168 
00169 
00170 
00171 
00172 
00173 template <typename DataType>
00174 Message&
00175 Message::operator&(const DataType& data) {
00176   buf_ << data;
00177   return *this;
00178 }
00179 
00180 } 
00181 
00182 #endif // KEYVALUE_SYS_MESSAGE_H_