Coverage Report

Created: 2026-09-28 10:59

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/include/sal/log.hxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 */
9
10
/*
11
 * This file is part of LibreOffice published API.
12
 */
13
14
#ifndef INCLUDED_SAL_LOG_HXX
15
#define INCLUDED_SAL_LOG_HXX
16
17
#include "sal/config.h"
18
19
#include <cstdlib>
20
#include <sstream>
21
#include <string>
22
23
#include "sal/detail/log.h"
24
#include "sal/saldllapi.h"
25
#include "sal/types.h"
26
27
// Avoid the use of other sal code in this header as much as possible, so that
28
// this code can be called from other sal code without causing endless
29
// recursion.
30
31
/// @cond INTERNAL
32
33
enum sal_detail_LogAction
34
{
35
    SAL_DETAIL_LOG_ACTION_IGNORE,
36
    SAL_DETAIL_LOG_ACTION_LOG,
37
    SAL_DETAIL_LOG_ACTION_FATAL
38
};
39
40
extern "C" SAL_DLLPUBLIC void SAL_CALL sal_detail_log(
41
    sal_detail_LogLevel level, char const * area, char const * where,
42
    char const * message, sal_uInt32 backtraceDepth);
43
44
extern "C" SAL_DLLPUBLIC void SAL_CALL sal_detail_set_log_selector(char const *logSelector);
45
46
// the return value is actually "enum sal_detail_LogAction", but due to ABI
47
// compatibility, it's left as the original "sal_Bool" / "unsigned char".
48
extern "C" SAL_DLLPUBLIC unsigned char SAL_CALL sal_detail_log_report(
49
    sal_detail_LogLevel level, char const * area);
50
51
namespace sal { namespace detail {
52
53
inline void log(
54
    sal_detail_LogLevel level, char const * area, char const * where,
55
    std::ostringstream const & stream, sal_uInt32 backtraceDepth)
56
0
{
57
    // An alternative would be to have sal_detail_log take a std::ostringstream
58
    // pointer (via a C void pointer); the advantage would be smaller client
59
    // code (the ".str().c_str()" part would move into the implementation of
60
    // sal_detail_log) and potential for proper support of embedded null
61
    // characters within the message, but the disadvantage would be dependence
62
    // on the C++ ABI; as a compromise, the ".str().c_str()" part has been moved
63
    // to this inline function so that it is potentially only emitted once per
64
    // dynamic library:
65
0
    sal_detail_log(level, area, where, stream.str().c_str(), backtraceDepth);
66
0
}
67
68
// Special handling of the common case where the message consists of just a
69
// string literal, to produce smaller call-site code:
70
71
struct StreamStart {};
72
73
struct StreamString {
74
0
    StreamString(char const * s): string(s) {}
75
76
    char const * string;
77
78
    typedef char Result;
79
};
80
81
struct StreamIgnore {
82
    typedef struct { char a[2]; } Result;
83
};
84
85
inline StreamString operator <<(
86
    SAL_UNUSED_PARAMETER StreamStart const &, char const * s)
87
0
{
88
0
    return StreamString(s);
89
0
}
90
91
template< typename T > inline StreamIgnore operator <<(
92
    SAL_UNUSED_PARAMETER StreamStart const &, SAL_UNUSED_PARAMETER T const &)
93
0
{
94
0
    std::abort();
95
0
#if defined _MSC_VER && _MSC_VER < 1700
96
0
    return StreamIgnore();
97
0
#endif
98
0
}
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned int>(sal::detail::StreamStart const&, unsigned int const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringNumber<char, 65ul> >(sal::detail::StreamStart const&, rtl::StringNumber<char, 65ul> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::OUString>(sal::detail::StreamStart const&, rtl::OUString const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned long>(sal::detail::StreamStart const&, unsigned long const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, char const [25], rtl::OUString, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, char const [25], rtl::OUString, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::uno::RuntimeException>(sal::detail::StreamStart const&, com::sun::star::uno::RuntimeException const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, char const [46], rtl::OUString, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, char const [46], rtl::OUString, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::uno::Exception>(sal::detail::StreamStart const&, com::sun::star::uno::Exception const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, char const [84], rtl::OUString, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, char const [84], rtl::OUString, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [55], rtl::OUString, 0>, char const [2], 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [55], rtl::OUString, 0>, char const [2], 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char, rtl::StringConcat<char, rtl::StringConcat<char, rtl::StringConcat<char, char const [79], rtl::OString, 0>, char const [41], 0>, rtl::StringNumber<char, 65ul>, 0>, char const [2], 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char, rtl::StringConcat<char, rtl::StringConcat<char, rtl::StringConcat<char, char const [79], rtl::OString, 0>, char const [41], 0>, rtl::StringNumber<char, 65ul>, 0>, char const [2], 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [17], rtl::StringNumber<char16_t, 33ul>, 0>, char const [16], 0>, rtl::StringNumber<char16_t, 33ul>, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [17], rtl::StringNumber<char16_t, 33ul>, 0>, char const [16], 0>, rtl::StringNumber<char16_t, 33ul>, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [37], rtl::OUString, 0>, char const [2], 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [37], rtl::OUString, 0>, char const [2], 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [36], rtl::OUString, 0>, char const [2], 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [36], rtl::OUString, 0>, char const [2], 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [35], rtl::OUString, 0>, char const [2], 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [35], rtl::OUString, 0>, char const [2], 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <std::__1::__iom_t6>(sal::detail::StreamStart const&, std::__1::__iom_t6 const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, char const [19], rtl::OUString, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, char const [19], rtl::OUString, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, char const [11], rtl::OUString, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, char const [11], rtl::OUString, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, char const [29], rtl::OUString, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, char const [29], rtl::OUString, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, char const [33], rtl::OUString, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, char const [33], rtl::OUString, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(sal::detail::StreamStart const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <long>(sal::detail::StreamStart const&, long const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <EnhancedCustomShape::ExpressionFunct>(sal::detail::StreamStart const&, EnhancedCustomShape::ExpressionFunct const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char, char const [67], rtl::StringNumber<char, 33ul>, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char, char const [67], rtl::StringNumber<char, 33ul>, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, char const [38], rtl::OUString, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, char const [38], rtl::OUString, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, char const [59], rtl::OUString, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, char const [59], rtl::OUString, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::OString>(sal::detail::StreamStart const&, rtl::OString const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned short>(sal::detail::StreamStart const&, unsigned short const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, char const [35], rtl::OUString, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, char const [35], rtl::OUString, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [36], rtl::OUString, 0>, char const [3], 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [36], rtl::OUString, 0>, char const [3], 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [49], rtl::OUString, 0>, char const [9], 0>, rtl::OUString, 0>, char const [11], 0>, rtl::OUString, 0>, char const [2], 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [49], rtl::OUString, 0>, char const [9], 0>, rtl::OUString, 0>, char const [11], 0>, rtl::OUString, 0>, char const [2], 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <int>(sal::detail::StreamStart const&, int const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [45], rtl::OUString, 0>, char const [9], 0>, rtl::OUString, 0>, char const [11], 0>, rtl::OUString, 0>, char const [2], 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [45], rtl::OUString, 0>, char const [9], 0>, rtl::OUString, 0>, char const [11], 0>, rtl::OUString, 0>, char const [2], 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, char const [27], rtl::OUString, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, char const [27], rtl::OUString, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <sd::SdGlobalResource*>(sal::detail::StreamStart const&, sd::SdGlobalResource* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, char const [28], rtl::OUString, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, char const [28], rtl::OUString, 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [26], rtl::OUString, 0>, char const [2], 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [26], rtl::OUString, 0>, char const [2], 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [10], rtl::OUString, 0>, char const [2], 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [10], rtl::OUString, 0>, char const [2], 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [42], rtl::OUString, 0>, char const [2], 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [42], rtl::OUString, 0>, char const [2], 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [51], rtl::OUString, 0>, char const [2], 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [51], rtl::OUString, 0>, char const [2], 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [49], rtl::OUString, 0>, char const [2], 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [49], rtl::OUString, 0>, char const [2], 0> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [22], rtl::OUString, 0>, char const [4], 0>, rtl::OUString, 0> >(sal::detail::StreamStart const&, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, rtl::StringConcat<char16_t, char const [22], rtl::OUString, 0>, char const [4], 0>, rtl::OUString, 0> const&)
99
100
template< typename T > inline StreamIgnore operator <<(
101
    SAL_UNUSED_PARAMETER StreamString const &, SAL_UNUSED_PARAMETER T const &)
102
0
{
103
0
    std::abort();
104
0
#if defined _MSC_VER && _MSC_VER < 1700
105
0
    return StreamIgnore();
106
0
#endif
107
0
}
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char const*>(sal::detail::StreamString const&, char const* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::OUString>(sal::detail::StreamString const&, rtl::OUString const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <long>(sal::detail::StreamString const&, long const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <vcl::Window*>(sal::detail::StreamString const&, vcl::Window* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned short>(sal::detail::StreamString const&, unsigned short const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <int>(sal::detail::StreamString const&, int const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::OString>(sal::detail::StreamString const&, rtl::OString const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <FontMetric>(sal::detail::StreamString const&, FontMetric const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <basegfx::B2DRange>(sal::detail::StreamString const&, basegfx::B2DRange const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <double>(sal::detail::StreamString const&, double const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned int>(sal::detail::StreamString const&, unsigned int const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <bool>(sal::detail::StreamString const&, bool const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <std::__1::ios_base& (std::__1::ios_base&)>(sal::detail::StreamString const&, std::__1::ios_base& ( const&)(std::__1::ios_base&))
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <Size>(sal::detail::StreamString const&, Size const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned long>(sal::detail::StreamString const&, unsigned long const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <Point>(sal::detail::StreamString const&, Point const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <tools::Rectangle>(sal::detail::StreamString const&, tools::Rectangle const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <ErrCode>(sal::detail::StreamString const&, ErrCode const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <vcl::pdf::PDFWriter::StructAttribute>(sal::detail::StreamString const&, vcl::pdf::PDFWriter::StructAttribute const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <vcl::pdf::PDFWriter::StructAttributeValue>(sal::detail::StreamString const&, vcl::pdf::PDFWriter::StructAttributeValue const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <VclBuilder*>(sal::detail::StreamString const&, VclBuilder* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <void const*>(sal::detail::StreamString const&, void const* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char>(sal::detail::StreamString const&, char const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [200]>(sal::detail::StreamString const&, char const (&) [200])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned char*>(sal::detail::StreamString const&, unsigned char* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <_rtl_uString*>(sal::detail::StreamString const&, _rtl_uString* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::uno::RuntimeException>(sal::detail::StreamString const&, com::sun::star::uno::RuntimeException const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::container::NoSuchElementException>(sal::detail::StreamString const&, com::sun::star::container::NoSuchElementException const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(sal::detail::StreamString const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::uno::Exception>(sal::detail::StreamString const&, com::sun::star::uno::Exception const&)
Unexecuted instantiation: conditn.cxx:sal::detail::StreamIgnore sal::detail::operator<< <(anonymous namespace)::oslConditionImpl*>(sal::detail::StreamString const&, (anonymous namespace)::oslConditionImpl* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [2]>(sal::detail::StreamString const&, char const (&) [2])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <__dirstream*>(sal::detail::StreamString const&, __dirstream* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [4096]>(sal::detail::StreamString const&, char const (&) [4096])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <void*>(sal::detail::StreamString const&, void* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <short>(sal::detail::StreamString const&, short const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <UErrorCode>(sal::detail::StreamString const&, UErrorCode const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::ucb::IllegalIdentifierException>(sal::detail::StreamString const&, com::sun::star::ucb::IllegalIdentifierException const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringNumber<char, 33ul> >(sal::detail::StreamString const&, rtl::StringNumber<char, 33ul> const&)
Unexecuted instantiation: lbenv.cxx:sal::detail::StreamIgnore sal::detail::operator<< <(anonymous namespace)::ObjectEntry*>(sal::detail::StreamString const&, (anonymous namespace)::ObjectEntry* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned char>(sal::detail::StreamString const&, unsigned char const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <XclSupbookType>(sal::detail::StreamString const&, XclSupbookType const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <oox::xls::ExternalLinkType>(sal::detail::StreamString const&, oox::xls::ExternalLinkType const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <WKTYP>(sal::detail::StreamString const&, WKTYP const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <ScAddress>(sal::detail::StreamString const&, ScAddress const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <ScQueryOp>(sal::detail::StreamString const&, ScQueryOp const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <sc::FormulaGroupAreaListener*>(sal::detail::StreamString const&, sc::FormulaGroupAreaListener* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <sc::FormulaGroupAreaListener const*>(sal::detail::StreamString const&, sc::FormulaGroupAreaListener const* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <long long>(sal::detail::StreamString const&, long long const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <std::__1::basic_string_view<char, std::__1::char_traits<char> > >(sal::detail::StreamString const&, std::__1::basic_string_view<char, std::__1::char_traits<char> > const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <ScSplitPos>(sal::detail::StreamString const&, ScSplitPos const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <formula::StackVar>(sal::detail::StreamString const&, formula::StackVar const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <drawinglayer::primitive2d::TextEmphasisMark>(sal::detail::StreamString const&, drawinglayer::primitive2d::TextEmphasisMark const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <drawinglayer::primitive2d::TextRelief>(sal::detail::StreamString const&, drawinglayer::primitive2d::TextRelief const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <basegfx::B2DHomMatrix>(sal::detail::StreamString const&, basegfx::B2DHomMatrix const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <float>(sal::detail::StreamString const&, float const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [5]>(sal::detail::StreamString const&, char const (&) [5])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringNumber<char16_t, 33ul> >(sal::detail::StreamString const&, rtl::StringNumber<char16_t, 33ul> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <basegfx::B2DPolyPolygon>(sal::detail::StreamString const&, basegfx::B2DPolyPolygon const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <osl::FileBase::RC>(sal::detail::StreamString const&, osl::FileBase::RC const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SfxDispatcher*>(sal::detail::StreamString const&, SfxDispatcher* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SfxShell*>(sal::detail::StreamString const&, SfxShell* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <ErrCodeMsg>(sal::detail::StreamString const&, ErrCodeMsg const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::uno::Sequence<rtl::OUString> >(sal::detail::StreamString const&, com::sun::star::uno::Sequence<rtl::OUString> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <LOKDocumentFocusListener*>(sal::detail::StreamString const&, LOKDocumentFocusListener* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char*>(sal::detail::StreamString const&, char* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <accessibility::AccessibleTextHelper_Impl*>(sal::detail::StreamString const&, accessibility::AccessibleTextHelper_Impl* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringNumber<char16_t, 65ul> >(sal::detail::StreamString const&, rtl::StringNumber<char16_t, 65ul> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <std::__1::unique_ptr<vcl::pdf::PDFiumFont, std::__1::default_delete<vcl::pdf::PDFiumFont> > >(sal::detail::StreamString const&, std::__1::unique_ptr<vcl::pdf::PDFiumFont, std::__1::default_delete<vcl::pdf::PDFiumFont> > const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SdrView*>(sal::detail::StreamString const&, SdrView* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::uno::Any>(sal::detail::StreamString const&, com::sun::star::uno::Any const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <oox::ole::ApiControlType>(sal::detail::StreamString const&, oox::ole::ApiControlType const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <Color>(sal::detail::StreamString const&, Color const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [33]>(sal::detail::StreamString const&, char const (&) [33])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <LOKClipboard*>(sal::detail::StreamString const&, LOKClipboard* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <BrowseBox*>(sal::detail::StreamString const&, BrowseBox* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [1000]>(sal::detail::StreamString const&, char const (&) [1000])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <basegfx::B2IVector>(sal::detail::StreamString const&, basegfx::B2IVector const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <basegfx::B2DVector>(sal::detail::StreamString const&, basegfx::B2DVector const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [15]>(sal::detail::StreamString const&, char const (&) [15])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [27]>(sal::detail::StreamString const&, char const (&) [27])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [20]>(sal::detail::StreamString const&, char const (&) [20])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::lang::DisposedException>(sal::detail::StreamString const&, com::sun::star::lang::DisposedException const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <vclcanvas::SpriteHelper const*>(sal::detail::StreamString const&, vclcanvas::SpriteHelper const* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [108]>(sal::detail::StreamString const&, char const (&) [108])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SwPageFrame*>(sal::detail::StreamString const&, SwPageFrame* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SwPageDesc*>(sal::detail::StreamString const&, SwPageDesc* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <o3tl::strong_int<int, Tag_SwNodeOffset> >(sal::detail::StreamString const&, o3tl::strong_int<int, Tag_SwNodeOffset> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SwAnchoredObject*>(sal::detail::StreamString const&, SwAnchoredObject* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::uno::XWeak*>(sal::detail::StreamString const&, com::sun::star::uno::XWeak* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [10]>(sal::detail::StreamString const&, char const (&) [10])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [23]>(sal::detail::StreamString const&, char const (&) [23])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [21]>(sal::detail::StreamString const&, char const (&) [21])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [13]>(sal::detail::StreamString const&, char const (&) [13])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <sfx2::Metadatable*>(sal::detail::StreamString const&, sfx2::Metadatable* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <sfx2::Metadatable const*>(sal::detail::StreamString const&, sfx2::Metadatable const* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [7]>(sal::detail::StreamString const&, char const (&) [7])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [19]>(sal::detail::StreamString const&, char const (&) [19])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [12]>(sal::detail::StreamString const&, char const (&) [12])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [65]>(sal::detail::StreamString const&, char const (&) [65])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [11]>(sal::detail::StreamString const&, char const (&) [11])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [16]>(sal::detail::StreamString const&, char const (&) [16])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [17]>(sal::detail::StreamString const&, char const (&) [17])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [9]>(sal::detail::StreamString const&, char const (&) [9])
Unexecuted instantiation: ViewShellBase.cxx:sal::detail::StreamIgnore sal::detail::operator<< <sd::(anonymous namespace)::FocusForwardingWindow*>(sal::detail::StreamString const&, sd::(anonymous namespace)::FocusForwardingWindow* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [18]>(sal::detail::StreamString const&, char const (&) [18])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <sd::Window*>(sal::detail::StreamString const&, sd::Window* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::uno::Type>(sal::detail::StreamString const&, com::sun::star::uno::Type const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [32]>(sal::detail::StreamString const&, char const (&) [32])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [35]>(sal::detail::StreamString const&, char const (&) [35])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [37]>(sal::detail::StreamString const&, char const (&) [37])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [29]>(sal::detail::StreamString const&, char const (&) [29])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [66]>(sal::detail::StreamString const&, char const (&) [66])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [56]>(sal::detail::StreamString const&, char const (&) [56])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [58]>(sal::detail::StreamString const&, char const (&) [58])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [26]>(sal::detail::StreamString const&, char const (&) [26])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [30]>(sal::detail::StreamString const&, char const (&) [30])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [28]>(sal::detail::StreamString const&, char const (&) [28])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [45]>(sal::detail::StreamString const&, char const (&) [45])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <sd::framework::ViewShellWrapper*>(sal::detail::StreamString const&, sd::framework::ViewShellWrapper* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [36]>(sal::detail::StreamString const&, char const (&) [36])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [6]>(sal::detail::StreamString const&, char const (&) [6])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [31]>(sal::detail::StreamString const&, char const (&) [31])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [14]>(sal::detail::StreamString const&, char const (&) [14])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [52]>(sal::detail::StreamString const&, char const (&) [52])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <oox::core::PlaceholderType>(sal::detail::StreamString const&, oox::core::PlaceholderType const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [39]>(sal::detail::StreamString const&, char const (&) [39])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <std::__1::unique_ptr<vcl::pdf::PDFiumDocument, std::__1::default_delete<vcl::pdf::PDFiumDocument> > >(sal::detail::StreamString const&, std::__1::unique_ptr<vcl::pdf::PDFiumDocument, std::__1::default_delete<vcl::pdf::PDFiumDocument> > const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::document::XFilter*>(sal::detail::StreamString const&, com::sun::star::document::XFilter* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <oslFileError>(sal::detail::StreamString const&, oslFileError const&)
108
109
template< typename T > inline StreamIgnore operator <<(
110
    SAL_UNUSED_PARAMETER StreamIgnore const &, SAL_UNUSED_PARAMETER T const &)
111
0
{
112
0
    std::abort();
113
0
#if defined _MSC_VER && _MSC_VER < 1700
114
0
    return StreamIgnore();
115
0
#endif
116
0
}
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [22]>(sal::detail::StreamIgnore const&, char const (&) [22])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <int>(sal::detail::StreamIgnore const&, int const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [9]>(sal::detail::StreamIgnore const&, char const (&) [9])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [13]>(sal::detail::StreamIgnore const&, char const (&) [13])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::OUString>(sal::detail::StreamIgnore const&, rtl::OUString const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [11]>(sal::detail::StreamIgnore const&, char const (&) [11])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [7]>(sal::detail::StreamIgnore const&, char const (&) [7])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [3]>(sal::detail::StreamIgnore const&, char const (&) [3])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [26]>(sal::detail::StreamIgnore const&, char const (&) [26])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <long>(sal::detail::StreamIgnore const&, long const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [29]>(sal::detail::StreamIgnore const&, char const (&) [29])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [50]>(sal::detail::StreamIgnore const&, char const (&) [50])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [8]>(sal::detail::StreamIgnore const&, char const (&) [8])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [15]>(sal::detail::StreamIgnore const&, char const (&) [15])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <bool>(sal::detail::StreamIgnore const&, bool const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned short>(sal::detail::StreamIgnore const&, unsigned short const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [14]>(sal::detail::StreamIgnore const&, char const (&) [14])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [2]>(sal::detail::StreamIgnore const&, char const (&) [2])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [35]>(sal::detail::StreamIgnore const&, char const (&) [35])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char const*>(sal::detail::StreamIgnore const&, char const* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [12]>(sal::detail::StreamIgnore const&, char const (&) [12])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [10]>(sal::detail::StreamIgnore const&, char const (&) [10])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [4]>(sal::detail::StreamIgnore const&, char const (&) [4])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [25]>(sal::detail::StreamIgnore const&, char const (&) [25])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [5]>(sal::detail::StreamIgnore const&, char const (&) [5])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [17]>(sal::detail::StreamIgnore const&, char const (&) [17])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [16]>(sal::detail::StreamIgnore const&, char const (&) [16])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [37]>(sal::detail::StreamIgnore const&, char const (&) [37])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [19]>(sal::detail::StreamIgnore const&, char const (&) [19])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned long>(sal::detail::StreamIgnore const&, unsigned long const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [6]>(sal::detail::StreamIgnore const&, char const (&) [6])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <double>(sal::detail::StreamIgnore const&, double const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [40]>(sal::detail::StreamIgnore const&, char const (&) [40])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <ImplSchedulerData*>(sal::detail::StreamIgnore const&, ImplSchedulerData* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <ImplSchedulerData>(sal::detail::StreamIgnore const&, ImplSchedulerData const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <Timer>(sal::detail::StreamIgnore const&, Timer const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <Task>(sal::detail::StreamIgnore const&, Task const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned int>(sal::detail::StreamIgnore const&, unsigned int const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [21]>(sal::detail::StreamIgnore const&, char const (&) [21])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [32]>(sal::detail::StreamIgnore const&, char const (&) [32])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <short>(sal::detail::StreamIgnore const&, short const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <std::__1::ios_base& (std::__1::ios_base&)>(sal::detail::StreamIgnore const&, std::__1::ios_base& ( const&)(std::__1::ios_base&))
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [24]>(sal::detail::StreamIgnore const&, char const (&) [24])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [20]>(sal::detail::StreamIgnore const&, char const (&) [20])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <osl::FileBase::RC>(sal::detail::StreamIgnore const&, osl::FileBase::RC const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [31]>(sal::detail::StreamIgnore const&, char const (&) [31])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [18]>(sal::detail::StreamIgnore const&, char const (&) [18])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [57]>(sal::detail::StreamIgnore const&, char const (&) [57])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [23]>(sal::detail::StreamIgnore const&, char const (&) [23])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [28]>(sal::detail::StreamIgnore const&, char const (&) [28])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::OString>(sal::detail::StreamIgnore const&, rtl::OString const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [55]>(sal::detail::StreamIgnore const&, char const (&) [55])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <vcl::Window*>(sal::detail::StreamIgnore const&, vcl::Window* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [83]>(sal::detail::StreamIgnore const&, char const (&) [83])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [27]>(sal::detail::StreamIgnore const&, char const (&) [27])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [30]>(sal::detail::StreamIgnore const&, char const (&) [30])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [63]>(sal::detail::StreamIgnore const&, char const (&) [63])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [33]>(sal::detail::StreamIgnore const&, char const (&) [33])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [34]>(sal::detail::StreamIgnore const&, char const (&) [34])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned char*>(sal::detail::StreamIgnore const&, unsigned char* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringNumber<char16_t, 65ul> >(sal::detail::StreamIgnore const&, rtl::StringNumber<char16_t, 65ul> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [62]>(sal::detail::StreamIgnore const&, char const (&) [62])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char>(sal::detail::StreamIgnore const&, char const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [47]>(sal::detail::StreamIgnore const&, char const (&) [47])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::uno::Exception>(sal::detail::StreamIgnore const&, com::sun::star::uno::Exception const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <o3tl::strong_int<unsigned short, LanguageTypeTag> >(sal::detail::StreamIgnore const&, o3tl::strong_int<unsigned short, LanguageTypeTag> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(sal::detail::StreamIgnore const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [4096]>(sal::detail::StreamIgnore const&, char const (&) [4096])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <__dirstream*>(sal::detail::StreamIgnore const&, __dirstream* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char*>(sal::detail::StreamIgnore const&, char* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <oslFileError>(sal::detail::StreamIgnore const&, oslFileError const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [132]>(sal::detail::StreamIgnore const&, char const (&) [132])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <NfIndexTableOffset>(sal::detail::StreamIgnore const&, NfIndexTableOffset const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [87]>(sal::detail::StreamIgnore const&, char const (&) [87])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <rtl::StringNumber<char, 33ul> >(sal::detail::StreamIgnore const&, rtl::StringNumber<char, 33ul> const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <ErrCode>(sal::detail::StreamIgnore const&, ErrCode const&)
Unexecuted instantiation: lbenv.cxx:sal::detail::StreamIgnore sal::detail::operator<< <(anonymous namespace)::ObjectEntry*>(sal::detail::StreamIgnore const&, (anonymous namespace)::ObjectEntry* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <void*>(sal::detail::StreamIgnore const&, void* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [46]>(sal::detail::StreamIgnore const&, char const (&) [46])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [52]>(sal::detail::StreamIgnore const&, char const (&) [52])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [60]>(sal::detail::StreamIgnore const&, char const (&) [60])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <ScDPResultMemberSlim*>(sal::detail::StreamIgnore const&, ScDPResultMemberSlim* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [49]>(sal::detail::StreamIgnore const&, char const (&) [49])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [69]>(sal::detail::StreamIgnore const&, char const (&) [69])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [72]>(sal::detail::StreamIgnore const&, char const (&) [72])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [48]>(sal::detail::StreamIgnore const&, char const (&) [48])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [43]>(sal::detail::StreamIgnore const&, char const (&) [43])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [42]>(sal::detail::StreamIgnore const&, char const (&) [42])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <formula::FormulaGrammar::Grammar>(sal::detail::StreamIgnore const&, formula::FormulaGrammar::Grammar const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [39]>(sal::detail::StreamIgnore const&, char const (&) [39])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <basegfx::B2DHomMatrix>(sal::detail::StreamIgnore const&, basegfx::B2DHomMatrix const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <float>(sal::detail::StreamIgnore const&, float const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [45]>(sal::detail::StreamIgnore const&, char const (&) [45])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <Color>(sal::detail::StreamIgnore const&, Color const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SfxBindings*>(sal::detail::StreamIgnore const&, SfxBindings* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <ErrCodeMsg>(sal::detail::StreamIgnore const&, ErrCodeMsg const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [36]>(sal::detail::StreamIgnore const&, char const (&) [36])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <void const*>(sal::detail::StreamIgnore const&, void const* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::accessibility::XAccessible*>(sal::detail::StreamIgnore const&, com::sun::star::accessibility::XAccessible* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SdrDragMethod*>(sal::detail::StreamIgnore const&, SdrDragMethod* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::uno::Type>(sal::detail::StreamIgnore const&, com::sun::star::uno::Type const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <std::__1::basic_string_view<char, std::__1::char_traits<char> > >(sal::detail::StreamIgnore const&, std::__1::basic_string_view<char, std::__1::char_traits<char> > const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [41]>(sal::detail::StreamIgnore const&, char const (&) [41])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <oox::ppt::SlidePersist*>(sal::detail::StreamIgnore const&, oox::ppt::SlidePersist* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <dbaccess::ODatabaseSource*>(sal::detail::StreamIgnore const&, dbaccess::ODatabaseSource* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <dbaccess::ODatabaseModelImpl*>(sal::detail::StreamIgnore const&, dbaccess::ODatabaseModelImpl* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [77]>(sal::detail::StreamIgnore const&, char const (&) [77])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <std::__1::__iom_t6>(sal::detail::StreamIgnore const&, std::__1::__iom_t6 const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <Size>(sal::detail::StreamIgnore const&, Size const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [61]>(sal::detail::StreamIgnore const&, char const (&) [61])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned char const*>(sal::detail::StreamIgnore const&, unsigned char const* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::uno::Reference<com::sun::star::datatransfer::XTransferable> >(sal::detail::StreamIgnore const&, com::sun::star::uno::Reference<com::sun::star::datatransfer::XTransferable> const&)
Unexecuted instantiation: iafactory.cxx:sal::detail::StreamIgnore sal::detail::operator<< <stoc_invadp::(anonymous namespace)::AdapterImpl*>(sal::detail::StreamIgnore const&, stoc_invadp::(anonymous namespace)::AdapterImpl* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [38]>(sal::detail::StreamIgnore const&, char const (&) [38])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <Bitmap const*>(sal::detail::StreamIgnore const&, Bitmap const* const&)
Unexecuted instantiation: lineaction.cxx:sal::detail::StreamIgnore sal::detail::operator<< <cppcanvas::internal::(anonymous namespace)::LineAction const*>(sal::detail::StreamIgnore const&, cppcanvas::internal::(anonymous namespace)::LineAction const* const&)
Unexecuted instantiation: pointaction.cxx:sal::detail::StreamIgnore sal::detail::operator<< <cppcanvas::internal::(anonymous namespace)::PointAction const*>(sal::detail::StreamIgnore const&, cppcanvas::internal::(anonymous namespace)::PointAction const* const&)
Unexecuted instantiation: polypolyaction.cxx:sal::detail::StreamIgnore sal::detail::operator<< <cppcanvas::internal::(anonymous namespace)::PolyPolyAction const*>(sal::detail::StreamIgnore const&, cppcanvas::internal::(anonymous namespace)::PolyPolyAction const* const&)
Unexecuted instantiation: polypolyaction.cxx:sal::detail::StreamIgnore sal::detail::operator<< <cppcanvas::internal::(anonymous namespace)::TexturedPolyPolyAction const*>(sal::detail::StreamIgnore const&, cppcanvas::internal::(anonymous namespace)::TexturedPolyPolyAction const* const&)
Unexecuted instantiation: polypolyaction.cxx:sal::detail::StreamIgnore sal::detail::operator<< <cppcanvas::internal::(anonymous namespace)::StrokedPolyPolyAction const*>(sal::detail::StreamIgnore const&, cppcanvas::internal::(anonymous namespace)::StrokedPolyPolyAction const* const&)
Unexecuted instantiation: textaction.cxx:sal::detail::StreamIgnore sal::detail::operator<< <cppcanvas::internal::(anonymous namespace)::TextAction const*>(sal::detail::StreamIgnore const&, cppcanvas::internal::(anonymous namespace)::TextAction const* const&)
Unexecuted instantiation: textaction.cxx:sal::detail::StreamIgnore sal::detail::operator<< <cppcanvas::internal::(anonymous namespace)::EffectTextAction const*>(sal::detail::StreamIgnore const&, cppcanvas::internal::(anonymous namespace)::EffectTextAction const* const&)
Unexecuted instantiation: textaction.cxx:sal::detail::StreamIgnore sal::detail::operator<< <cppcanvas::internal::(anonymous namespace)::TextArrayAction const*>(sal::detail::StreamIgnore const&, cppcanvas::internal::(anonymous namespace)::TextArrayAction const* const&)
Unexecuted instantiation: textaction.cxx:sal::detail::StreamIgnore sal::detail::operator<< <cppcanvas::internal::(anonymous namespace)::EffectTextArrayAction const*>(sal::detail::StreamIgnore const&, cppcanvas::internal::(anonymous namespace)::EffectTextArrayAction const* const&)
Unexecuted instantiation: textaction.cxx:sal::detail::StreamIgnore sal::detail::operator<< <cppcanvas::internal::(anonymous namespace)::OutlineAction const*>(sal::detail::StreamIgnore const&, cppcanvas::internal::(anonymous namespace)::OutlineAction const* const&)
Unexecuted instantiation: transparencygroupaction.cxx:sal::detail::StreamIgnore sal::detail::operator<< <cppcanvas::internal::(anonymous namespace)::TransparencyGroupAction const*>(sal::detail::StreamIgnore const&, cppcanvas::internal::(anonymous namespace)::TransparencyGroupAction const* const&)
Unexecuted instantiation: bitmapaction.cxx:sal::detail::StreamIgnore sal::detail::operator<< <cppcanvas::internal::(anonymous namespace)::BitmapAction const*>(sal::detail::StreamIgnore const&, cppcanvas::internal::(anonymous namespace)::BitmapAction const* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <cppcanvas::internal::CachedPrimitiveBase const*>(sal::detail::StreamIgnore const&, cppcanvas::internal::CachedPrimitiveBase const* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <char [44]>(sal::detail::StreamIgnore const&, char const (&) [44])
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SwPageDesc const*>(sal::detail::StreamIgnore const&, SwPageDesc const* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SwFrameFormat*>(sal::detail::StreamIgnore const&, SwFrameFormat* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SwFrameFormat const*>(sal::detail::StreamIgnore const&, SwFrameFormat const* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SwPageDesc*>(sal::detail::StreamIgnore const&, SwPageDesc* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SwPageFrame*>(sal::detail::StreamIgnore const&, SwPageFrame* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <sw::WriterListener*>(sal::detail::StreamIgnore const&, sw::WriterListener* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SwModify*>(sal::detail::StreamIgnore const&, SwModify* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SwFormat*>(sal::detail::StreamIgnore const&, SwFormat* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <sfx2::Metadatable*>(sal::detail::StreamIgnore const&, sfx2::Metadatable* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <sfx2::Metadatable const*>(sal::detail::StreamIgnore const&, sfx2::Metadatable const* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <unsigned char>(sal::detail::StreamIgnore const&, unsigned char const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SfxShell*>(sal::detail::StreamIgnore const&, SfxShell* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <com::sun::star::awt::XWindow*>(sal::detail::StreamIgnore const&, com::sun::star::awt::XWindow* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <SdPage*>(sal::detail::StreamIgnore const&, SdPage* const&)
Unexecuted instantiation: sal::detail::StreamIgnore sal::detail::operator<< <CharacterCodingA>(sal::detail::StreamIgnore const&, CharacterCodingA const&)
117
118
template< typename T > typename T::Result getResult(T const &);
119
120
0
inline char const * unwrapStream(StreamString const & s) { return s.string; }
121
122
0
inline char const * unwrapStream(SAL_UNUSED_PARAMETER StreamIgnore const &) {
123
0
    std::abort();
124
0
#if defined _MSC_VER && _MSC_VER < 1700
125
0
    return 0;
126
0
#endif
127
0
}
128
129
} }
130
131
// to prevent using a local variable, which can eventually shadow,
132
// resulting in compiler warnings (or even errors with -Werror)
133
#define SAL_DETAIL_LOG_STREAM_PRIVATE_(level, area, where, stream) \
134
0
    if (sizeof ::sal::detail::getResult( \
135
0
            ::sal::detail::StreamStart() << stream) == 1) \
136
0
    { \
137
0
        ::sal_detail_log( \
138
0
            (level), (area), (where), \
139
0
            ::sal::detail::unwrapStream( \
140
0
                ::sal::detail::StreamStart() << stream), \
141
0
            0); \
142
0
    } else { \
143
0
        ::std::ostringstream sal_detail_stream; \
144
0
        sal_detail_stream << stream; \
145
0
        ::sal::detail::log( \
146
0
            (level), (area), (where), sal_detail_stream, 0); \
147
0
    }
148
149
#if defined LIBO_INTERNAL_ONLY && defined __GNUC__ && !defined __clang__
150
// move cold/seldom-used code out of line, and into a separate linker section
151
#define SAL_DETAIL_LOG_STREAM(condition, level, area, where, stream) \
152
    do { \
153
        if (SAL_UNLIKELY(condition)) \
154
        { \
155
            [&]() __attribute__((noinline,cold)) \
156
            { \
157
                switch (sal_detail_log_report(level, area)) \
158
                { \
159
                case SAL_DETAIL_LOG_ACTION_IGNORE: break; \
160
                case SAL_DETAIL_LOG_ACTION_LOG: \
161
                    SAL_DETAIL_LOG_STREAM_PRIVATE_(level, area, where, stream); \
162
                    break; \
163
                case SAL_DETAIL_LOG_ACTION_FATAL: \
164
                    SAL_DETAIL_LOG_STREAM_PRIVATE_(level, area, where, stream); \
165
                    std::abort(); \
166
                    break; \
167
                } \
168
            }(); \
169
        } \
170
    } while (false)
171
#else
172
#define SAL_DETAIL_LOG_STREAM(condition, level, area, where, stream) \
173
13.5G
    do { \
174
13.5G
        if (SAL_UNLIKELY(condition)) \
175
13.5G
        { \
176
0
            switch (sal_detail_log_report(level, area)) \
177
0
            { \
178
0
            case SAL_DETAIL_LOG_ACTION_IGNORE: break; \
179
0
            case SAL_DETAIL_LOG_ACTION_LOG: \
180
0
                SAL_DETAIL_LOG_STREAM_PRIVATE_(level, area, where, stream); \
181
0
                break; \
182
0
            case SAL_DETAIL_LOG_ACTION_FATAL: \
183
0
                SAL_DETAIL_LOG_STREAM_PRIVATE_(level, area, where, stream); \
184
0
                std::abort(); \
185
0
                break; \
186
0
            } \
187
0
        } \
188
13.5G
    } while (false)
189
#endif
190
191
/// @endcond
192
193
/** A simple macro to create a "file and line number" string.
194
195
    Potentially not only useful within the log framework (where it is used
196
    automatically), but also when creating exception messages.
197
198
    @attention For now, this functionality should only be used internally within
199
    LibreOffice. It may change again in a future version.
200
201
    @since LibreOffice 3.5
202
*/
203
0
#define SAL_WHERE SAL_DETAIL_WHERE
204
205
/** A facility for generating temporary string messages by piping items into a
206
    C++ std::ostringstream.
207
208
    This can be useful for example in a call to SAL_INFO when depending on some
209
    boolean condition data of incompatible types shall be streamed into the
210
    message, as in:
211
212
      SAL_INFO("foo", "object: " << (hasName ? obj->name : SAL_STREAM(obj)));
213
214
    @attention For now, this functionality should only be used internally within
215
    LibreOffice. It may change again in a future version.
216
217
    @since LibreOffice 3.5
218
*/
219
#if defined _LIBCPP_VERSION \
220
    || (defined _GLIBCXX_RELEASE \
221
        && (_GLIBCXX_RELEASE >= 12 || (_GLIBCXX_RELEASE == 11 && __GLIBCXX__ > 20210428))) \
222
    || (defined _MSC_VER)
223
#define SAL_STREAM(stream) \
224
    (::std::ostringstream() << stream).str()
225
#else
226
#define SAL_STREAM(stream) \
227
    (dynamic_cast< ::std::ostringstream & >(::std::ostringstream() << stream).str())
228
#endif
229
230
/**
231
    @page sal_log Basic logging functionality.
232
233
    @short Macros for logging.
234
235
    SAL_INFO(char const * area, expr),
236
    SAL_INFO_IF(bool condition, char const * area, expr),
237
    SAL_WARN(char const * area, expr),
238
    SAL_WARN_IF(bool condition, char const * area, expr), and SAL_DEBUG(expr)
239
    produce an info, warning, or debug log entry with a message produced by
240
    piping items into a C++ std::ostringstream.  The given expr must be so that
241
    the full expression "stream << expr" is valid, where stream is a variable of
242
    type std::ostringstream.
243
244
      SAL_INFO("foo", "string " << s << " of length " << n)
245
246
    would be an example of such a call.
247
248
    The composed message should be in UTF-8 and it should contain no vertical
249
    formatting characters and no null characters
250
251
    For the _IF variants, log output is only generated if the given condition is
252
    true (in addition to the other conditions that have to be met).
253
254
    The SAL_DEBUG macro is for temporary debug statements that are used while
255
    working on code.  It is never meant to remain in the code.  It will always
256
    simply output the given expression in debug builds.
257
258
    For all the other macros, the given area argument must be non-null and must
259
    match the regular expression
260
261
    @verbatim
262
      <area> ::= <segment>("."<segment>)*
263
    @endverbatim
264
265
    with
266
267
    @verbatim
268
      <segment> ::= [0-9a-z]+
269
    @endverbatim
270
271
    For a list of areas used see @ref sal_log_areas "SAL debug areas". Whenever
272
    you use a new log area, add it to the file include/sal/log-areas.dox .
273
274
    Whether these macros generate any log output is controlled in a two-stage
275
    process.
276
277
    First, at compile time the macros SAL_LOG_INFO and SAL_LOG_WARN,
278
    respectively, control whether the INFO and WARN macros, respectively,
279
    expand to actual code (in case the macro is defined, to any value) or to
280
    no-ops (in case the macro is not defined).
281
282
    Second, at runtime the environment variable SAL_LOG further limits which
283
    macro calls actually generate log output.  The environment variable SAL_LOG
284
    must either be unset or must match the regular expression
285
286
    @verbatim
287
      <env> ::= <switch>*
288
    @endverbatim
289
290
    with
291
292
    @verbatim
293
      <switch> ::= <sense><item>
294
      <sense> ::= "+"|"-"
295
      <item> ::= <flag>|<level>("."<area>)?
296
      <flag> ::= "TIMESTAMP"|"RELATIVETIMER"|"FATAL"
297
      <level> ::= "INFO"|"WARN"
298
    @endverbatim
299
300
    If the environment variable is unset, the setting "+WARN" is
301
    assumed instead (which results in all warnings being output but no
302
    infos).  If the given value does not match the regular expression,
303
    "+INFO+WARN" is used instead (which in turn results in everything
304
    being output).
305
306
    The "+TIMESTAMP" flag causes each output line (as selected by the level
307
    switch(es)) to be prefixed by a timestamp like 2016-08-18:14:04:43.
308
309
    The "+RELATIVETIMER" flag causes each output line (as selected by
310
    the level switch(es)) to be prefixed by a relative timestamp in
311
    seconds since the first output line like 1.312.
312
313
    The "+FATAL" flag will cause later matching rules to log and call
314
    std::abort. This can be disabled at some later point by using the
315
    "-FATAL" flag before specifying additional rules. The flag will just
316
    abort on positive rules, as it doesn't seem to make sense to abort
317
    on ignored output.
318
319
    If both +TIMESTAMP and +RELATIVETIMER are specified, they are
320
    output in that order.
321
322
    Specifying a flag with a negative sense has no effect. Specifying
323
    the same flag multiple times has no extra effect.
324
325
    A given macro call's level (INFO or WARN) and area is matched against the
326
    given switches as follows:  Only those switches for which the level matches
327
    the given level and for which the area is a prefix (including both empty and
328
    full prefixes) of the given area are considered.  Log output is generated if
329
    and only if among the longest such switches (if any), there is at least one
330
    that has a sense of "+".  (That is, if both +INFO.foo and -INFO.foo are
331
    present, +INFO.foo wins.)
332
333
    If no WARN selection is specified, but an INFO selection is, the
334
    INFO selection is used for WARN messages, too.
335
336
    For example, if SAL_LOG is "+INFO-INFO.foo+INFO.foo.bar", then calls like
337
    SAL_INFO("foo.bar", ...), SAL_INFO("foo.bar.baz", ...), or
338
    SAL_INFO("other", ...) generate output, while calls like
339
    SAL_INFO("foo", ...) or SAL_INFO("foo.barzzz", ...) do not.
340
341
    The generated log output consists of the optional timestamp, the given level
342
    ("info" or "warn"), the given area, the process ID, the thread ID, the
343
    source file, and the source line number, each followed by a colon, followed
344
    by a space, the given message, and a newline.  The precise format of the log
345
    output is subject to change.  The log output is printed to stderr without
346
    further text encoding conversion.
347
348
    On some systems, log output can be redirected to other log sinks,
349
    notably a file provided as a system path and filename via
350
    environment variable SAL_LOG_FILE (appending the process ID if that value ends in a hyphen);
351
    or to a syslog facility if
352
    LibreOffice is suitably built, by setting environment variable
353
    SAL_LOG_SYSLOG.
354
355
    @see @ref sal_log_areas
356
357
    @attention For now, this functionality should only be used internally within
358
    LibreOffice. It may change again in a future version.
359
360
    @since LibreOffice 3.5
361
*/
362
363
/**
364
  Produce log entry from stream in the given log area.
365
366
  See @ref sal_log "basic logging functionality" for details.
367
*/
368
#define SAL_INFO(area, stream) \
369
447M
    SAL_DETAIL_LOG_STREAM( \
370
453M
        SAL_DETAIL_ENABLE_LOG_INFO, ::SAL_DETAIL_LOG_LEVEL_INFO, area, \
371
453M
        SAL_WHERE, stream)
372
373
/**
374
  Produce log entry from stream in the given log area if condition is true.
375
376
  See @ref sal_log "basic logging functionality" for details.
377
*/
378
#define SAL_INFO_IF(condition, area, stream)  \
379
106M
    SAL_DETAIL_LOG_STREAM( \
380
106M
        SAL_DETAIL_ENABLE_LOG_INFO && (condition), \
381
106M
        ::SAL_DETAIL_LOG_LEVEL_INFO, area, SAL_WHERE, stream)
382
383
/**
384
  Produce warning entry from stream in the given log area.
385
386
  See @ref sal_log "basic logging functionality" for details.
387
*/
388
#define SAL_WARN(area, stream) \
389
284M
    SAL_DETAIL_LOG_STREAM( \
390
289M
        SAL_DETAIL_ENABLE_LOG_WARN, ::SAL_DETAIL_LOG_LEVEL_WARN, area, \
391
289M
        SAL_WHERE, stream)
392
393
/**
394
  Produce warning entry from stream in the given log area if condition is true.
395
396
  See @ref sal_log "basic logging functionality" for details.
397
*/
398
#define SAL_WARN_IF(condition, area, stream)   \
399
12.7G
    SAL_DETAIL_LOG_STREAM( \
400
12.7G
        SAL_DETAIL_ENABLE_LOG_WARN && (condition), \
401
12.7G
        ::SAL_DETAIL_LOG_LEVEL_WARN, area, SAL_WHERE, stream)
402
403
/**
404
  Produce temporary debugging output from stream.  This macro is meant to be
405
  used only while working on code and should never exist in production code.
406
407
  See @ref sal_log "basic logging functionality" for details.
408
*/
409
#define SAL_DEBUG(stream) \
410
    SAL_DETAIL_LOG_STREAM( \
411
        SAL_LOG_TRUE, ::SAL_DETAIL_LOG_LEVEL_DEBUG, NULL, NULL, stream)
412
413
/**
414
  Produce temporary debugging output from stream, if condition is true.  This
415
  macro is meant to be used only while working on code and should never exist
416
  in production code.
417
418
  See @ref sal_log "basic logging functionality" for details.
419
*/
420
#define SAL_DEBUG_IF(condition, stream)   \
421
    SAL_DETAIL_LOG_STREAM( \
422
        (condition), ::SAL_DETAIL_LOG_LEVEL_DEBUG, NULL, NULL, stream)
423
424
/**
425
  Produce temporary debugging output from stream along with a backtrace of the
426
  calling location.
427
428
  This macro is meant to be used only while working on code and should never
429
  exist in production code.
430
431
  @param stream input stream
432
433
  @param backtraceDepth a sal_uInt32 value indicating the maximum backtrace
434
  depth; zero means no backtrace
435
436
  See @ref sal_log "basic logging functionality" for details.
437
*/
438
#define SAL_DEBUG_BACKTRACE(stream, backtraceDepth) \
439
    do { \
440
        if (sizeof ::sal::detail::getResult( \
441
                ::sal::detail::StreamStart() << stream) == 1) \
442
        { \
443
            ::sal_detail_log( \
444
                ::SAL_DETAIL_LOG_LEVEL_DEBUG, NULL, NULL, \
445
                ::sal::detail::unwrapStream( \
446
                    ::sal::detail::StreamStart() << stream), \
447
                backtraceDepth); \
448
        } else { \
449
            ::std::ostringstream sal_detail_stream; \
450
            sal_detail_stream << stream; \
451
            ::sal::detail::log( \
452
                ::SAL_DETAIL_LOG_LEVEL_DEBUG, NULL, NULL, sal_detail_stream, \
453
                backtraceDepth); \
454
        } \
455
    } while (false)
456
457
458
459
#endif
460
461
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */