X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/5a5c578e2e358a121cdb9234a6cb11c4ecfbf323..3abd3952c1f4441f0dd6eae9883b2d01ed9cd56b:/threaded_log.h diff --git a/threaded_log.h b/threaded_log.h index ebb2222..6630a86 100644 --- a/threaded_log.h +++ b/threaded_log.h @@ -11,8 +11,7 @@ extern int next_instance_num; extern char log_thread_prefix; namespace std { - // This... is an awful hack. But sticking this in std:: makes it possible for - // ostream_iterator to use it. + // Sticking this in std:: makes it possible for ostream_iterator to use it. template ostream & operator<<(ostream &o, const pair &d) { return o << "<" << d.first << "," << d.second << ">"; @@ -20,17 +19,13 @@ namespace std { } template -typename enable_if::value && !is_same::value, ostream>::type & +typename enable_if::value && !is_same::value, ostream>::type & operator<<(ostream &o, const A &a) { - o << "["; - auto oit = ostream_iterator(o, ", "); - copy(a.begin(), a.end(), oit); - o << "]"; - return o; + return o << "[" << implode(a, ", ") << "]"; } #define LOG_PREFIX { \ - auto _thread_ = std::this_thread::get_id(); \ + auto _thread_ = this_thread::get_id(); \ int _tid_ = thread_name_map[_thread_]; \ if (_tid_==0) \ _tid_ = thread_name_map[_thread_] = ++next_thread_num; \ @@ -43,7 +38,7 @@ operator<<(ostream &o, const A &a) { int _self_ = instance_name_map[this]; \ if (_self_==0) \ _self_ = instance_name_map[this] = ++next_instance_num; \ - cerr << "#" << setw(2) << _self_; \ + cerr << "#" << left << setw(2) << _self_ << " "; \ } #define LOG_NONMEMBER(_x_) { \ @@ -58,4 +53,8 @@ operator<<(ostream &o, const A &a) { cerr << _x_ << endl; \ } +extern int DEBUG_LEVEL; + +#define IF_LEVEL(level) if(DEBUG_LEVEL >= abs(level)) + #endif