1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
19 #ifndef INCLUDED_CPPUHELPER_IMPLBASE7_HXX
20 #define INCLUDED_CPPUHELPER_IMPLBASE7_HXX
22 #include "cppuhelper/implbase_ex.hxx"
23 #include "rtl/instance.hxx"
24 #include "cppuhelper/weak.hxx"
25 #include "cppuhelper/weakagg.hxx"
26 #include "com/sun/star/lang/XTypeProvider.hpp"
35 sal_Bool m_storedTypeRefs
;
38 type_entry m_typeEntries
[ 7 + 1 ];
41 template< typename Ifc1
, typename Ifc2
, typename Ifc3
, typename Ifc4
, typename Ifc5
, typename Ifc6
, typename Ifc7
, typename Impl
>
42 struct SAL_WARN_UNUSED ImplClassData7
44 class_data
* operator ()()
46 static class_data7 s_cd
=
49 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
51 CPPUHELPER_DETAIL_TYPEENTRY(Ifc1
),
52 CPPUHELPER_DETAIL_TYPEENTRY(Ifc2
),
53 CPPUHELPER_DETAIL_TYPEENTRY(Ifc3
),
54 CPPUHELPER_DETAIL_TYPEENTRY(Ifc4
),
55 CPPUHELPER_DETAIL_TYPEENTRY(Ifc5
),
56 CPPUHELPER_DETAIL_TYPEENTRY(Ifc6
),
57 CPPUHELPER_DETAIL_TYPEENTRY(Ifc7
),
58 CPPUHELPER_DETAIL_TYPEENTRY(css::lang::XTypeProvider
)
61 return reinterpret_cast< class_data
* >(&s_cd
);
67 /** Implementation helper implementing interface css::lang::XTypeProvider
68 and method XInterface::queryInterface(), but no reference counting.
71 Inherit from this class giving your interface(s) to be implemented as template argument(s).
72 Your sub class defines method implementations for these interface(s) including acquire()/
73 release() and delegates incoming queryInterface() calls to this base class.
75 template< class Ifc1
, class Ifc2
, class Ifc3
, class Ifc4
, class Ifc5
, class Ifc6
, class Ifc7
>
76 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplHelper7
77 : public css::lang::XTypeProvider
78 , public Ifc1
, public Ifc2
, public Ifc3
, public Ifc4
, public Ifc5
, public Ifc6
, public Ifc7
80 struct cd
: public rtl::StaticAggregate
< class_data
, ImplClassData7
< Ifc1
, Ifc2
, Ifc3
, Ifc4
, Ifc5
, Ifc6
, Ifc7
, ImplHelper7
<Ifc1
, Ifc2
, Ifc3
, Ifc4
, Ifc5
, Ifc6
, Ifc7
> > > {};
82 #if defined LIBO_INTERNAL_ONLY
83 ImplHelper7() = default;
84 ImplHelper7(ImplHelper7
const &) = default;
85 ImplHelper7(ImplHelper7
&&) = default;
86 ImplHelper7
& operator =(ImplHelper7
const &) = default;
87 ImplHelper7
& operator =(ImplHelper7
&&) = default;
90 virtual css::uno::Any SAL_CALL
queryInterface( css::uno::Type
const & rType
) SAL_OVERRIDE
91 { return ImplHelper_query( rType
, cd::get(), this ); }
92 virtual css::uno::Sequence
< css::uno::Type
> SAL_CALL
getTypes() SAL_OVERRIDE
93 { return ImplHelper_getTypes( cd::get() ); }
94 virtual css::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId() SAL_OVERRIDE
95 { return ImplHelper_getImplementationId( cd::get() ); }
97 #if !defined _MSC_VER // public -> protected changes mangled names there
99 #elif defined __clang__
100 #pragma clang diagnostic push
101 #pragma clang diagnostic ignored "-Wnon-virtual-dtor"
103 ~ImplHelper7() throw () {}
104 #if defined _MSC_VER && defined __clang__
105 #pragma clang diagnostic pop
108 /** Implementation helper implementing interfaces css::lang::XTypeProvider and
109 css::uno::XInterface which supports weak mechanism to be held weakly
110 (supporting css::uno::XWeak through ::cppu::OWeakObject).
113 Inherit from this class giving your interface(s) to be implemented as template argument(s).
114 Your sub class defines method implementations for these interface(s).
116 template< class Ifc1
, class Ifc2
, class Ifc3
, class Ifc4
, class Ifc5
, class Ifc6
, class Ifc7
>
117 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakImplHelper7
119 , public css::lang::XTypeProvider
120 , public Ifc1
, public Ifc2
, public Ifc3
, public Ifc4
, public Ifc5
, public Ifc6
, public Ifc7
122 struct cd
: public rtl::StaticAggregate
< class_data
, ImplClassData7
< Ifc1
, Ifc2
, Ifc3
, Ifc4
, Ifc5
, Ifc6
, Ifc7
, WeakImplHelper7
<Ifc1
, Ifc2
, Ifc3
, Ifc4
, Ifc5
, Ifc6
, Ifc7
> > > {};
124 virtual css::uno::Any SAL_CALL
queryInterface( css::uno::Type
const & rType
) SAL_OVERRIDE
125 { return WeakImplHelper_query( rType
, cd::get(), this, static_cast<OWeakObject
*>(this) ); }
126 virtual void SAL_CALL
acquire() throw () SAL_OVERRIDE
127 { OWeakObject::acquire(); }
128 virtual void SAL_CALL
release() throw () SAL_OVERRIDE
129 { OWeakObject::release(); }
130 virtual css::uno::Sequence
< css::uno::Type
> SAL_CALL
getTypes() SAL_OVERRIDE
131 { return WeakImplHelper_getTypes( cd::get() ); }
132 virtual css::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId() SAL_OVERRIDE
133 { return ImplHelper_getImplementationId( cd::get() ); }
135 /** Implementation helper implementing interfaces css::lang::XTypeProvider and
136 css::uno::XInterface which supports weak mechanism to be held weakly
137 (supporting css::uno::XWeak through ::cppu::OWeakAggObject).
138 In addition, it supports also aggregation meaning object of this class can be aggregated
139 (css::uno::XAggregation through ::cppu::OWeakAggObject).
140 If a delegator is set (this object is aggregated), then incoming queryInterface()
141 calls are delegated to the delegator object. If the delegator does not support the
142 demanded interface, it calls queryAggregation() on its aggregated objects.
145 Inherit from this class giving your interface(s) to be implemented as template argument(s).
146 Your sub class defines method implementations for these interface(s).
148 template< class Ifc1
, class Ifc2
, class Ifc3
, class Ifc4
, class Ifc5
, class Ifc6
, class Ifc7
>
149 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakAggImplHelper7
150 : public OWeakAggObject
151 , public css::lang::XTypeProvider
152 , public Ifc1
, public Ifc2
, public Ifc3
, public Ifc4
, public Ifc5
, public Ifc6
, public Ifc7
154 struct cd
: public rtl::StaticAggregate
< class_data
, ImplClassData7
< Ifc1
, Ifc2
, Ifc3
, Ifc4
, Ifc5
, Ifc6
, Ifc7
, WeakAggImplHelper7
<Ifc1
, Ifc2
, Ifc3
, Ifc4
, Ifc5
, Ifc6
, Ifc7
> > > {};
156 virtual css::uno::Any SAL_CALL
queryInterface( css::uno::Type
const & rType
) SAL_OVERRIDE
157 { return OWeakAggObject::queryInterface( rType
); }
158 virtual css::uno::Any SAL_CALL
queryAggregation( css::uno::Type
const & rType
) SAL_OVERRIDE
159 { return WeakAggImplHelper_queryAgg( rType
, cd::get(), this, static_cast<OWeakAggObject
*>(this) ); }
160 virtual void SAL_CALL
acquire() throw () SAL_OVERRIDE
161 { OWeakAggObject::acquire(); }
162 virtual void SAL_CALL
release() throw () SAL_OVERRIDE
163 { OWeakAggObject::release(); }
164 virtual css::uno::Sequence
< css::uno::Type
> SAL_CALL
getTypes() SAL_OVERRIDE
165 { return WeakAggImplHelper_getTypes( cd::get() ); }
166 virtual css::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId() SAL_OVERRIDE
167 { return ImplHelper_getImplementationId( cd::get() ); }
169 /** Implementation helper implementing interfaces css::lang::XTypeProvider and
170 css::uno::XInterface inherting from a BaseClass.
171 All acquire() and release() calls are delegated to the BaseClass. Upon queryInterface(),
172 if a demanded interface is not supported by this class directly, the request is
173 delegated to the BaseClass.
176 The BaseClass has to be complete in a sense, that css::uno::XInterface
177 and css::lang::XTypeProvider are implemented properly. The
178 BaseClass must have at least one ctor that can be called with six or
179 fewer arguments, of which none is of non-const reference type.
182 Inherit from this class giving your additional interface(s) to be implemented as
183 template argument(s). Your sub class defines method implementations for these interface(s).
185 template< class BaseClass
, class Ifc1
, class Ifc2
, class Ifc3
, class Ifc4
, class Ifc5
, class Ifc6
, class Ifc7
>
186 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplInheritanceHelper7
188 , public Ifc1
, public Ifc2
, public Ifc3
, public Ifc4
, public Ifc5
, public Ifc6
, public Ifc7
190 struct cd
: public rtl::StaticAggregate
< class_data
, ImplClassData7
< Ifc1
, Ifc2
, Ifc3
, Ifc4
, Ifc5
, Ifc6
, Ifc7
, ImplInheritanceHelper7
<BaseClass
, Ifc1
, Ifc2
, Ifc3
, Ifc4
, Ifc5
, Ifc6
, Ifc7
> > > {};
192 template< typename T1
>
193 explicit ImplInheritanceHelper7(T1
const & arg1
): BaseClass(arg1
) {}
194 template< typename T1
, typename T2
>
195 ImplInheritanceHelper7(T1
const & arg1
, T2
const & arg2
):
196 BaseClass(arg1
, arg2
) {}
197 template< typename T1
, typename T2
, typename T3
>
198 ImplInheritanceHelper7(
199 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
):
200 BaseClass(arg1
, arg2
, arg3
) {}
201 template< typename T1
, typename T2
, typename T3
, typename T4
>
202 ImplInheritanceHelper7(
203 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
, T4
const & arg4
):
204 BaseClass(arg1
, arg2
, arg3
, arg4
) {}
206 typename T1
, typename T2
, typename T3
, typename T4
, typename T5
>
207 ImplInheritanceHelper7(
208 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
, T4
const & arg4
,
210 BaseClass(arg1
, arg2
, arg3
, arg4
, arg5
) {}
212 typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
214 ImplInheritanceHelper7(
215 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
, T4
const & arg4
,
216 T5
const & arg5
, T6
const & arg6
):
217 BaseClass(arg1
, arg2
, arg3
, arg4
, arg5
, arg6
) {}
219 ImplInheritanceHelper7() {}
220 virtual css::uno::Any SAL_CALL
queryInterface( css::uno::Type
const & rType
) SAL_OVERRIDE
222 css::uno::Any
aRet( ImplHelper_queryNoXInterface( rType
, cd::get(), this ) );
225 return BaseClass::queryInterface( rType
);
227 virtual void SAL_CALL
acquire() throw () SAL_OVERRIDE
228 { BaseClass::acquire(); }
229 virtual void SAL_CALL
release() throw () SAL_OVERRIDE
230 { BaseClass::release(); }
231 virtual css::uno::Sequence
< css::uno::Type
> SAL_CALL
getTypes() SAL_OVERRIDE
232 { return ImplInhHelper_getTypes( cd::get(), BaseClass::getTypes() ); }
233 virtual css::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId() SAL_OVERRIDE
234 { return ImplHelper_getImplementationId( cd::get() ); }
236 /** Implementation helper implementing interfaces css::lang::XTypeProvider and
237 css::uno::XInterface inherting from a BaseClass.
238 All acquire(), release() and queryInterface() calls are delegated to the BaseClass.
239 Upon queryAggregation(), if a demanded interface is not supported by this class directly,
240 the request is delegated to the BaseClass.
243 The BaseClass has to be complete in a sense, that css::uno::XInterface,
244 css::uno::XAggregation and css::lang::XTypeProvider
245 are implemented properly. The BaseClass must have at least one ctor
246 that can be called with six or fewer arguments, of which none is of
247 non-const reference type.
250 Inherit from this class giving your additional interface(s) to be implemented as
251 template argument(s). Your sub class defines method implementations for these interface(s).
253 template< class BaseClass
, class Ifc1
, class Ifc2
, class Ifc3
, class Ifc4
, class Ifc5
, class Ifc6
, class Ifc7
>
254 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE AggImplInheritanceHelper7
256 , public Ifc1
, public Ifc2
, public Ifc3
, public Ifc4
, public Ifc5
, public Ifc6
, public Ifc7
258 struct cd
: public rtl::StaticAggregate
< class_data
, ImplClassData7
< Ifc1
, Ifc2
, Ifc3
, Ifc4
, Ifc5
, Ifc6
, Ifc7
, AggImplInheritanceHelper7
<BaseClass
, Ifc1
, Ifc2
, Ifc3
, Ifc4
, Ifc5
, Ifc6
, Ifc7
> > > {};
260 template< typename T1
>
261 explicit AggImplInheritanceHelper7(T1
const & arg1
): BaseClass(arg1
) {}
262 template< typename T1
, typename T2
>
263 AggImplInheritanceHelper7(T1
const & arg1
, T2
const & arg2
):
264 BaseClass(arg1
, arg2
) {}
265 template< typename T1
, typename T2
, typename T3
>
266 AggImplInheritanceHelper7(
267 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
):
268 BaseClass(arg1
, arg2
, arg3
) {}
269 template< typename T1
, typename T2
, typename T3
, typename T4
>
270 AggImplInheritanceHelper7(
271 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
, T4
const & arg4
):
272 BaseClass(arg1
, arg2
, arg3
, arg4
) {}
274 typename T1
, typename T2
, typename T3
, typename T4
, typename T5
>
275 AggImplInheritanceHelper7(
276 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
, T4
const & arg4
,
278 BaseClass(arg1
, arg2
, arg3
, arg4
, arg5
) {}
280 typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
282 AggImplInheritanceHelper7(
283 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
, T4
const & arg4
,
284 T5
const & arg5
, T6
const & arg6
):
285 BaseClass(arg1
, arg2
, arg3
, arg4
, arg5
, arg6
) {}
287 AggImplInheritanceHelper7() {}
288 virtual css::uno::Any SAL_CALL
queryInterface( css::uno::Type
const & rType
) SAL_OVERRIDE
289 { return BaseClass::queryInterface( rType
); }
290 virtual css::uno::Any SAL_CALL
queryAggregation( css::uno::Type
const & rType
) SAL_OVERRIDE
292 css::uno::Any
aRet( ImplHelper_queryNoXInterface( rType
, cd::get(), this ) );
295 return BaseClass::queryAggregation( rType
);
297 virtual void SAL_CALL
acquire() throw () SAL_OVERRIDE
298 { BaseClass::acquire(); }
299 virtual void SAL_CALL
release() throw () SAL_OVERRIDE
300 { BaseClass::release(); }
301 virtual css::uno::Sequence
< css::uno::Type
> SAL_CALL
getTypes() SAL_OVERRIDE
302 { return ImplInhHelper_getTypes( cd::get(), BaseClass::getTypes() ); }
303 virtual css::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId() SAL_OVERRIDE
304 { return ImplHelper_getImplementationId( cd::get() ); }
310 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */