DiaDes  0.1
DIAgnosis of Discrete-Event System
Verbose.hh
Go to the documentation of this file.
1 #ifndef __DIADES__UTILS__VERBOSE__HH
2 #define __DIADES__UTILS__VERBOSE__HH
3 
4 #include<boost/format.hpp>
5 #include <iostream>
6 #include <sstream>
7 #include <string>
8 #include "Functors.hh"
9 
10 using std::ostream;
11 using std::string;
12 using std::stringstream;
13 
14 namespace Diades
15 {
16  namespace Utils
17  {
18 
28  };
29 
30 };
31 
32 namespace Diades
33 {
34  namespace Utils
35  {
36 
42  typedef boost::format Msg;
43 
44 
45 
46 
47 
51  template<typename InputIterator,
52  typename Predicate >
53  class ToStream
54  {
55  public:
56  typedef InputIterator Iterator;
58 
59  ToStream(InputIterator first, InputIterator last, Predicate pred)
60  {
61  stringstream newStream;
62  newStream << "{ ";
63  for(; first != last; ++first)
64  {
65  if(pred(*first))
66  {
67  newStream << *first << " ";
68  }
69  }
70  newStream << "}";
71  _stream = newStream.str();
72  }
73 
74 
75  ToStream(const ToStream & ts):_stream(ts._stream){}
76  friend ostream & operator << (ostream & os, const ToStream & ts)
77  {
78  os << ts._stream;
79  return os;
80  }
81  private:
82  string _stream;
83  };
84 
85 
86 
93  class Verbose
94  {
95  public:
97 
98  static Level currentLevel;
99 
100  Verbose():_fmt(),_level(VbNothing){}
101 
102  Verbose(Level level, const char * msg ) : _fmt(msg), _level(level) {}
103 
104  ~Verbose();
105 
106  template <typename T>
107  Verbose & operator %(T value)
108  {
109 #ifndef __NO__VERBOSE
110  _fmt % value;
111 #endif
112  return *this;
113  }
114 
115  protected:
116  boost::format _fmt;
117  Level _level;
118 
119  };
120  };
121 };
122 
123 
124 
125 template<Diades::Utils::VerboseLevel level>
127 {
128 #ifdef __NO__VERBOSE
129  return Diades::Utils::Verbose();
130 #else
131  return Diades::Utils::Verbose(level,msg);
132 #endif
133 }
134 
136 {
138 }
139 
140 
141 
142 template<typename InputIterator>
144 {
146 }
147 
148 
149 template<typename InputIterator,typename Predicate>
150 Diades::Utils::ToStream<InputIterator,Predicate> toStream(InputIterator first, InputIterator last, Predicate predicate)
151 {
152  return Diades::Utils::ToStream<InputIterator,Predicate>(first,last,predicate);
153 }
154 
155 
156 #endif
157 
ToStream(InputIterator first, InputIterator last, Predicate pred)
Definition: Verbose.hh:59
InputIterator Iterator
Definition: Verbose.hh:56
static Level currentLevel
Definition: Verbose.hh:98
ToStream(const ToStream &ts)
Definition: Verbose.hh:75
void setVerboseLevel(Diades::Utils::VerboseLevel level)
Definition: Verbose.hh:135
boost::format _fmt
Definition: Verbose.hh:116
Namespace of the Diades project.
Diades::Utils::ToStream< InputIterator, Diades::Utils::AlwaysTrue< typename InputIterator::reference > > toStream(InputIterator first, InputIterator last)
Definition: Verbose.hh:143
std::ostream & operator<<(std::ostream &os, const Identifier &identifier)
Definition: Identifier.hh:501
Diades::Utils::Verbose verbose(const char *msg)
Definition: Verbose.hh:126
VerboseLevel Level
Definition: Verbose.hh:96
boost::format Msg
Definition: Verbose.hh:42
Verbose(Level level, const char *msg)
Definition: Verbose.hh:102