xref: /AOO41X/main/connectivity/source/inc/OSubComponent.hxx (revision caf5cd79edad04a48dcaf209068b3b89eae4622e)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef _CONNECTIVITY_OSUBCOMPONENT_HXX_
24 #define _CONNECTIVITY_OSUBCOMPONENT_HXX_
25 
26 #include <cppuhelper/weak.hxx>
27 #include <cppuhelper/interfacecontainer.h>
28 #include "connectivity/dbtoolsdllapi.hxx"
29 
30 namespace com
31 {
32     namespace sun
33     {
34         namespace star
35         {
36             namespace lang
37             {
38                 class XComponent;
39             }
40         }
41     }
42 }
43 namespace connectivity
44 {
45     OOO_DLLPUBLIC_DBTOOLS
46     void release(oslInterlockedCount& _refCount,
47                  ::cppu::OBroadcastHelper& rBHelper,
48                  ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface,
49                  ::com::sun::star::lang::XComponent* _pObject);
50     //************************************************************
51     // OSubComponent
52     //************************************************************
53     template <class SELF, class WEAK> class OSubComponent
54     {
55     protected:
56         // the parent must support the tunnel implementation
57         ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > m_xParent;
58         SELF*   m_pDerivedImplementation;
59 
60     public:
OSubComponent(const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & _xParent,SELF * _pDerivedImplementation)61         OSubComponent(
62                 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xParent,
63                 SELF* _pDerivedImplementation)
64             :m_xParent(_xParent)
65             ,m_pDerivedImplementation(_pDerivedImplementation)
66         {
67         }
68 
69     protected:
dispose_ChildImpl()70         void dispose_ChildImpl()
71         {
72             // avoid ambiguity
73             ::osl::MutexGuard aGuard( m_pDerivedImplementation->WEAK::rBHelper.rMutex );
74         m_xParent.clear();
75         }
relase_ChildImpl()76         void relase_ChildImpl()
77         {
78             ::connectivity::release(m_pDerivedImplementation->m_refCount,
79                                     m_pDerivedImplementation->WEAK::rBHelper,
80                                     m_xParent,
81                                     m_pDerivedImplementation);
82 
83             m_pDerivedImplementation->WEAK::release();
84         }
85     };
86 }
87 #endif // _CONNECTIVITY_OSUBCOMPONENT_HXX_
88 
89