Version 7.6.3.2-android, tag libreoffice-7.6.3.2-android
[LibreOffice.git] / include / cppuhelper / implbase9.hxx
blobd5a9b96a134dc54ca6fdec317097d38168949e48
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_IMPLBASE9_HXX
24 #define INCLUDED_CPPUHELPER_IMPLBASE9_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_data9
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[ 9 + 1 ];
45 template< typename Ifc1, typename Ifc2, typename Ifc3, typename Ifc4, typename Ifc5, typename Ifc6, typename Ifc7, typename Ifc8, typename Ifc9, typename Impl >
46 struct SAL_WARN_UNUSED ImplClassData9
48 class_data* operator ()()
50 static class_data9 s_cd =
52 9 +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(css::lang::XTypeProvider)
67 return reinterpret_cast< class_data * >(&s_cd);
71 /// @endcond
73 /** Implementation helper implementing interface css::lang::XTypeProvider
74 and method XInterface::queryInterface(), but no reference counting.
76 @derive
77 Inherit from this class giving your interface(s) to be implemented as template argument(s).
78 Your sub class defines method implementations for these interface(s) including acquire()/
79 release() and delegates incoming queryInterface() calls to this base class.
81 template< class Ifc1, class Ifc2, class Ifc3, class Ifc4, class Ifc5, class Ifc6, class Ifc7, class Ifc8, class Ifc9 >
82 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplHelper9
83 : public css::lang::XTypeProvider
84 , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6, public Ifc7, public Ifc8, public Ifc9
86 struct cd : public rtl::StaticAggregate< class_data, ImplClassData9< Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, ImplHelper9<Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9> > > {};
87 public:
88 #if defined LIBO_INTERNAL_ONLY
89 ImplHelper9() = default;
90 ImplHelper9(ImplHelper9 const &) = default;
91 ImplHelper9(ImplHelper9 &&) = default;
92 ImplHelper9 & operator =(ImplHelper9 const &) = default;
93 ImplHelper9 & operator =(ImplHelper9 &&) = default;
94 #endif
96 virtual css::uno::Any SAL_CALL queryInterface( css::uno::Type const & rType ) SAL_OVERRIDE
97 { return ImplHelper_query( rType, cd::get(), this ); }
98 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
99 { return ImplHelper_getTypes( cd::get() ); }
100 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() SAL_OVERRIDE
101 { return ImplHelper_getImplementationId( cd::get() ); }
103 #if !defined _MSC_VER // public -> protected changes mangled names there
104 protected:
105 #endif
106 ~ImplHelper9() SAL_NOEXCEPT {}
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).
112 @derive
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, class Ifc8, class Ifc9 >
117 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakImplHelper9
118 : public OWeakObject
119 , public css::lang::XTypeProvider
120 , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6, public Ifc7, public Ifc8, public Ifc9
122 struct cd : public rtl::StaticAggregate< class_data, ImplClassData9< Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, WeakImplHelper9<Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9> > > {};
123 public:
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() SAL_NOEXCEPT SAL_OVERRIDE
127 { OWeakObject::acquire(); }
128 virtual void SAL_CALL release() SAL_NOEXCEPT 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.
144 @derive
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, class Ifc8, class Ifc9 >
149 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakAggImplHelper9
150 : public OWeakAggObject
151 , public css::lang::XTypeProvider
152 , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6, public Ifc7, public Ifc8, public Ifc9
154 struct cd : public rtl::StaticAggregate< class_data, ImplClassData9< Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, WeakAggImplHelper9<Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9> > > {};
155 public:
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() SAL_NOEXCEPT SAL_OVERRIDE
161 { OWeakAggObject::acquire(); }
162 virtual void SAL_CALL release() SAL_NOEXCEPT 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 inheriting 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.
175 @attention
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.
181 @derive
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, class Ifc8, class Ifc9 >
186 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplInheritanceHelper9
187 : public BaseClass
188 , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6, public Ifc7, public Ifc8, public Ifc9
190 struct cd : public rtl::StaticAggregate< class_data, ImplClassData9< Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, ImplInheritanceHelper9<BaseClass, Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9> > > {};
191 protected:
192 template< typename T1 >
193 explicit ImplInheritanceHelper9(T1 const & arg1): BaseClass(arg1) {}
194 template< typename T1, typename T2 >
195 ImplInheritanceHelper9(T1 const & arg1, T2 const & arg2):
196 BaseClass(arg1, arg2) {}
197 template< typename T1, typename T2, typename T3 >
198 ImplInheritanceHelper9(
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 ImplInheritanceHelper9(
203 T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4):
204 BaseClass(arg1, arg2, arg3, arg4) {}
205 template<
206 typename T1, typename T2, typename T3, typename T4, typename T5 >
207 ImplInheritanceHelper9(
208 T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4,
209 T5 const & arg5):
210 BaseClass(arg1, arg2, arg3, arg4, arg5) {}
211 template<
212 typename T1, typename T2, typename T3, typename T4, typename T5,
213 typename T6 >
214 ImplInheritanceHelper9(
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) {}
218 public:
219 ImplInheritanceHelper9() {}
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 ) );
223 if (aRet.hasValue())
224 return aRet;
225 return BaseClass::queryInterface( rType );
227 virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE
228 { BaseClass::acquire(); }
229 virtual void SAL_CALL release() SAL_NOEXCEPT 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 inheriting 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.
242 @attention
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.
249 @derive
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, class Ifc8, class Ifc9 >
254 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE AggImplInheritanceHelper9
255 : public BaseClass
256 , public Ifc1, public Ifc2, public Ifc3, public Ifc4, public Ifc5, public Ifc6, public Ifc7, public Ifc8, public Ifc9
258 struct cd : public rtl::StaticAggregate< class_data, ImplClassData9< Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, AggImplInheritanceHelper9<BaseClass, Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9> > > {};
259 protected:
260 template< typename T1 >
261 explicit AggImplInheritanceHelper9(T1 const & arg1): BaseClass(arg1) {}
262 template< typename T1, typename T2 >
263 AggImplInheritanceHelper9(T1 const & arg1, T2 const & arg2):
264 BaseClass(arg1, arg2) {}
265 template< typename T1, typename T2, typename T3 >
266 AggImplInheritanceHelper9(
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 AggImplInheritanceHelper9(
271 T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4):
272 BaseClass(arg1, arg2, arg3, arg4) {}
273 template<
274 typename T1, typename T2, typename T3, typename T4, typename T5 >
275 AggImplInheritanceHelper9(
276 T1 const & arg1, T2 const & arg2, T3 const & arg3, T4 const & arg4,
277 T5 const & arg5):
278 BaseClass(arg1, arg2, arg3, arg4, arg5) {}
279 template<
280 typename T1, typename T2, typename T3, typename T4, typename T5,
281 typename T6 >
282 AggImplInheritanceHelper9(
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) {}
286 public:
287 AggImplInheritanceHelper9() {}
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 ) );
293 if (aRet.hasValue())
294 return aRet;
295 return BaseClass::queryAggregation( rType );
297 virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE
298 { BaseClass::acquire(); }
299 virtual void SAL_CALL release() SAL_NOEXCEPT 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() ); }
308 #endif
310 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */