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_IMPLBASE3_HXX
20 #define INCLUDED_CPPUHELPER_IMPLBASE3_HXX
22 #include <cppuhelper/implbase_ex.hxx>
23 #include <rtl/instance.hxx>
32 sal_Bool m_storedTypeRefs
;
35 type_entry m_typeEntries
[ 3 + 1 ];
38 template< typename Ifc1
, typename Ifc2
, typename Ifc3
, typename Impl
> struct ImplClassData3
40 class_data
* operator ()()
42 static class_data3 s_cd
=
44 3 +1, sal_False
, sal_False
,
45 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
47 CPPUHELPER_DETAIL_TYPEENTRY(Ifc1
),
48 CPPUHELPER_DETAIL_TYPEENTRY(Ifc2
),
49 CPPUHELPER_DETAIL_TYPEENTRY(Ifc3
),
50 CPPUHELPER_DETAIL_TYPEENTRY(com::sun::star::lang::XTypeProvider
)
53 return reinterpret_cast< class_data
* >(&s_cd
);
59 /** Implementation helper implementing interface com::sun::star::lang::XTypeProvider
60 and method XInterface::queryInterface(), but no reference counting.
63 Inherit from this class giving your interface(s) to be implemented as template argument(s).
64 Your sub class defines method implementations for these interface(s) including acquire()/
65 release() and delegates incoming queryInterface() calls to this base class.
67 template< class Ifc1
, class Ifc2
, class Ifc3
>
68 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplHelper3
69 : public com::sun::star::lang::XTypeProvider
70 , public Ifc1
, public Ifc2
, public Ifc3
72 struct cd
: public rtl::StaticAggregate
< class_data
, ImplClassData3
< Ifc1
, Ifc2
, Ifc3
, ImplHelper3
<Ifc1
, Ifc2
, Ifc3
> > > {};
74 virtual com::sun::star::uno::Any SAL_CALL
queryInterface( com::sun::star::uno::Type
const & rType
) throw (com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
75 { return ImplHelper_query( rType
, cd::get(), this ); }
76 virtual com::sun::star::uno::Sequence
< com::sun::star::uno::Type
> SAL_CALL
getTypes() throw (com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
77 { return ImplHelper_getTypes( cd::get() ); }
78 virtual com::sun::star::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId() throw (com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
79 { return ImplHelper_getImplementationId( cd::get() ); }
81 #if !defined _MSC_VER // public -> protected changes mangled names there
84 ~ImplHelper3() throw () {}
86 /** Implementation helper implementing interfaces com::sun::star::lang::XTypeProvider and
87 com::sun::star::uno::XInterface which supports weak mechanism to be held weakly
88 (supporting com::sun::star::uno::XWeak through ::cppu::OWeakObject).
91 Inherit from this class giving your interface(s) to be implemented as template argument(s).
92 Your sub class defines method implementations for these interface(s).
94 template< class Ifc1
, class Ifc2
, class Ifc3
>
95 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakImplHelper3
97 , public com::sun::star::lang::XTypeProvider
98 , public Ifc1
, public Ifc2
, public Ifc3
100 struct cd
: public rtl::StaticAggregate
< class_data
, ImplClassData3
< Ifc1
, Ifc2
, Ifc3
, WeakImplHelper3
<Ifc1
, Ifc2
, Ifc3
> > > {};
102 virtual com::sun::star::uno::Any SAL_CALL
queryInterface( com::sun::star::uno::Type
const & rType
) throw (com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
103 { return WeakImplHelper_query( rType
, cd::get(), this, static_cast<OWeakObject
*>(this) ); }
104 virtual void SAL_CALL
acquire() throw () SAL_OVERRIDE
105 { OWeakObject::acquire(); }
106 virtual void SAL_CALL
release() throw () SAL_OVERRIDE
107 { OWeakObject::release(); }
108 virtual com::sun::star::uno::Sequence
< com::sun::star::uno::Type
> SAL_CALL
getTypes() throw (com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
109 { return WeakImplHelper_getTypes( cd::get() ); }
110 virtual com::sun::star::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId() throw (com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
111 { return ImplHelper_getImplementationId( cd::get() ); }
113 /** Implementation helper implementing interfaces com::sun::star::lang::XTypeProvider and
114 com::sun::star::uno::XInterface which supports weak mechanism to be held weakly
115 (supporting com::sun::star::uno::XWeak through ::cppu::OWeakAggObject).
116 In addition, it supports also aggregation meaning object of this class can be aggregated
117 (com::sun::star::uno::XAggregation through ::cppu::OWeakAggObject).
118 If a delegator is set (this object is aggregated), then incoming queryInterface()
119 calls are delegated to the delegator object. If the delegator does not support the
120 demanded interface, it calls queryAggregation() on its aggregated objects.
123 Inherit from this class giving your interface(s) to be implemented as template argument(s).
124 Your sub class defines method implementations for these interface(s).
126 template< class Ifc1
, class Ifc2
, class Ifc3
>
127 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakAggImplHelper3
128 : public OWeakAggObject
129 , public com::sun::star::lang::XTypeProvider
130 , public Ifc1
, public Ifc2
, public Ifc3
132 struct cd
: public rtl::StaticAggregate
< class_data
, ImplClassData3
< Ifc1
, Ifc2
, Ifc3
, WeakAggImplHelper3
<Ifc1
, Ifc2
, Ifc3
> > > {};
134 virtual com::sun::star::uno::Any SAL_CALL
queryInterface( com::sun::star::uno::Type
const & rType
) throw (com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
135 { return OWeakAggObject::queryInterface( rType
); }
136 virtual com::sun::star::uno::Any SAL_CALL
queryAggregation( com::sun::star::uno::Type
const & rType
) throw (com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
137 { return WeakAggImplHelper_queryAgg( rType
, cd::get(), this, static_cast<OWeakAggObject
*>(this) ); }
138 virtual void SAL_CALL
acquire() throw () SAL_OVERRIDE
139 { OWeakAggObject::acquire(); }
140 virtual void SAL_CALL
release() throw () SAL_OVERRIDE
141 { OWeakAggObject::release(); }
142 virtual com::sun::star::uno::Sequence
< com::sun::star::uno::Type
> SAL_CALL
getTypes() throw (com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
143 { return WeakAggImplHelper_getTypes( cd::get() ); }
144 virtual com::sun::star::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId() throw (com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
145 { return ImplHelper_getImplementationId( cd::get() ); }
147 /** Implementation helper implementing interfaces com::sun::star::lang::XTypeProvider and
148 com::sun::star::uno::XInterface inherting from a BaseClass.
149 All acquire() and release() calls are delegated to the BaseClass. Upon queryInterface(),
150 if a demanded interface is not supported by this class directly, the request is
151 delegated to the BaseClass.
154 The BaseClass has to be complete in a sense, that com::sun::star::uno::XInterface
155 and com::sun::star::lang::XTypeProvider are implemented properly. The
156 BaseClass must have at least one ctor that can be called with six or
157 fewer arguments, of which none is of non-const reference type.
158 also has to have a default ctor.
161 Inherit from this class giving your additional interface(s) to be implemented as
162 template argument(s). Your sub class defines method implementations for these interface(s).
164 template< class BaseClass
, class Ifc1
, class Ifc2
, class Ifc3
>
165 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplInheritanceHelper3
167 , public Ifc1
, public Ifc2
, public Ifc3
169 struct cd
: public rtl::StaticAggregate
< class_data
, ImplClassData3
< Ifc1
, Ifc2
, Ifc3
, ImplInheritanceHelper3
<BaseClass
, Ifc1
, Ifc2
, Ifc3
> > > {};
171 template< typename T1
>
172 explicit ImplInheritanceHelper3(T1
const & arg1
): BaseClass(arg1
) {}
173 template< typename T1
, typename T2
>
174 ImplInheritanceHelper3(T1
const & arg1
, T2
const & arg2
):
175 BaseClass(arg1
, arg2
) {}
176 template< typename T1
, typename T2
, typename T3
>
177 ImplInheritanceHelper3(
178 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
):
179 BaseClass(arg1
, arg2
, arg3
) {}
180 template< typename T1
, typename T2
, typename T3
, typename T4
>
181 ImplInheritanceHelper3(
182 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
, T4
const & arg4
):
183 BaseClass(arg1
, arg2
, arg3
, arg4
) {}
185 typename T1
, typename T2
, typename T3
, typename T4
, typename T5
>
186 ImplInheritanceHelper3(
187 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
, T4
const & arg4
,
189 BaseClass(arg1
, arg2
, arg3
, arg4
, arg5
) {}
191 typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
193 ImplInheritanceHelper3(
194 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
, T4
const & arg4
,
195 T5
const & arg5
, T6
const & arg6
):
196 BaseClass(arg1
, arg2
, arg3
, arg4
, arg5
, arg6
) {}
198 ImplInheritanceHelper3() {}
199 virtual com::sun::star::uno::Any SAL_CALL
queryInterface( com::sun::star::uno::Type
const & rType
) throw (com::sun::star::uno::RuntimeException
) SAL_OVERRIDE
201 com::sun::star::uno::Any
aRet( ImplHelper_queryNoXInterface( rType
, cd::get(), this ) );
204 return BaseClass::queryInterface( rType
);
206 virtual void SAL_CALL
acquire() throw () SAL_OVERRIDE
207 { BaseClass::acquire(); }
208 virtual void SAL_CALL
release() throw () SAL_OVERRIDE
209 { BaseClass::release(); }
210 virtual com::sun::star::uno::Sequence
< com::sun::star::uno::Type
> SAL_CALL
getTypes() throw (com::sun::star::uno::RuntimeException
) SAL_OVERRIDE
211 { return ImplInhHelper_getTypes( cd::get(), BaseClass::getTypes() ); }
212 virtual com::sun::star::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId() throw (com::sun::star::uno::RuntimeException
) SAL_OVERRIDE
213 { return ImplHelper_getImplementationId( cd::get() ); }
215 /** Implementation helper implementing interfaces com::sun::star::lang::XTypeProvider and
216 com::sun::star::uno::XInterface inherting from a BaseClass.
217 All acquire(), release() and queryInterface() calls are delegated to the BaseClass.
218 Upon queryAggregation(), if a demanded interface is not supported by this class directly,
219 the request is delegated to the BaseClass.
222 The BaseClass has to be complete in a sense, that com::sun::star::uno::XInterface,
223 com::sun::star::uno::XAggregation and com::sun::star::lang::XTypeProvider
224 are implemented properly. The BaseClass must have at least one ctor
225 that can be called with six or fewer arguments, of which none is of
226 non-const reference type.
229 Inherit from this class giving your additional interface(s) to be implemented as
230 template argument(s). Your sub class defines method implementations for these interface(s).
232 template< class BaseClass
, class Ifc1
, class Ifc2
, class Ifc3
>
233 class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE AggImplInheritanceHelper3
235 , public Ifc1
, public Ifc2
, public Ifc3
237 struct cd
: public rtl::StaticAggregate
< class_data
, ImplClassData3
< Ifc1
, Ifc2
, Ifc3
, AggImplInheritanceHelper3
<BaseClass
, Ifc1
, Ifc2
, Ifc3
> > > {};
239 template< typename T1
>
240 explicit AggImplInheritanceHelper3(T1
const & arg1
): BaseClass(arg1
) {}
241 template< typename T1
, typename T2
>
242 AggImplInheritanceHelper3(T1
const & arg1
, T2
const & arg2
):
243 BaseClass(arg1
, arg2
) {}
244 template< typename T1
, typename T2
, typename T3
>
245 AggImplInheritanceHelper3(
246 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
):
247 BaseClass(arg1
, arg2
, arg3
) {}
248 template< typename T1
, typename T2
, typename T3
, typename T4
>
249 AggImplInheritanceHelper3(
250 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
, T4
const & arg4
):
251 BaseClass(arg1
, arg2
, arg3
, arg4
) {}
253 typename T1
, typename T2
, typename T3
, typename T4
, typename T5
>
254 AggImplInheritanceHelper3(
255 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
, T4
const & arg4
,
257 BaseClass(arg1
, arg2
, arg3
, arg4
, arg5
) {}
259 typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
261 AggImplInheritanceHelper3(
262 T1
const & arg1
, T2
const & arg2
, T3
const & arg3
, T4
const & arg4
,
263 T5
const & arg5
, T6
const & arg6
):
264 BaseClass(arg1
, arg2
, arg3
, arg4
, arg5
, arg6
) {}
266 AggImplInheritanceHelper3() {}
267 virtual com::sun::star::uno::Any SAL_CALL
queryInterface( com::sun::star::uno::Type
const & rType
) throw (com::sun::star::uno::RuntimeException
) SAL_OVERRIDE
268 { return BaseClass::queryInterface( rType
); }
269 virtual com::sun::star::uno::Any SAL_CALL
queryAggregation( com::sun::star::uno::Type
const & rType
) throw (com::sun::star::uno::RuntimeException
) SAL_OVERRIDE
271 com::sun::star::uno::Any
aRet( ImplHelper_queryNoXInterface( rType
, cd::get(), this ) );
274 return BaseClass::queryAggregation( rType
);
276 virtual void SAL_CALL
acquire() throw () SAL_OVERRIDE
277 { BaseClass::acquire(); }
278 virtual void SAL_CALL
release() throw () SAL_OVERRIDE
279 { BaseClass::release(); }
280 virtual com::sun::star::uno::Sequence
< com::sun::star::uno::Type
> SAL_CALL
getTypes() throw (com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
281 { return ImplInhHelper_getTypes( cd::get(), BaseClass::getTypes() ); }
282 virtual com::sun::star::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId() throw (com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
283 { return ImplHelper_getImplementationId( cd::get() ); }
289 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */