/src/libreoffice/include/cppuhelper/implbase6.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_IMPLBASE6_HXX |
24 | | #define INCLUDED_CPPUHELPER_IMPLBASE6_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_data6 |
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[ 6 + 1 ]; |
43 | | }; |
44 | | |
45 | | template< typename Ifc1, typename Ifc2, typename Ifc3, typename Ifc4, typename Ifc5, typename Ifc6, typename Impl > |
46 | | struct SAL_WARN_UNUSED ImplClassData6 |
47 | | { |
48 | | class_data* operator ()() |
49 | 1 | { |
50 | 1 | static class_data6 s_cd = |
51 | 1 | { |
52 | 1 | 6 +1, false, false, |
53 | 1 | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, |
54 | 1 | { |
55 | 1 | CPPUHELPER_DETAIL_TYPEENTRY(Ifc1), |
56 | 1 | CPPUHELPER_DETAIL_TYPEENTRY(Ifc2), |
57 | 1 | CPPUHELPER_DETAIL_TYPEENTRY(Ifc3), |
58 | 1 | CPPUHELPER_DETAIL_TYPEENTRY(Ifc4), |
59 | 1 | CPPUHELPER_DETAIL_TYPEENTRY(Ifc5), |
60 | 1 | CPPUHELPER_DETAIL_TYPEENTRY(Ifc6), |
61 | 1 | CPPUHELPER_DETAIL_TYPEENTRY(css::lang::XTypeProvider) |
62 | 1 | } |
63 | 1 | }; |
64 | 1 | return reinterpret_cast< class_data * >(&s_cd); |
65 | 1 | } |
66 | | }; |
67 | | |
68 | | /// @endcond |
69 | | |
70 | | /** Implementation helper implementing interface css::lang::XTypeProvider |
71 | | and method XInterface::queryInterface(), but no reference counting. |
72 | | |
73 | | @derive |
74 | | Inherit from this class giving your interface(s) to be implemented as template argument(s). |
75 | | Your sub class defines method implementations for these interface(s) including acquire()/ |
76 | | release() and delegates incoming queryInterface() calls to this base class. |
77 | | */ |
78 | | template< class Ifc1, class Ifc2, class Ifc3, class Ifc4, class Ifc5, class Ifc6 > |
79 | | class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplHelper6 |
80 | | : public css::lang::XTypeProvider |
81 | | , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6 |
82 | | { |
83 | | struct cd : public rtl::StaticAggregate< class_data, ImplClassData6 < Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, ImplHelper6<Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6> > > {}; |
84 | | public: |
85 | | #if defined LIBO_INTERNAL_ONLY |
86 | | ImplHelper6() = default; |
87 | | ImplHelper6(ImplHelper6 const &) = default; |
88 | | ImplHelper6(ImplHelper6 &&) = default; |
89 | | ImplHelper6 & operator =(ImplHelper6 const &) = default; |
90 | | ImplHelper6 & operator =(ImplHelper6 &&) = default; |
91 | | #endif |
92 | | |
93 | | virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE |
94 | | { return ImplHelper_query( rType, cd::get(), this ); } |
95 | | virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE |
96 | | { return ImplHelper_getTypes( cd::get() ); } |
97 | | virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE |
98 | | { return ImplHelper_getImplementationId( cd::get() ); } |
99 | | |
100 | | #if !defined _MSC_VER // public -> protected changes mangled names there |
101 | | protected: |
102 | | #endif |
103 | | ~ImplHelper6() SAL_NOEXCEPT {} |
104 | | }; |
105 | | /** Implementation helper implementing interfaces css::lang::XTypeProvider and |
106 | | css::uno::XInterface which supports weak mechanism to be held weakly |
107 | | (supporting css::uno::XWeak through ::cppu::OWeakObject). |
108 | | |
109 | | @derive |
110 | | Inherit from this class giving your interface(s) to be implemented as template argument(s). |
111 | | Your sub class defines method implementations for these interface(s). |
112 | | */ |
113 | | template< class Ifc1, class Ifc2, class Ifc3, class Ifc4, class Ifc5, class Ifc6 > |
114 | | class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakImplHelper6 |
115 | | : public OWeakObject |
116 | | , public css::lang::XTypeProvider |
117 | | , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6 |
118 | | { |
119 | | struct cd : public rtl::StaticAggregate< class_data, ImplClassData6 < Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, WeakImplHelper6<Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6> > > {}; |
120 | | public: |
121 | | virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE |
122 | | { return WeakImplHelper_query( rType, cd::get(), this, static_cast<OWeakObject *>(this) ); } |
123 | | virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE |
124 | | { OWeakObject::acquire(); } |
125 | | virtual void SAL_CALL release() SAL_NOEXCEPT SAL_OVERRIDE |
126 | | { OWeakObject::release(); } |
127 | | virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE |
128 | | { return WeakImplHelper_getTypes( cd::get() ); } |
129 | | virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE |
130 | | { return ImplHelper_getImplementationId( cd::get() ); } |
131 | | }; |
132 | | /** Implementation helper implementing interfaces css::lang::XTypeProvider and |
133 | | css::uno::XInterface which supports weak mechanism to be held weakly |
134 | | (supporting css::uno::XWeak through ::cppu::OWeakAggObject). |
135 | | In addition, it supports also aggregation meaning object of this class can be aggregated |
136 | | (css::uno::XAggregation through ::cppu::OWeakAggObject). |
137 | | If a delegator is set (this object is aggregated), then incoming queryInterface() |
138 | | calls are delegated to the delegator object. If the delegator does not support the |
139 | | demanded interface, it calls queryAggregation() on its aggregated objects. |
140 | | |
141 | | @derive |
142 | | Inherit from this class giving your interface(s) to be implemented as template argument(s). |
143 | | Your sub class defines method implementations for these interface(s). |
144 | | */ |
145 | | template< class Ifc1, class Ifc2, class Ifc3, class Ifc4, class Ifc5, class Ifc6 > |
146 | | class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakAggImplHelper6 |
147 | | : public OWeakAggObject |
148 | | , public css::lang::XTypeProvider |
149 | | , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6 |
150 | | { |
151 | | struct cd : public rtl::StaticAggregate< class_data, ImplClassData6 < Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, WeakAggImplHelper6<Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6> > > {}; |
152 | | public: |
153 | | virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE |
154 | 0 | { return OWeakAggObject::queryInterface( rType ); } |
155 | | virtual css::uno::Any SAL_CALL queryAggregation( css::uno::Type const & rType ) SAL_OVERRIDE |
156 | 50 | { return WeakAggImplHelper_queryAgg( rType, cd::get(), this, static_cast<OWeakAggObject *>(this) ); } |
157 | | virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE |
158 | 125 | { OWeakAggObject::acquire(); } |
159 | | virtual void SAL_CALL release() SAL_NOEXCEPT SAL_OVERRIDE |
160 | 125 | { OWeakAggObject::release(); } |
161 | | virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE |
162 | 0 | { return WeakAggImplHelper_getTypes( cd::get() ); } |
163 | | virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE |
164 | 0 | { return ImplHelper_getImplementationId( cd::get() ); } |
165 | | }; |
166 | | /** Implementation helper implementing interfaces css::lang::XTypeProvider and |
167 | | css::uno::XInterface inheriting from a BaseClass. |
168 | | All acquire() and release() calls are delegated to the BaseClass. Upon queryInterface(), |
169 | | if a demanded interface is not supported by this class directly, the request is |
170 | | delegated to the BaseClass. |
171 | | |
172 | | @attention |
173 | | The BaseClass has to be complete in a sense, that css::uno::XInterface |
174 | | and css::lang::XTypeProvider are implemented properly. The |
175 | | BaseClass must have at least one ctor that can be called with six or |
176 | | fewer arguments, of which none is of non-const reference type. |
177 | | |
178 | | @derive |
179 | | Inherit from this class giving your additional interface(s) to be implemented as |
180 | | template argument(s). Your sub class defines method implementations for these interface(s). |
181 | | */ |
182 | | template< class BaseClass, class Ifc1, class Ifc2, class Ifc3, class Ifc4, class Ifc5, class Ifc6 > |
183 | | class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplInheritanceHelper6 |
184 | | : public BaseClass |
185 | | , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6 |
186 | | { |
187 | | struct cd : public rtl::StaticAggregate< class_data, ImplClassData6 < Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, ImplInheritanceHelper6<BaseClass, Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6> > > {}; |
188 | | protected: |
189 | | template< typename T1 > |
190 | | explicit ImplInheritanceHelper6(T1 const & arg1): BaseClass(arg1) {} |
191 | | template< typename T1, typename T2 > |
192 | | ImplInheritanceHelper6(T1 const & arg1, T2 const & arg2): |
193 | | BaseClass(arg1, arg2) {} |
194 | | template< typename T1, typename T2, typename T3 > |
195 | | ImplInheritanceHelper6( |
196 | | T1 const & arg1, T2 const & arg2, T3 const & arg3): |
197 | | BaseClass(arg1, arg2, arg3) {} |
198 | | template< typename T1, typename T2, typename T3, typename T4 > |
199 | | ImplInheritanceHelper6( |
200 | | T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4): |
201 | | BaseClass(arg1, arg2, arg3, arg4) {} |
202 | | template< |
203 | | typename T1, typename T2, typename T3, typename T4, typename T5 > |
204 | | ImplInheritanceHelper6( |
205 | | T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4, |
206 | | T5 const & arg5): |
207 | | BaseClass(arg1, arg2, arg3, arg4, arg5) {} |
208 | | template< |
209 | | typename T1, typename T2, typename T3, typename T4, typename T5, |
210 | | typename T6 > |
211 | | ImplInheritanceHelper6( |
212 | | T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4, |
213 | | T5 const & arg5, T6 const & arg6): |
214 | | BaseClass(arg1, arg2, arg3, arg4, arg5, arg6) {} |
215 | | public: |
216 | | ImplInheritanceHelper6() {} |
217 | | virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE |
218 | | { |
219 | | css::uno::Any aRet( ImplHelper_queryNoXInterface( rType, cd::get(), this ) ); |
220 | | if (aRet.hasValue()) |
221 | | return aRet; |
222 | | return BaseClass::queryInterface( rType ); |
223 | | } |
224 | | virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE |
225 | | { BaseClass::acquire(); } |
226 | | virtual void SAL_CALL release() SAL_NOEXCEPT SAL_OVERRIDE |
227 | | { BaseClass::release(); } |
228 | | virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE |
229 | | { return ImplInhHelper_getTypes( cd::get(), BaseClass::getTypes() ); } |
230 | | virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE |
231 | | { return ImplHelper_getImplementationId( cd::get() ); } |
232 | | }; |
233 | | /** Implementation helper implementing interfaces css::lang::XTypeProvider and |
234 | | css::uno::XInterface inheriting from a BaseClass. |
235 | | All acquire(), release() and queryInterface() calls are delegated to the BaseClass. |
236 | | Upon queryAggregation(), if a demanded interface is not supported by this class directly, |
237 | | the request is delegated to the BaseClass. |
238 | | |
239 | | @attention |
240 | | The BaseClass has to be complete in a sense, that css::uno::XInterface, |
241 | | css::uno::XAggregation and css::lang::XTypeProvider |
242 | | are implemented properly. The BaseClass must have at least one ctor |
243 | | that can be called with six or fewer arguments, of which none is of |
244 | | non-const reference type. |
245 | | |
246 | | @derive |
247 | | Inherit from this class giving your additional interface(s) to be implemented as |
248 | | template argument(s). Your sub class defines method implementations for these interface(s). |
249 | | */ |
250 | | template< class BaseClass, class Ifc1, class Ifc2, class Ifc3, class Ifc4, class Ifc5, class Ifc6 > |
251 | | class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE AggImplInheritanceHelper6 |
252 | | : public BaseClass |
253 | | , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6 |
254 | | { |
255 | | struct cd : public rtl::StaticAggregate< class_data, ImplClassData6 < Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, AggImplInheritanceHelper6<BaseClass, Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6> > > {}; |
256 | | protected: |
257 | | template< typename T1 > |
258 | | explicit AggImplInheritanceHelper6(T1 const & arg1): BaseClass(arg1) {} |
259 | | template< typename T1, typename T2 > |
260 | | AggImplInheritanceHelper6(T1 const & arg1, T2 const & arg2): |
261 | | BaseClass(arg1, arg2) {} |
262 | | template< typename T1, typename T2, typename T3 > |
263 | | AggImplInheritanceHelper6( |
264 | | T1 const & arg1, T2 const & arg2, T3 const & arg3): |
265 | | BaseClass(arg1, arg2, arg3) {} |
266 | | template< typename T1, typename T2, typename T3, typename T4 > |
267 | | AggImplInheritanceHelper6( |
268 | | T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4): |
269 | | BaseClass(arg1, arg2, arg3, arg4) {} |
270 | | template< |
271 | | typename T1, typename T2, typename T3, typename T4, typename T5 > |
272 | | AggImplInheritanceHelper6( |
273 | | T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4, |
274 | | T5 const & arg5): |
275 | | BaseClass(arg1, arg2, arg3, arg4, arg5) {} |
276 | | template< |
277 | | typename T1, typename T2, typename T3, typename T4, typename T5, |
278 | | typename T6 > |
279 | | AggImplInheritanceHelper6( |
280 | | T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4, |
281 | | T5 const & arg5, T6 const & arg6): |
282 | | BaseClass(arg1, arg2, arg3, arg4, arg5, arg6) {} |
283 | | public: |
284 | | AggImplInheritanceHelper6() {} |
285 | | virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE |
286 | | { return BaseClass::queryInterface( rType ); } |
287 | | virtual css::uno::Any SAL_CALL queryAggregation( css::uno::Type const & rType ) SAL_OVERRIDE |
288 | | { |
289 | | css::uno::Any aRet( ImplHelper_queryNoXInterface( rType, cd::get(), this ) ); |
290 | | if (aRet.hasValue()) |
291 | | return aRet; |
292 | | return BaseClass::queryAggregation( rType ); |
293 | | } |
294 | | virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE |
295 | | { BaseClass::acquire(); } |
296 | | virtual void SAL_CALL release() SAL_NOEXCEPT SAL_OVERRIDE |
297 | | { BaseClass::release(); } |
298 | | virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE |
299 | | { return ImplInhHelper_getTypes( cd::get(), BaseClass::getTypes() ); } |
300 | | virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE |
301 | | { return ImplHelper_getImplementationId( cd::get() ); } |
302 | | }; |
303 | | } |
304 | | |
305 | | #endif |
306 | | |
307 | | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |