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
24 #if ! defined INCLUDED_UNO_DISPATCHER_HXX
25 #define INCLUDED_UNO_DISPATCHER_HXX
26
27 #include "uno/dispatcher.h"
28
29
30 namespace com
31 {
32 namespace sun
33 {
34 namespace star
35 {
36 namespace uno
37 {
38
39 /** C++ holder reference for binary C uno_Interface. Not for public use, may be
40 subject to changes.
41
42 @see uno_Interface
43 @internal
44 not for public use!
45 */
46 class UnoInterfaceReference
47 {
48 public:
49 uno_Interface * m_pUnoI;
50
is() const51 inline bool is() const
52 { return m_pUnoI != 0; }
53
54 inline ~UnoInterfaceReference();
55 inline UnoInterfaceReference();
56 inline UnoInterfaceReference( uno_Interface * pUnoI, __sal_NoAcquire );
57 inline UnoInterfaceReference( uno_Interface * pUnoI );
58 inline UnoInterfaceReference( UnoInterfaceReference const & ref );
59
get() const60 inline uno_Interface * get() const
61 { return m_pUnoI; }
62
63 inline UnoInterfaceReference & set(
64 uno_Interface * pUnoI );
65 inline UnoInterfaceReference & set(
66 uno_Interface * pUnoI, __sal_NoAcquire );
67 inline void clear();
68
operator =(UnoInterfaceReference const & ref)69 inline UnoInterfaceReference & operator = (
70 UnoInterfaceReference const & ref )
71 { return set( ref.m_pUnoI ); }
operator =(uno_Interface * pUnoI)72 inline UnoInterfaceReference & operator = (
73 uno_Interface * pUnoI )
74 { return set( pUnoI ); }
75
76 inline void dispatch(
77 struct _typelib_TypeDescription const * pMemberType,
78 void * pReturn, void * pArgs [], uno_Any ** ppException ) const;
79
80 private:
81 inline bool operator == ( UnoInterfaceReference const & ); // not impl
82 inline bool operator != ( UnoInterfaceReference const & ); // not impl
83 inline bool operator == ( uno_Interface * ); // not impl
84 inline bool operator != ( uno_Interface * ); // not impl
85 };
86
87 //______________________________________________________________________________
~UnoInterfaceReference()88 inline UnoInterfaceReference::~UnoInterfaceReference()
89 {
90 if (m_pUnoI != 0)
91 (*m_pUnoI->release)( m_pUnoI );
92 }
93
94 //______________________________________________________________________________
UnoInterfaceReference()95 inline UnoInterfaceReference::UnoInterfaceReference()
96 : m_pUnoI( 0 )
97 {
98 }
99
100 //______________________________________________________________________________
UnoInterfaceReference(uno_Interface * pUnoI,__sal_NoAcquire)101 inline UnoInterfaceReference::UnoInterfaceReference(
102 uno_Interface * pUnoI, __sal_NoAcquire )
103 : m_pUnoI( pUnoI )
104 {
105 }
106
107 //______________________________________________________________________________
UnoInterfaceReference(uno_Interface * pUnoI)108 inline UnoInterfaceReference::UnoInterfaceReference( uno_Interface * pUnoI )
109 : m_pUnoI( pUnoI )
110 {
111 if (m_pUnoI != 0)
112 (*m_pUnoI->acquire)( m_pUnoI );
113 }
114
115 //______________________________________________________________________________
UnoInterfaceReference(UnoInterfaceReference const & ref)116 inline UnoInterfaceReference::UnoInterfaceReference(
117 UnoInterfaceReference const & ref )
118 : m_pUnoI( ref.m_pUnoI )
119 {
120 if (m_pUnoI != 0)
121 (*m_pUnoI->acquire)( m_pUnoI );
122 }
123
124 //______________________________________________________________________________
set(uno_Interface * pUnoI)125 inline UnoInterfaceReference & UnoInterfaceReference::set(
126 uno_Interface * pUnoI )
127 {
128 if (pUnoI != 0)
129 (*pUnoI->acquire)( pUnoI );
130 if (m_pUnoI != 0)
131 (*m_pUnoI->release)( m_pUnoI );
132 m_pUnoI = pUnoI;
133 return *this;
134 }
135
136 //______________________________________________________________________________
set(uno_Interface * pUnoI,__sal_NoAcquire)137 inline UnoInterfaceReference & UnoInterfaceReference::set(
138 uno_Interface * pUnoI, __sal_NoAcquire )
139 {
140 if (m_pUnoI != 0)
141 (*m_pUnoI->release)( m_pUnoI );
142 m_pUnoI = pUnoI;
143 return *this;
144 }
145
146 //______________________________________________________________________________
clear()147 inline void UnoInterfaceReference::clear()
148 {
149 if (m_pUnoI != 0)
150 {
151 (*m_pUnoI->release)( m_pUnoI );
152 m_pUnoI = 0;
153 }
154 }
155
156 //______________________________________________________________________________
dispatch(struct _typelib_TypeDescription const * pMemberType,void * pReturn,void * pArgs[],uno_Any ** ppException) const157 inline void UnoInterfaceReference::dispatch(
158 struct _typelib_TypeDescription const * pMemberType,
159 void * pReturn, void * pArgs [], uno_Any ** ppException ) const
160 {
161 (*m_pUnoI->pDispatcher)(
162 m_pUnoI, pMemberType, pReturn, pArgs, ppException );
163 }
164
165 }
166 }
167 }
168 }
169
170 #endif
171
172