Chris@16
|
1 // Copyright (C) 2012 Vicente J. Botet Escriba
|
Chris@16
|
2 //
|
Chris@16
|
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5
|
Chris@16
|
6 #ifndef BOOST_THREAD_DETAIL_LOG_HPP
|
Chris@16
|
7 #define BOOST_THREAD_DETAIL_LOG_HPP
|
Chris@16
|
8
|
Chris@16
|
9 #include <boost/thread/detail/config.hpp>
|
Chris@16
|
10 #if defined BOOST_THREAD_USES_LOG
|
Chris@16
|
11 #include <boost/thread/recursive_mutex.hpp>
|
Chris@16
|
12 #include <boost/thread/lock_guard.hpp>
|
Chris@16
|
13 #if defined BOOST_THREAD_USES_LOG_THREAD_ID
|
Chris@16
|
14 #include <boost/thread/thread.hpp>
|
Chris@16
|
15 #endif
|
Chris@16
|
16 #include <iostream>
|
Chris@16
|
17
|
Chris@16
|
18 namespace boost
|
Chris@16
|
19 {
|
Chris@16
|
20 namespace thread_detail
|
Chris@16
|
21 {
|
Chris@16
|
22 inline boost::recursive_mutex& terminal_mutex()
|
Chris@16
|
23 {
|
Chris@16
|
24 static boost::recursive_mutex mtx;
|
Chris@16
|
25 return mtx;
|
Chris@16
|
26 }
|
Chris@16
|
27
|
Chris@16
|
28 }
|
Chris@16
|
29 }
|
Chris@16
|
30 #if defined BOOST_THREAD_USES_LOG_THREAD_ID
|
Chris@16
|
31
|
Chris@16
|
32 #define BOOST_THREAD_LOG \
|
Chris@16
|
33 { \
|
Chris@16
|
34 boost::lock_guard<boost::recursive_mutex> _lk_(boost::thread_detail::terminal_mutex()); \
|
Chris@16
|
35 std::cout << boost::this_thread::get_id() << " - "<<__FILE__<<"["<<__LINE__<<"] " <<std::dec
|
Chris@16
|
36 #else
|
Chris@16
|
37
|
Chris@16
|
38 #define BOOST_THREAD_LOG \
|
Chris@16
|
39 { \
|
Chris@16
|
40 boost::lock_guard<boost::recursive_mutex> _lk_(boost::thread_detail::terminal_mutex()); \
|
Chris@16
|
41 std::cout << __FILE__<<"["<<__LINE__<<"] " <<std::dec
|
Chris@16
|
42
|
Chris@16
|
43 #endif
|
Chris@16
|
44 #define BOOST_THREAD_END_LOG \
|
Chris@16
|
45 std::dec << std::endl; \
|
Chris@16
|
46 }
|
Chris@16
|
47
|
Chris@16
|
48 #else
|
Chris@16
|
49
|
Chris@16
|
50 namespace boost
|
Chris@16
|
51 {
|
Chris@16
|
52 namespace thread_detail
|
Chris@16
|
53 {
|
Chris@16
|
54 struct dummy_stream_t
|
Chris@16
|
55 {
|
Chris@16
|
56 };
|
Chris@16
|
57
|
Chris@16
|
58 template <typename T>
|
Chris@16
|
59 inline dummy_stream_t const& operator<<(dummy_stream_t const& os, T)
|
Chris@16
|
60 {
|
Chris@16
|
61 return os;
|
Chris@16
|
62 }
|
Chris@16
|
63
|
Chris@16
|
64 inline dummy_stream_t const& operator<<(dummy_stream_t const& os, dummy_stream_t const&)
|
Chris@16
|
65 {
|
Chris@16
|
66 return os;
|
Chris@16
|
67 }
|
Chris@16
|
68
|
Chris@16
|
69
|
Chris@16
|
70 BOOST_CONSTEXPR_OR_CONST dummy_stream_t dummy_stream = {};
|
Chris@16
|
71
|
Chris@16
|
72 }
|
Chris@16
|
73 }
|
Chris@16
|
74
|
Chris@16
|
75 #define BOOST_THREAD_LOG if (true) {} else boost::thread_detail::dummy_stream
|
Chris@16
|
76 #define BOOST_THREAD_END_LOG boost::thread_detail::dummy_stream
|
Chris@16
|
77
|
Chris@16
|
78 #endif
|
Chris@16
|
79
|
Chris@16
|
80 #define BOOST_THREAD_TRACE BOOST_THREAD_LOG << BOOST_THREAD_END_LOG
|
Chris@16
|
81
|
Chris@16
|
82
|
Chris@16
|
83 #endif // header
|