summaryrefslogtreecommitdiff
path: root/impl/Log.hpp
blob: 1e340c79e296abd2d22bb1fcbbe5477b18853733 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#ifndef LOG_HPP
#define LOG_HPP

#include <string>
#include <ostream>
#include <map>

namespace log {

  struct Logger {
    Logger(std::ostream& stream, const std::string& name)
      : _stream(stream),
        _name(name),
        _enabled(false) {}

    bool enabled() const {
      return _enabled;
    }

    bool enabled(bool v) {
      bool ret = _enabled;
      _enabled = v;
      return ret;
    }

    template<typename T>
    friend Logger& operator<<(Logger&, const T&);
    
    private:
    std::ostream& _stream;
    std::string _name;
    bool _enabled;
  };

  template<typename T>
  Logger& operator<<(Logger& logger, const T& obj) {
    if (logger._enabled) {
      logger._stream << logger._name << " :- " << obj << std::endl;
    }
    return logger;
  }

  Logger info(std::cout, "info");
  Logger trace(std::cerr, "trace");
  Logger strategy(std::cerr, "strategy");
  Logger fixpoint(std::cerr, "fixpoint");
  Logger debug(std::cerr, "debug");

}

#endif