1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski #ifndef _CPPUHELPER_COMPBASE2_HXX_
24*b1cdbd2cSJim Jagielski #define _CPPUHELPER_COMPBASE2_HXX_
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase2.hxx>
27*b1cdbd2cSJim Jagielski #include <cppuhelper/compbase_ex.hxx>
28*b1cdbd2cSJim Jagielski /*
29*b1cdbd2cSJim Jagielski __DEF_COMPIMPLHELPER_EX( 2 )
30*b1cdbd2cSJim Jagielski */
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski namespace cppu
33*b1cdbd2cSJim Jagielski {
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski // Suppress warnings about hidden functions in case any of the IfcN has
36*b1cdbd2cSJim Jagielski // functions named dispose, addEventListener, or removeEventListener:
37*b1cdbd2cSJim Jagielski #if defined __SUNPRO_CC
38*b1cdbd2cSJim Jagielski #pragma disable_warn
39*b1cdbd2cSJim Jagielski #endif
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski     /** Implementation helper supporting ::com::sun::star::lang::XTypeProvider and
42*b1cdbd2cSJim Jagielski         ::com::sun::star::lang::XComponent.
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski         Upon disposing objects of this class, sub-classes receive a disposing()
45*b1cdbd2cSJim Jagielski         call.  Objects of this class can be held weakly, i.e. by a
46*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::WeakReference.
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski         @attention
49*b1cdbd2cSJim Jagielski         The life-cycle of the passed mutex reference has to be longer than objects of this class.
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski         @derive
52*b1cdbd2cSJim Jagielski         Inherit from this class giving your interface(s) to be implemented as template argument(s).
53*b1cdbd2cSJim Jagielski         Your sub class defines method implementations for these interface(s).
54*b1cdbd2cSJim Jagielski     */
55*b1cdbd2cSJim Jagielski     template< class Ifc1, class Ifc2 >
56*b1cdbd2cSJim Jagielski     class SAL_NO_VTABLE WeakComponentImplHelper2
57*b1cdbd2cSJim Jagielski         : public WeakComponentImplHelperBase
58*b1cdbd2cSJim Jagielski         , public ::com::sun::star::lang::XTypeProvider
59*b1cdbd2cSJim Jagielski         , public Ifc1, public Ifc2
60*b1cdbd2cSJim Jagielski     {
61*b1cdbd2cSJim Jagielski         /** @internal */
62*b1cdbd2cSJim Jagielski         struct cd : public rtl::StaticAggregate< class_data, ImplClassData2 < Ifc1, Ifc2, WeakComponentImplHelper2<Ifc1, Ifc2> > > {};
63*b1cdbd2cSJim Jagielski     public:
WeakComponentImplHelper2(::osl::Mutex & rMutex)64*b1cdbd2cSJim Jagielski         inline WeakComponentImplHelper2( ::osl::Mutex & rMutex ) throw ()
65*b1cdbd2cSJim Jagielski             : WeakComponentImplHelperBase( rMutex )
66*b1cdbd2cSJim Jagielski             {}
queryInterface(::com::sun::star::uno::Type const & rType)67*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException)
68*b1cdbd2cSJim Jagielski             { return WeakComponentImplHelper_query( rType, cd::get(), this, (WeakComponentImplHelperBase *)this ); }
acquire()69*b1cdbd2cSJim Jagielski         virtual void SAL_CALL acquire() throw ()
70*b1cdbd2cSJim Jagielski             { WeakComponentImplHelperBase::acquire(); }
release()71*b1cdbd2cSJim Jagielski         virtual void SAL_CALL release() throw ()
72*b1cdbd2cSJim Jagielski             { WeakComponentImplHelperBase::release(); }
dispose()73*b1cdbd2cSJim Jagielski         virtual void SAL_CALL dispose()throw (::com::sun::star::uno::RuntimeException)
74*b1cdbd2cSJim Jagielski             { WeakComponentImplHelperBase::dispose(); }
addEventListener(const::com::sun::star::uno::Reference<::com::sun::star::lang::XEventListener> & xListener)75*b1cdbd2cSJim Jagielski         virtual void SAL_CALL addEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & xListener)throw (::com::sun::star::uno::RuntimeException)
76*b1cdbd2cSJim Jagielski             { WeakComponentImplHelperBase::addEventListener(xListener); }
removeEventListener(const::com::sun::star::uno::Reference<::com::sun::star::lang::XEventListener> & xListener)77*b1cdbd2cSJim Jagielski         virtual void SAL_CALL removeEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & xListener)throw (::com::sun::star::uno::RuntimeException)
78*b1cdbd2cSJim Jagielski             { WeakComponentImplHelperBase::removeEventListener(xListener); }
getTypes()79*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException)
80*b1cdbd2cSJim Jagielski             { return WeakComponentImplHelper_getTypes( cd::get() ); }
getImplementationId()81*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException)
82*b1cdbd2cSJim Jagielski             { return ImplHelper_getImplementationId( cd::get() ); }
83*b1cdbd2cSJim Jagielski     };
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski #if defined __SUNPRO_CC
86*b1cdbd2cSJim Jagielski #pragma enable_warn
87*b1cdbd2cSJim Jagielski #endif
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski     /** Implementation helper supporting ::com::sun::star::lang::XTypeProvider and
90*b1cdbd2cSJim Jagielski         ::com::sun::star::lang::XComponent.
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski         Upon disposing objects of this class, sub-classes receive a disposing()
93*b1cdbd2cSJim Jagielski         call.  Objects of this class can be held weakly, i.e. by a
94*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::WeakReference.  Object of this class can be
95*b1cdbd2cSJim Jagielski         aggregated, i.e. incoming queryInterface() calls are delegated.
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski         @attention
98*b1cdbd2cSJim Jagielski         The life-cycle of the passed mutex reference has to be longer than objects of this class.
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski         @derive
101*b1cdbd2cSJim Jagielski         Inherit from this class giving your interface(s) to be implemented as template argument(s).
102*b1cdbd2cSJim Jagielski         Your sub class defines method implementations for these interface(s).
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski         @deprecated
105*b1cdbd2cSJim Jagielski     */
106*b1cdbd2cSJim Jagielski     template< class Ifc1, class Ifc2 >
107*b1cdbd2cSJim Jagielski     class SAL_NO_VTABLE WeakAggComponentImplHelper2
108*b1cdbd2cSJim Jagielski         : public WeakAggComponentImplHelperBase
109*b1cdbd2cSJim Jagielski         , public ::com::sun::star::lang::XTypeProvider
110*b1cdbd2cSJim Jagielski         , public Ifc1, public Ifc2
111*b1cdbd2cSJim Jagielski     {
112*b1cdbd2cSJim Jagielski         /** @internal */
113*b1cdbd2cSJim Jagielski         struct cd : public rtl::StaticAggregate< class_data, ImplClassData2 < Ifc1, Ifc2, WeakAggComponentImplHelper2<Ifc1, Ifc2> > > {};
114*b1cdbd2cSJim Jagielski     public:
WeakAggComponentImplHelper2(::osl::Mutex & rMutex)115*b1cdbd2cSJim Jagielski         inline WeakAggComponentImplHelper2( ::osl::Mutex & rMutex ) throw ()
116*b1cdbd2cSJim Jagielski             : WeakAggComponentImplHelperBase( rMutex )
117*b1cdbd2cSJim Jagielski             {}
queryInterface(::com::sun::star::uno::Type const & rType)118*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException)
119*b1cdbd2cSJim Jagielski             { return WeakAggComponentImplHelperBase::queryInterface( rType ); }
queryAggregation(::com::sun::star::uno::Type const & rType)120*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException)
121*b1cdbd2cSJim Jagielski             { return WeakAggComponentImplHelper_queryAgg( rType, cd::get(), this, (WeakAggComponentImplHelperBase *)this ); }
acquire()122*b1cdbd2cSJim Jagielski         virtual void SAL_CALL acquire() throw ()
123*b1cdbd2cSJim Jagielski             { WeakAggComponentImplHelperBase::acquire(); }
release()124*b1cdbd2cSJim Jagielski         virtual void SAL_CALL release() throw ()
125*b1cdbd2cSJim Jagielski             { WeakAggComponentImplHelperBase::release(); }
getTypes()126*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException)
127*b1cdbd2cSJim Jagielski             { return WeakAggComponentImplHelper_getTypes( cd::get() ); }
getImplementationId()128*b1cdbd2cSJim Jagielski         virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException)
129*b1cdbd2cSJim Jagielski             { return ImplHelper_getImplementationId( cd::get() ); }
130*b1cdbd2cSJim Jagielski     };
131*b1cdbd2cSJim Jagielski }
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski #endif
134