make ValueTransfer easier to understand
[LibreOffice.git] / include / cppuhelper / implbase11.hxx
blob02fad9040b3a098ad4a906656b7551693a1514f1
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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 .
21 * This file is part of LibreOffice published API.
23 #ifndef INCLUDED_CPPUHELPER_IMPLBASE11_HXX
24 #define INCLUDED_CPPUHELPER_IMPLBASE11_HXX
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"
32 namespace cppu
34 /// @cond INTERNAL
36 struct class_data11
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[ 11 + 1 ];
45 template< typename Ifc1, typename Ifc2, typename Ifc3, typename Ifc4, typename Ifc5, typename Ifc6, typename Ifc7, typename Ifc8, typename Ifc9, typename Ifc10, typename Ifc11, typename Impl >
46 struct SAL_WARN_UNUSED ImplClassData11
48 class_data* operator ()()
50 static class_data11 s_cd =
52 11 +1, false, false,
53 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
55 CPPUHELPER_DETAIL_TYPEENTRY(Ifc1),
56 CPPUHELPER_DETAIL_TYPEENTRY(Ifc2),
57 CPPUHELPER_DETAIL_TYPEENTRY(Ifc3),
58 CPPUHELPER_DETAIL_TYPEENTRY(Ifc4),
59 CPPUHELPER_DETAIL_TYPEENTRY(Ifc5),
60 CPPUHELPER_DETAIL_TYPEENTRY(Ifc6),
61 CPPUHELPER_DETAIL_TYPEENTRY(Ifc7),
62 CPPUHELPER_DETAIL_TYPEENTRY(Ifc8),
63 CPPUHELPER_DETAIL_TYPEENTRY(Ifc9),
64 CPPUHELPER_DETAIL_TYPEENTRY(Ifc10),
65 CPPUHELPER_DETAIL_TYPEENTRY(Ifc11),
66 CPPUHELPER_DETAIL_TYPEENTRY(css::lang::XTypeProvider)
69 return reinterpret_cast< class_data * >(&s_cd);
73 /// @endcond
75 /** Implementation helper implementing interface css::lang::XTypeProvider
76 and method XInterface::queryInterface(), but no reference counting.
78 @derive
79 Inherit from this class giving your interface(s) to be implemented as template argument(s).
80 Your sub class defines method implementations for these interface(s) including acquire()/
81 release() and delegates incoming queryInterface() calls to this base class.
83 template< class Ifc1, class Ifc2, class Ifc3, class Ifc4, class Ifc5, class Ifc6, class Ifc7, class Ifc8, class Ifc9, class Ifc10, class Ifc11 >
84 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplHelper11
85 : public css::lang::XTypeProvider
86 , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6, public Ifc7, public Ifc8, public Ifc9, public Ifc10, public Ifc11
88 struct cd : public rtl::StaticAggregate< class_data, ImplClassData11< Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, Ifc10, Ifc11, ImplHelper11<Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, Ifc10, Ifc11> > > {};
89 public:
90 #if defined LIBO_INTERNAL_ONLY
91 ImplHelper11() = default;
92 ImplHelper11(ImplHelper11 const &) = default;
93 ImplHelper11(ImplHelper11 &&) = default;
94 ImplHelper11 & operator =(ImplHelper11 const &) = default;
95 ImplHelper11 & operator =(ImplHelper11 &&) = default;
96 #endif
98 virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE
99 { return ImplHelper_query( rType, cd::get(), this ); }
100 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
101 { return ImplHelper_getTypes( cd::get() ); }
102 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE
103 { return ImplHelper_getImplementationId( cd::get() ); }
105 #if !defined _MSC_VER // public -> protected changes mangled names there
106 protected:
107 #elif defined __clang__
108 #pragma clang diagnostic push
109 #pragma clang diagnostic ignored "-Wnon-virtual-dtor"
110 #endif
111 ~ImplHelper11() SAL_NOEXCEPT {}
112 #if defined _MSC_VER && defined __clang__
113 #pragma clang diagnostic pop
114 #endif
116 /** Implementation helper implementing interfaces css::lang::XTypeProvider and
117 css::uno::XInterface which supports weak mechanism to be held weakly
118 (supporting css::uno::XWeak through ::cppu::OWeakObject).
120 @derive
121 Inherit from this class giving your interface(s) to be implemented as template argument(s).
122 Your sub class defines method implementations for these interface(s).
124 template< class Ifc1, class Ifc2, class Ifc3, class Ifc4, class Ifc5, class Ifc6, class Ifc7, class Ifc8, class Ifc9, class Ifc10, class Ifc11 >
125 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakImplHelper11
126 : public OWeakObject
127 , public css::lang::XTypeProvider
128 , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6, public Ifc7, public Ifc8, public Ifc9, public Ifc10, public Ifc11
130 struct cd : public rtl::StaticAggregate< class_data, ImplClassData11< Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, Ifc10, Ifc11, WeakImplHelper11<Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, Ifc10, Ifc11> > > {};
131 public:
132 virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE
133 { return WeakImplHelper_query( rType, cd::get(), this, static_cast<OWeakObject *>(this) ); }
134 virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE
135 { OWeakObject::acquire(); }
136 virtual void SAL_CALL release() SAL_NOEXCEPT SAL_OVERRIDE
137 { OWeakObject::release(); }
138 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
139 { return WeakImplHelper_getTypes( cd::get() ); }
140 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE
141 { return ImplHelper_getImplementationId( cd::get() ); }
143 /** Implementation helper implementing interfaces css::lang::XTypeProvider and
144 css::uno::XInterface which supports weak mechanism to be held weakly
145 (supporting css::uno::XWeak through ::cppu::OWeakAggObject).
146 In addition, it supports also aggregation meaning object of this class can be aggregated
147 (css::uno::XAggregation through ::cppu::OWeakAggObject).
148 If a delegator is set (this object is aggregated), then incoming queryInterface()
149 calls are delegated to the delegator object. If the delegator does not support the
150 demanded interface, it calls queryAggregation() on its aggregated objects.
152 @derive
153 Inherit from this class giving your interface(s) to be implemented as template argument(s).
154 Your sub class defines method implementations for these interface(s).
156 template< class Ifc1, class Ifc2, class Ifc3, class Ifc4, class Ifc5, class Ifc6, class Ifc7, class Ifc8, class Ifc9, class Ifc10, class Ifc11 >
157 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakAggImplHelper11
158 : public OWeakAggObject
159 , public css::lang::XTypeProvider
160 , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6, public Ifc7, public Ifc8, public Ifc9, public Ifc10, public Ifc11
162 struct cd : public rtl::StaticAggregate< class_data, ImplClassData11< Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, Ifc10, Ifc11, WeakAggImplHelper11<Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, Ifc10, Ifc11> > > {};
163 public:
164 virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE
165 { return OWeakAggObject::queryInterface( rType ); }
166 virtual css::uno::Any SAL_CALL queryAggregation( css::uno::Type const & rType ) SAL_OVERRIDE
167 { return WeakAggImplHelper_queryAgg( rType, cd::get(), this, static_cast<OWeakAggObject *>(this) ); }
168 virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE
169 { OWeakAggObject::acquire(); }
170 virtual void SAL_CALL release() SAL_NOEXCEPT SAL_OVERRIDE
171 { OWeakAggObject::release(); }
172 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
173 { return WeakAggImplHelper_getTypes( cd::get() ); }
174 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE
175 { return ImplHelper_getImplementationId( cd::get() ); }
177 /** Implementation helper implementing interfaces css::lang::XTypeProvider and
178 css::uno::XInterface inheriting from a BaseClass.
179 All acquire() and release() calls are delegated to the BaseClass. Upon queryInterface(),
180 if a demanded interface is not supported by this class directly, the request is
181 delegated to the BaseClass.
183 @attention
184 The BaseClass has to be complete in a sense, that css::uno::XInterface
185 and css::lang::XTypeProvider are implemented properly. The
186 BaseClass must have at least one ctor that can be called with six or
187 fewer arguments, of which none is of non-const reference type.
189 @derive
190 Inherit from this class giving your additional interface(s) to be implemented as
191 template argument(s). Your sub class defines method implementations for these interface(s).
193 template< class BaseClass, class Ifc1, class Ifc2, class Ifc3, class Ifc4, class Ifc5, class Ifc6, class Ifc7, class Ifc8, class Ifc9, class Ifc10, class Ifc11 >
194 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplInheritanceHelper11
195 : public BaseClass
196 , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6, public Ifc7, public Ifc8, public Ifc9, public Ifc10, public Ifc11
198 struct cd : public rtl::StaticAggregate< class_data, ImplClassData11< Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, Ifc10, Ifc11, ImplInheritanceHelper11<BaseClass, Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, Ifc10, Ifc11> > > {};
199 protected:
200 template< typename T1 >
201 explicit ImplInheritanceHelper11(T1 const & arg1): BaseClass(arg1) {}
202 template< typename T1, typename T2 >
203 ImplInheritanceHelper11(T1 const & arg1, T2 const & arg2):
204 BaseClass(arg1, arg2) {}
205 template< typename T1, typename T2, typename T3 >
206 ImplInheritanceHelper11(
207 T1 const & arg1, T2 const & arg2, T3 const & arg3):
208 BaseClass(arg1, arg2, arg3) {}
209 template< typename T1, typename T2, typename T3, typename T4 >
210 ImplInheritanceHelper11(
211 T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4):
212 BaseClass(arg1, arg2, arg3, arg4) {}
213 template<
214 typename T1, typename T2, typename T3, typename T4, typename T5 >
215 ImplInheritanceHelper11(
216 T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4,
217 T5 const & arg5):
218 BaseClass(arg1, arg2, arg3, arg4, arg5) {}
219 template<
220 typename T1, typename T2, typename T3, typename T4, typename T5,
221 typename T6 >
222 ImplInheritanceHelper11(
223 T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4,
224 T5 const & arg5, T6 const & arg6):
225 BaseClass(arg1, arg2, arg3, arg4, arg5, arg6) {}
226 public:
227 ImplInheritanceHelper11() {}
228 virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE
230 css::uno::Any aRet( ImplHelper_queryNoXInterface( rType, cd::get(), this ) );
231 if (aRet.hasValue())
232 return aRet;
233 return BaseClass::queryInterface( rType );
235 virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE
236 { BaseClass::acquire(); }
237 virtual void SAL_CALL release() SAL_NOEXCEPT SAL_OVERRIDE
238 { BaseClass::release(); }
239 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
240 { return ImplInhHelper_getTypes( cd::get(), BaseClass::getTypes() ); }
241 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE
242 { return ImplHelper_getImplementationId( cd::get() ); }
244 /** Implementation helper implementing interfaces css::lang::XTypeProvider and
245 css::uno::XInterface inheriting from a BaseClass.
246 All acquire(), release() and queryInterface() calls are delegated to the BaseClass.
247 Upon queryAggregation(), if a demanded interface is not supported by this class directly,
248 the request is delegated to the BaseClass.
250 @attention
251 The BaseClass has to be complete in a sense, that css::uno::XInterface,
252 css::uno::XAggregation and css::lang::XTypeProvider
253 are implemented properly. The BaseClass must have at least one ctor
254 that can be called with six or fewer arguments, of which none is of
255 non-const reference type.
257 @derive
258 Inherit from this class giving your additional interface(s) to be implemented as
259 template argument(s). Your sub class defines method implementations for these interface(s).
261 template< class BaseClass, class Ifc1, class Ifc2, class Ifc3, class Ifc4, class Ifc5, class Ifc6, class Ifc7, class Ifc8, class Ifc9, class Ifc10, class Ifc11 >
262 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE AggImplInheritanceHelper11
263 : public BaseClass
264 , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6, public Ifc7, public Ifc8, public Ifc9, public Ifc10, public Ifc11
266 struct cd : public rtl::StaticAggregate< class_data, ImplClassData11< Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, Ifc10, Ifc11, AggImplInheritanceHelper11<BaseClass, Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, Ifc10, Ifc11> > > {};
267 protected:
268 template< typename T1 >
269 explicit AggImplInheritanceHelper11(T1 const & arg1): BaseClass(arg1) {}
270 template< typename T1, typename T2 >
271 AggImplInheritanceHelper11(T1 const & arg1, T2 const & arg2):
272 BaseClass(arg1, arg2) {}
273 template< typename T1, typename T2, typename T3 >
274 AggImplInheritanceHelper11(
275 T1 const & arg1, T2 const & arg2, T3 const & arg3):
276 BaseClass(arg1, arg2, arg3) {}
277 template< typename T1, typename T2, typename T3, typename T4 >
278 AggImplInheritanceHelper11(
279 T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4):
280 BaseClass(arg1, arg2, arg3, arg4) {}
281 template<
282 typename T1, typename T2, typename T3, typename T4, typename T5 >
283 AggImplInheritanceHelper11(
284 T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4,
285 T5 const & arg5):
286 BaseClass(arg1, arg2, arg3, arg4, arg5) {}
287 template<
288 typename T1, typename T2, typename T3, typename T4, typename T5,
289 typename T6 >
290 AggImplInheritanceHelper11(
291 T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4,
292 T5 const & arg5, T6 const & arg6):
293 BaseClass(arg1, arg2, arg3, arg4, arg5, arg6) {}
294 public:
295 AggImplInheritanceHelper11() {}
296 virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE
297 { return BaseClass::queryInterface( rType ); }
298 virtual css::uno::Any SAL_CALL queryAggregation( css::uno::Type const & rType ) SAL_OVERRIDE
300 css::uno::Any aRet( ImplHelper_queryNoXInterface( rType, cd::get(), this ) );
301 if (aRet.hasValue())
302 return aRet;
303 return BaseClass::queryAggregation( rType );
305 virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE
306 { BaseClass::acquire(); }
307 virtual void SAL_CALL release() SAL_NOEXCEPT SAL_OVERRIDE
308 { BaseClass::release(); }
309 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
310 { return ImplInhHelper_getTypes( cd::get(), BaseClass::getTypes() ); }
311 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE
312 { return ImplHelper_getImplementationId( cd::get() ); }
316 #endif
318 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */