Coverage Report

Created: 2026-03-31 11:00

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/include/cppuhelper/implbase3.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
 * This file incorporates work covered by the following license notice:
10
 *
11
 *   Licensed to the Apache Software Foundation (ASF) under one or more
12
 *   contributor license agreements. See the NOTICE file distributed
13
 *   with this work for additional information regarding copyright
14
 *   ownership. The ASF licenses this file to you under the Apache
15
 *   License, Version 2.0 (the "License"); you may not use this file
16
 *   except in compliance with the License. You may obtain a copy of
17
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18
 */
19
20
/*
21
 * This file is part of LibreOffice published API.
22
 */
23
#ifndef INCLUDED_CPPUHELPER_IMPLBASE3_HXX
24
#define INCLUDED_CPPUHELPER_IMPLBASE3_HXX
25
26
#include "cppuhelper/implbase_ex.hxx"
27
#include "rtl/instance.hxx"
28
#include "cppuhelper/weak.hxx"
29
#include "cppuhelper/weakagg.hxx"
30
#include "com/sun/star/lang/XTypeProvider.hpp"
31
32
namespace cppu
33
{
34
    /// @cond INTERNAL
35
36
    struct class_data3
37
    {
38
        sal_Int16 m_nTypes;
39
        sal_Bool m_storedTypeRefs;
40
        sal_Bool m_storedId;
41
        sal_Int8 m_id[ 16 ];
42
        type_entry m_typeEntries[ 3 + 1 ];
43
    };
44
45
    template< typename Ifc1, typename Ifc2, typename Ifc3, typename Impl > struct SAL_WARN_UNUSED ImplClassData3
46
    {
47
        class_data* operator ()()
48
1
        {
49
1
            static class_data3 s_cd =
50
1
            {
51
1
                3 +1, false, false,
52
1
                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
53
1
                {
54
1
                    CPPUHELPER_DETAIL_TYPEENTRY(Ifc1),
55
1
                    CPPUHELPER_DETAIL_TYPEENTRY(Ifc2),
56
1
                    CPPUHELPER_DETAIL_TYPEENTRY(Ifc3),
57
1
                    CPPUHELPER_DETAIL_TYPEENTRY(css::lang::XTypeProvider)
58
1
                }
59
1
            };
60
1
            return reinterpret_cast< class_data * >(&s_cd);
61
1
        }
cppu::ImplClassData3<com::sun::star::drawing::XShapes, com::sun::star::lang::XServiceInfo, com::sun::star::lang::XComponent, cppu::WeakAggImplHelper3<com::sun::star::drawing::XShapes, com::sun::star::lang::XServiceInfo, com::sun::star::lang::XComponent> >::operator()()
Line
Count
Source
48
1
        {
49
1
            static class_data3 s_cd =
50
1
            {
51
1
                3 +1, false, false,
52
1
                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
53
1
                {
54
1
                    CPPUHELPER_DETAIL_TYPEENTRY(Ifc1),
55
1
                    CPPUHELPER_DETAIL_TYPEENTRY(Ifc2),
56
1
                    CPPUHELPER_DETAIL_TYPEENTRY(Ifc3),
57
1
                    CPPUHELPER_DETAIL_TYPEENTRY(css::lang::XTypeProvider)
58
1
                }
59
1
            };
60
1
            return reinterpret_cast< class_data * >(&s_cd);
61
1
        }
Unexecuted instantiation: cppu::ImplClassData3<com::sun::star::sdbc::XStatement, com::sun::star::lang::XServiceInfo, com::sun::star::sdbc::XBatchExecution, cppu::ImplHelper3<com::sun::star::sdbc::XStatement, com::sun::star::lang::XServiceInfo, com::sun::star::sdbc::XBatchExecution> >::operator()()
Unexecuted instantiation: cppu::ImplClassData3<com::sun::star::sdbcx::XDataDescriptorFactory, com::sun::star::beans::XPropertyChangeListener, com::sun::star::sdbcx::XRename, cppu::ImplHelper3<com::sun::star::sdbcx::XDataDescriptorFactory, com::sun::star::beans::XPropertyChangeListener, com::sun::star::sdbcx::XRename> >::operator()()
Unexecuted instantiation: cppu::ImplClassData3<com::sun::star::container::XContainerListener, com::sun::star::util::XChangesListener, com::sun::star::util::XModifyListener, cppu::AggImplInheritanceHelper3<UnoControlContainer, com::sun::star::container::XContainerListener, com::sun::star::util::XChangesListener, com::sun::star::util::XModifyListener> >::operator()()
Unexecuted instantiation: cppu::ImplClassData3<com::sun::star::lang::XSingleServiceFactory, com::sun::star::container::XContainer, com::sun::star::container::XIndexContainer, cppu::ImplHelper3<com::sun::star::lang::XSingleServiceFactory, com::sun::star::container::XContainer, com::sun::star::container::XIndexContainer> >::operator()()
62
    };
63
64
    /// @endcond
65
66
    /** Implementation helper implementing interface css::lang::XTypeProvider
67
        and method XInterface::queryInterface(), but no reference counting.
68
69
        @derive
70
        Inherit from this class giving your interface(s) to be implemented as template argument(s).
71
        Your sub class defines method implementations for these interface(s) including acquire()/
72
        release() and delegates incoming queryInterface() calls to this base class.
73
    */
74
    template< class Ifc1, class Ifc2, class Ifc3 >
75
    class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplHelper3
76
        : public css::lang::XTypeProvider
77
        , public Ifc1, public Ifc2, public Ifc3
78
    {
79
        struct cd : public rtl::StaticAggregate< class_data, ImplClassData3 < Ifc1, Ifc2, Ifc3, ImplHelper3<Ifc1, Ifc2, Ifc3> > > {};
80
    public:
81
#if defined LIBO_INTERNAL_ONLY
82
0
        ImplHelper3() = default;
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::sdbc::XStatement, com::sun::star::lang::XServiceInfo, com::sun::star::sdbc::XBatchExecution>::ImplHelper3()
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::sdbcx::XDataDescriptorFactory, com::sun::star::beans::XPropertyChangeListener, com::sun::star::sdbcx::XRename>::ImplHelper3()
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::lang::XSingleServiceFactory, com::sun::star::container::XContainer, com::sun::star::container::XIndexContainer>::ImplHelper3()
83
0
        ImplHelper3(ImplHelper3 const &) = default;
84
        ImplHelper3(ImplHelper3 &&) = default;
85
        ImplHelper3 & operator =(ImplHelper3 const &) = default;
86
        ImplHelper3 & operator =(ImplHelper3 &&) = default;
87
#endif
88
89
        virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE
90
0
            { return ImplHelper_query( rType, cd::get(), this ); }
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::sdbc::XStatement, com::sun::star::lang::XServiceInfo, com::sun::star::sdbc::XBatchExecution>::queryInterface(com::sun::star::uno::Type const&)
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::sdbcx::XDataDescriptorFactory, com::sun::star::beans::XPropertyChangeListener, com::sun::star::sdbcx::XRename>::queryInterface(com::sun::star::uno::Type const&)
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::lang::XSingleServiceFactory, com::sun::star::container::XContainer, com::sun::star::container::XIndexContainer>::queryInterface(com::sun::star::uno::Type const&)
91
        virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
92
0
            { return ImplHelper_getTypes( cd::get() ); }
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::sdbc::XStatement, com::sun::star::lang::XServiceInfo, com::sun::star::sdbc::XBatchExecution>::getTypes()
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::sdbcx::XDataDescriptorFactory, com::sun::star::beans::XPropertyChangeListener, com::sun::star::sdbcx::XRename>::getTypes()
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::lang::XSingleServiceFactory, com::sun::star::container::XContainer, com::sun::star::container::XIndexContainer>::getTypes()
93
        virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE
94
0
            { return ImplHelper_getImplementationId( cd::get() ); }
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::sdbc::XStatement, com::sun::star::lang::XServiceInfo, com::sun::star::sdbc::XBatchExecution>::getImplementationId()
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::sdbcx::XDataDescriptorFactory, com::sun::star::beans::XPropertyChangeListener, com::sun::star::sdbcx::XRename>::getImplementationId()
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::lang::XSingleServiceFactory, com::sun::star::container::XContainer, com::sun::star::container::XIndexContainer>::getImplementationId()
95
96
#if !defined _MSC_VER // public -> protected changes mangled names there
97
    protected:
98
#endif
99
0
        ~ImplHelper3() SAL_NOEXCEPT {}
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::sdbc::XStatement, com::sun::star::lang::XServiceInfo, com::sun::star::sdbc::XBatchExecution>::~ImplHelper3()
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::sdbcx::XDataDescriptorFactory, com::sun::star::beans::XPropertyChangeListener, com::sun::star::sdbcx::XRename>::~ImplHelper3()
Unexecuted instantiation: cppu::ImplHelper3<com::sun::star::lang::XSingleServiceFactory, com::sun::star::container::XContainer, com::sun::star::container::XIndexContainer>::~ImplHelper3()
100
    };
101
    /** Implementation helper implementing interfaces css::lang::XTypeProvider and
102
        css::uno::XInterface which supports weak mechanism to be held weakly
103
        (supporting css::uno::XWeak through ::cppu::OWeakObject).
104
105
        @derive
106
        Inherit from this class giving your interface(s) to be implemented as template argument(s).
107
        Your sub class defines method implementations for these interface(s).
108
    */
109
    template< class Ifc1, class Ifc2, class Ifc3 >
110
    class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakImplHelper3
111
        : public OWeakObject
112
        , public css::lang::XTypeProvider
113
        , public Ifc1, public Ifc2, public Ifc3
114
    {
115
        struct cd : public rtl::StaticAggregate< class_data, ImplClassData3 < Ifc1, Ifc2, Ifc3, WeakImplHelper3<Ifc1, Ifc2, Ifc3> > > {};
116
    public:
117
        virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE
118
            { return WeakImplHelper_query( rType, cd::get(), this, static_cast<OWeakObject *>(this) ); }
119
        virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE
120
            { OWeakObject::acquire(); }
121
        virtual void SAL_CALL release() SAL_NOEXCEPT SAL_OVERRIDE
122
            { OWeakObject::release(); }
123
        virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
124
            { return WeakImplHelper_getTypes( cd::get() ); }
125
        virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE
126
            { return ImplHelper_getImplementationId( cd::get() ); }
127
    };
128
    /** Implementation helper implementing interfaces css::lang::XTypeProvider and
129
        css::uno::XInterface which supports weak mechanism to be held weakly
130
        (supporting css::uno::XWeak through ::cppu::OWeakAggObject).
131
        In addition, it supports also aggregation meaning object of this class can be aggregated
132
        (css::uno::XAggregation through ::cppu::OWeakAggObject).
133
        If a delegator is set (this object is aggregated), then incoming queryInterface()
134
        calls are delegated to the delegator object. If the delegator does not support the
135
        demanded interface, it calls queryAggregation() on its aggregated objects.
136
137
        @derive
138
        Inherit from this class giving your interface(s) to be implemented as template argument(s).
139
        Your sub class defines method implementations for these interface(s).
140
    */
141
    template< class Ifc1, class Ifc2, class Ifc3 >
142
    class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakAggImplHelper3
143
        : public OWeakAggObject
144
        , public css::lang::XTypeProvider
145
        , public Ifc1, public Ifc2, public Ifc3
146
    {
147
        struct cd : public rtl::StaticAggregate< class_data, ImplClassData3 < Ifc1, Ifc2, Ifc3, WeakAggImplHelper3<Ifc1, Ifc2, Ifc3> > > {};
148
    public:
149
        virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE
150
4.91k
            { return OWeakAggObject::queryInterface( rType ); }
151
        virtual css::uno::Any SAL_CALL queryAggregation( css::uno::Type const & rType ) SAL_OVERRIDE
152
4.91k
            { return WeakAggImplHelper_queryAgg( rType, cd::get(), this, static_cast<OWeakAggObject *>(this) ); }
153
        virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE
154
12.2k
            { OWeakAggObject::acquire(); }
155
        virtual void SAL_CALL release() SAL_NOEXCEPT SAL_OVERRIDE
156
0
            { OWeakAggObject::release(); }
157
        virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
158
0
            { return WeakAggImplHelper_getTypes( cd::get() ); }
159
        virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE
160
0
            { return ImplHelper_getImplementationId( cd::get() ); }
161
    };
162
    /** Implementation helper implementing interfaces css::lang::XTypeProvider and
163
        css::uno::XInterface inheriting from a BaseClass.
164
        All acquire() and release() calls are delegated to the BaseClass. Upon queryInterface(),
165
        if a demanded interface is not supported by this class directly, the request is
166
        delegated to the BaseClass.
167
168
        @attention
169
        The BaseClass has to be complete in a sense, that css::uno::XInterface
170
        and css::lang::XTypeProvider are implemented properly.  The
171
        BaseClass must have at least one ctor that can be called with six or
172
        fewer arguments, of which none is of non-const reference type.
173
        also has to have a default ctor.
174
175
        @derive
176
        Inherit from this class giving your additional interface(s) to be implemented as
177
        template argument(s). Your sub class defines method implementations for these interface(s).
178
    */
179
    template< class BaseClass, class Ifc1, class Ifc2, class Ifc3 >
180
    class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplInheritanceHelper3
181
        : public BaseClass
182
        , public Ifc1, public Ifc2, public Ifc3
183
    {
184
        struct cd : public rtl::StaticAggregate< class_data, ImplClassData3 < Ifc1, Ifc2, Ifc3, ImplInheritanceHelper3<BaseClass, Ifc1, Ifc2, Ifc3> > > {};
185
    protected:
186
        template< typename T1 >
187
        explicit ImplInheritanceHelper3(T1 const & arg1): BaseClass(arg1) {}
188
        template< typename T1, typename T2 >
189
        ImplInheritanceHelper3(T1 const & arg1, T2 const & arg2):
190
            BaseClass(arg1, arg2) {}
191
        template< typename T1, typename T2, typename T3 >
192
        ImplInheritanceHelper3(
193
            T1 const & arg1, T2 const & arg2, T3 const & arg3):
194
            BaseClass(arg1, arg2, arg3) {}
195
        template< typename T1, typename T2, typename T3, typename T4 >
196
        ImplInheritanceHelper3(
197
            T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4):
198
            BaseClass(arg1, arg2, arg3, arg4) {}
199
        template<
200
            typename T1, typename T2, typename T3, typename T4, typename T5 >
201
        ImplInheritanceHelper3(
202
            T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4,
203
            T5 const & arg5):
204
            BaseClass(arg1, arg2, arg3, arg4, arg5) {}
205
        template<
206
            typename T1, typename T2, typename T3, typename T4, typename T5,
207
            typename T6 >
208
        ImplInheritanceHelper3(
209
            T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4,
210
            T5 const & arg5, T6 const & arg6):
211
            BaseClass(arg1, arg2, arg3, arg4, arg5, arg6) {}
212
    public:
213
        ImplInheritanceHelper3() {}
214
        virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE
215
            {
216
                css::uno::Any aRet( ImplHelper_queryNoXInterface( rType, cd::get(), this ) );
217
                if (aRet.hasValue())
218
                    return aRet;
219
                return BaseClass::queryInterface( rType );
220
            }
221
        virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE
222
            { BaseClass::acquire(); }
223
        virtual void SAL_CALL release() SAL_NOEXCEPT SAL_OVERRIDE
224
            { BaseClass::release(); }
225
        virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
226
            { return ImplInhHelper_getTypes( cd::get(), BaseClass::getTypes() ); }
227
        virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE
228
            { return ImplHelper_getImplementationId( cd::get() ); }
229
    };
230
    /** Implementation helper implementing interfaces css::lang::XTypeProvider and
231
        css::uno::XInterface inheriting from a BaseClass.
232
        All acquire(),  release() and queryInterface() calls are delegated to the BaseClass.
233
        Upon queryAggregation(), if a demanded interface is not supported by this class directly,
234
        the request is delegated to the BaseClass.
235
236
        @attention
237
        The BaseClass has to be complete in a sense, that css::uno::XInterface,
238
        css::uno::XAggregation and css::lang::XTypeProvider
239
        are implemented properly.  The BaseClass must have at least one ctor
240
        that can be called with six or fewer arguments, of which none is of
241
        non-const reference type.
242
243
        @derive
244
        Inherit from this class giving your additional interface(s) to be implemented as
245
        template argument(s). Your sub class defines method implementations for these interface(s).
246
    */
247
    template< class BaseClass, class Ifc1, class Ifc2, class Ifc3 >
248
    class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE AggImplInheritanceHelper3
249
        : public BaseClass
250
        , public Ifc1, public Ifc2, public Ifc3
251
    {
252
        struct cd : public rtl::StaticAggregate< class_data, ImplClassData3 < Ifc1, Ifc2, Ifc3, AggImplInheritanceHelper3<BaseClass, Ifc1, Ifc2, Ifc3> > > {};
253
    protected:
254
        template< typename T1 >
255
        explicit AggImplInheritanceHelper3(T1 const & arg1): BaseClass(arg1) {}
256
        template< typename T1, typename T2 >
257
        AggImplInheritanceHelper3(T1 const & arg1, T2 const & arg2):
258
            BaseClass(arg1, arg2) {}
259
        template< typename T1, typename T2, typename T3 >
260
        AggImplInheritanceHelper3(
261
            T1 const & arg1, T2 const & arg2, T3 const & arg3):
262
            BaseClass(arg1, arg2, arg3) {}
263
        template< typename T1, typename T2, typename T3, typename T4 >
264
        AggImplInheritanceHelper3(
265
            T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4):
266
            BaseClass(arg1, arg2, arg3, arg4) {}
267
        template<
268
            typename T1, typename T2, typename T3, typename T4, typename T5 >
269
        AggImplInheritanceHelper3(
270
            T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4,
271
            T5 const & arg5):
272
            BaseClass(arg1, arg2, arg3, arg4, arg5) {}
273
        template<
274
            typename T1, typename T2, typename T3, typename T4, typename T5,
275
            typename T6 >
276
        AggImplInheritanceHelper3(
277
            T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4,
278
            T5 const & arg5, T6 const & arg6):
279
            BaseClass(arg1, arg2, arg3, arg4, arg5, arg6) {}
280
    public:
281
0
        AggImplInheritanceHelper3() {}
282
        virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE
283
0
            { return BaseClass::queryInterface( rType ); }
284
        virtual css::uno::Any SAL_CALL queryAggregation( css::uno::Type const & rType ) SAL_OVERRIDE
285
0
            {
286
0
                css::uno::Any aRet( ImplHelper_queryNoXInterface( rType, cd::get(), this ) );
287
0
                if (aRet.hasValue())
288
0
                    return aRet;
289
0
                return BaseClass::queryAggregation( rType );
290
0
            }
291
        virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE
292
0
            { BaseClass::acquire(); }
293
        virtual void SAL_CALL release() SAL_NOEXCEPT SAL_OVERRIDE
294
0
            { BaseClass::release(); }
295
        virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
296
0
            { return ImplInhHelper_getTypes( cd::get(), BaseClass::getTypes() ); }
297
        virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE
298
0
            { return ImplHelper_getImplementationId( cd::get() ); }
299
    };
300
}
301
302
#endif
303
304
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */