bump product version to 6.3.0.0.beta1
[LibreOffice.git] / include / cppuhelper / implbase7.hxx
blob0d1e12a91117838f6e2c145b70b92b8f088bbfbf
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 .
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"
28 namespace cppu
30 /// @cond INTERNAL
32 struct class_data7
34 sal_Int16 m_nTypes;
35 sal_Bool m_storedTypeRefs;
36 sal_Bool m_storedId;
37 sal_Int8 m_id[ 16 ];
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 =
48 7 +1, false, false,
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);
65 /// @endcond
67 /** Implementation helper implementing interface css::lang::XTypeProvider
68 and method XInterface::queryInterface(), but no reference counting.
70 @derive
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> > > {};
81 public:
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;
88 #endif
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
98 protected:
99 #elif defined __clang__
100 #pragma clang diagnostic push
101 #pragma clang diagnostic ignored "-Wnon-virtual-dtor"
102 #endif
103 ~ImplHelper7() throw () {}
104 #if defined _MSC_VER && defined __clang__
105 #pragma clang diagnostic pop
106 #endif
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 >
117 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakImplHelper7
118 : public OWeakObject
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> > > {};
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() 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.
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 >
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> > > {};
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() 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.
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 >
186 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplInheritanceHelper7
187 : public BaseClass
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> > > {};
191 protected:
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) {}
205 template<
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,
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 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) {}
218 public:
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 ) );
223 if (aRet.hasValue())
224 return aRet;
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.
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 >
254 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE AggImplInheritanceHelper7
255 : public BaseClass
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> > > {};
259 protected:
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) {}
273 template<
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,
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 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) {}
286 public:
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 ) );
293 if (aRet.hasValue())
294 return aRet;
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() ); }
308 #endif
310 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */