All random numbers generated via one PRNG seeded in one place.
[invirt/third/libt4.git] / threaded_log.h
1 #ifndef threaded_log_h
2 #define threaded_log_h
3
4 #include <string>
5 #include <ostream>
6
7 struct locked_ostream {
8     std::ostream & s;
9     lock l;
10     locked_ostream(locked_ostream &&) = default;
11     ~locked_ostream() { s << std::endl; }
12     template <typename U>
13     locked_ostream & operator<<(U && u) { s << u; return *this; }
14 };
15
16 locked_ostream && _log_prefix(locked_ostream && f, const string & file, const string & func);
17 locked_ostream && _log_member(locked_ostream && f, const void *ptr);
18 int _log_debug_level();
19 lock _log_lock();
20
21 #define LOG_NONMEMBER _log_prefix(locked_ostream{std::cerr, _log_lock()}, __FILE__, __func__)
22 #define LOG           _log_member(LOG_NONMEMBER, (const void *)this)
23
24 #define IF_LEVEL(level) if(_log_debug_level() >= abs(level))
25
26 #endif