Chris@102: // (C) Copyright 2013,2015 Vicente J. Botet Escriba Chris@102: // Distributed under the Boost Software License, Version 1.0. (See Chris@102: // accompanying file LICENSE_1_0.txt or copy at Chris@102: // http://www.boost.org/LICENSE_1_0.txt) Chris@102: Chris@102: Chris@102: #ifndef BOOST_THREAD_CALL_CONTEXT_HPP Chris@102: #define BOOST_THREAD_CALL_CONTEXT_HPP Chris@102: Chris@102: #include Chris@102: #if defined BOOST_THREAD_USES_LOG_THREAD_ID Chris@102: #include Chris@102: #endif Chris@102: #include Chris@102: #include Chris@102: #include Chris@102: Chris@102: #include Chris@102: Chris@102: namespace boost Chris@102: { Chris@102: Chris@102: struct caller_context_t Chris@102: { Chris@102: const char * filename; Chris@102: unsigned lineno; Chris@102: const char * func; Chris@102: caller_context_t(const char * filename, unsigned lineno, const char * func) : Chris@102: filename(filename), lineno(lineno), func(func) Chris@102: { Chris@102: } Chris@102: }; Chris@102: Chris@102: #define BOOST_CONTEXTOF boost::caller_context_t(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION) Chris@102: Chris@102: template Chris@102: OStream& operator<<(OStream& os, caller_context_t const& ctx) Chris@102: { Chris@102: #if defined BOOST_THREAD_USES_LOG_THREAD_ID Chris@102: { Chris@102: io::ios_flags_saver ifs( os ); Chris@102: os << std::left << std::setw(14) << boost::this_thread::get_id() << " "; Chris@102: } Chris@102: #endif Chris@102: { Chris@102: io::ios_flags_saver ifs(os); Chris@102: os << std::setw(50) << ctx.filename << "[" Chris@102: << std::setw(4) << std::right << std::dec<< ctx.lineno << "] "; Chris@102: #if defined BOOST_THREAD_USES_LOG_CURRENT_FUNCTION Chris@102: os << ctx.func << " " ; Chris@102: #endif Chris@102: } Chris@102: return os; Chris@102: } Chris@102: } Chris@102: Chris@102: #include Chris@102: Chris@102: #endif // header