10 #ifndef INCLUDED_SAL_LOG_HXX
11 #define INCLUDED_SAL_LOG_HXX
30 enum sal_detail_LogLevel level,
char const * area,
char const * where,
31 char const * message);
33 namespace sal {
namespace detail {
35 inline void SAL_CALL log(
36 sal_detail_LogLevel level,
char const * area,
char const * where,
37 std::ostringstream
const & stream)
47 sal_detail_log(level, area, where, stream.str().c_str());
53 struct StreamStart {};
56 StreamString(
char const * s): string(s) {}
64 typedef struct {
char a[2]; } Result;
70 return StreamString(s);
73 template<
typename T >
inline StreamIgnore
operator <<(
77 #if defined _MSC_VER && _MSC_VER < 1700
78 return StreamIgnore();
82 template<
typename T >
inline StreamIgnore
operator <<(
86 #if defined _MSC_VER && _MSC_VER < 1700
87 return StreamIgnore();
91 template<
typename T >
inline StreamIgnore
operator <<(
95 #if defined _MSC_VER && _MSC_VER < 1700
96 return StreamIgnore();
100 template<
typename T >
typename T::Result getResult(T
const &);
102 inline char const * unwrapStream(StreamString
const & s) {
return s.string; }
106 #if defined _MSC_VER && _MSC_VER < 1700
113 #define SAL_DETAIL_LOG_STREAM(condition, level, area, where, stream) \
116 if (sizeof ::sal::detail::getResult( \
117 ::sal::detail::StreamStart() << stream) == 1) \
120 (level), (area), (where), \
121 ::sal::detail::unwrapStream( \
122 ::sal::detail::StreamStart() << stream)); \
124 ::std::ostringstream sal_detail_stream; \
125 sal_detail_stream << stream; \
126 ::sal::detail::log( \
127 (level), (area), (where), sal_detail_stream); \
144 #define SAL_WHERE SAL_DETAIL_WHERE
160 #ifdef _LIBCPP_VERSION
161 #define SAL_STREAM(stream) \
162 (::std::ostringstream() << stream).str()
164 #define SAL_STREAM(stream) \
165 (dynamic_cast< ::std::ostringstream & >(::std::ostringstream() << stream).str())
293 #define SAL_INFO(area, stream) \
294 SAL_DETAIL_LOG_STREAM( \
295 SAL_DETAIL_ENABLE_LOG_INFO, ::SAL_DETAIL_LOG_LEVEL_INFO, area, \
303 #define SAL_INFO_IF(condition, area, stream) \
304 SAL_DETAIL_LOG_STREAM( \
305 SAL_DETAIL_ENABLE_LOG_INFO && (condition), \
306 ::SAL_DETAIL_LOG_LEVEL_INFO, area, SAL_WHERE, stream)
313 #define SAL_WARN(area, stream) \
314 SAL_DETAIL_LOG_STREAM( \
315 SAL_DETAIL_ENABLE_LOG_WARN, ::SAL_DETAIL_LOG_LEVEL_WARN, area, \
323 #define SAL_WARN_IF(condition, area, stream) \
324 SAL_DETAIL_LOG_STREAM( \
325 SAL_DETAIL_ENABLE_LOG_WARN && (condition), \
326 ::SAL_DETAIL_LOG_LEVEL_WARN, area, SAL_WHERE, stream)
334 #define SAL_DEBUG(stream) \
335 SAL_DETAIL_LOG_STREAM( \
336 SAL_LOG_TRUE, ::SAL_DETAIL_LOG_LEVEL_DEBUG, NULL, NULL, stream)
346 #define SAL_DEBUG_TRACE(stream) \
347 SAL_DETAIL_LOG_STREAM( \
348 SAL_LOG_TRUE, ::SAL_DETAIL_LOG_LEVEL_DEBUG_TRACE, NULL, NULL, stream)
std::basic_ostream< charT, traits > & operator<<(std::basic_ostream< charT, traits > &stream, OString const &rString)
Support for rtl::OString in std::ostream (and thus in CPPUNIT_ASSERT or SAL_INFO macros, for example).
Definition: string.hxx:1894
#define SAL_DLLPUBLIC
Definition: saldllapi.h:30
#define SAL_UNUSED_PARAMETER
Annotate unused but required C++ function parameters.
Definition: types.h:603