1*c6ed87c9SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*c6ed87c9SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*c6ed87c9SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*c6ed87c9SAndrew Rist * distributed with this work for additional information
6*c6ed87c9SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*c6ed87c9SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*c6ed87c9SAndrew Rist * "License"); you may not use this file except in compliance
9*c6ed87c9SAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*c6ed87c9SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*c6ed87c9SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*c6ed87c9SAndrew Rist * software distributed under the License is distributed on an
15*c6ed87c9SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*c6ed87c9SAndrew Rist * KIND, either express or implied. See the License for the
17*c6ed87c9SAndrew Rist * specific language governing permissions and limitations
18*c6ed87c9SAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*c6ed87c9SAndrew Rist *************************************************************/
21*c6ed87c9SAndrew Rist
22*c6ed87c9SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir #if ! defined INCLUDED_UNO_DISPATCHER_HXX
25cdf0e10cSrcweir #define INCLUDED_UNO_DISPATCHER_HXX
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "uno/dispatcher.h"
28cdf0e10cSrcweir
29cdf0e10cSrcweir
30cdf0e10cSrcweir namespace com
31cdf0e10cSrcweir {
32cdf0e10cSrcweir namespace sun
33cdf0e10cSrcweir {
34cdf0e10cSrcweir namespace star
35cdf0e10cSrcweir {
36cdf0e10cSrcweir namespace uno
37cdf0e10cSrcweir {
38cdf0e10cSrcweir
39cdf0e10cSrcweir /** C++ holder reference for binary C uno_Interface. Not for public use, may be
40cdf0e10cSrcweir subject to changes.
41cdf0e10cSrcweir
42cdf0e10cSrcweir @see uno_Interface
43cdf0e10cSrcweir @internal
44cdf0e10cSrcweir not for public use!
45cdf0e10cSrcweir */
46cdf0e10cSrcweir class UnoInterfaceReference
47cdf0e10cSrcweir {
48cdf0e10cSrcweir public:
49cdf0e10cSrcweir uno_Interface * m_pUnoI;
50cdf0e10cSrcweir
is() const51cdf0e10cSrcweir inline bool is() const
52cdf0e10cSrcweir { return m_pUnoI != 0; }
53cdf0e10cSrcweir
54cdf0e10cSrcweir inline ~UnoInterfaceReference();
55cdf0e10cSrcweir inline UnoInterfaceReference();
56cdf0e10cSrcweir inline UnoInterfaceReference( uno_Interface * pUnoI, __sal_NoAcquire );
57cdf0e10cSrcweir inline UnoInterfaceReference( uno_Interface * pUnoI );
58cdf0e10cSrcweir inline UnoInterfaceReference( UnoInterfaceReference const & ref );
59cdf0e10cSrcweir
get() const60cdf0e10cSrcweir inline uno_Interface * get() const
61cdf0e10cSrcweir { return m_pUnoI; }
62cdf0e10cSrcweir
63cdf0e10cSrcweir inline UnoInterfaceReference & set(
64cdf0e10cSrcweir uno_Interface * pUnoI );
65cdf0e10cSrcweir inline UnoInterfaceReference & set(
66cdf0e10cSrcweir uno_Interface * pUnoI, __sal_NoAcquire );
67cdf0e10cSrcweir inline void clear();
68cdf0e10cSrcweir
operator =(UnoInterfaceReference const & ref)69cdf0e10cSrcweir inline UnoInterfaceReference & operator = (
70cdf0e10cSrcweir UnoInterfaceReference const & ref )
71cdf0e10cSrcweir { return set( ref.m_pUnoI ); }
operator =(uno_Interface * pUnoI)72cdf0e10cSrcweir inline UnoInterfaceReference & operator = (
73cdf0e10cSrcweir uno_Interface * pUnoI )
74cdf0e10cSrcweir { return set( pUnoI ); }
75cdf0e10cSrcweir
76cdf0e10cSrcweir inline void dispatch(
77cdf0e10cSrcweir struct _typelib_TypeDescription const * pMemberType,
78cdf0e10cSrcweir void * pReturn, void * pArgs [], uno_Any ** ppException ) const;
79cdf0e10cSrcweir
80cdf0e10cSrcweir private:
81cdf0e10cSrcweir inline bool operator == ( UnoInterfaceReference const & ); // not impl
82cdf0e10cSrcweir inline bool operator != ( UnoInterfaceReference const & ); // not impl
83cdf0e10cSrcweir inline bool operator == ( uno_Interface * ); // not impl
84cdf0e10cSrcweir inline bool operator != ( uno_Interface * ); // not impl
85cdf0e10cSrcweir };
86cdf0e10cSrcweir
87cdf0e10cSrcweir //______________________________________________________________________________
~UnoInterfaceReference()88cdf0e10cSrcweir inline UnoInterfaceReference::~UnoInterfaceReference()
89cdf0e10cSrcweir {
90cdf0e10cSrcweir if (m_pUnoI != 0)
91cdf0e10cSrcweir (*m_pUnoI->release)( m_pUnoI );
92cdf0e10cSrcweir }
93cdf0e10cSrcweir
94cdf0e10cSrcweir //______________________________________________________________________________
UnoInterfaceReference()95cdf0e10cSrcweir inline UnoInterfaceReference::UnoInterfaceReference()
96cdf0e10cSrcweir : m_pUnoI( 0 )
97cdf0e10cSrcweir {
98cdf0e10cSrcweir }
99cdf0e10cSrcweir
100cdf0e10cSrcweir //______________________________________________________________________________
UnoInterfaceReference(uno_Interface * pUnoI,__sal_NoAcquire)101cdf0e10cSrcweir inline UnoInterfaceReference::UnoInterfaceReference(
102cdf0e10cSrcweir uno_Interface * pUnoI, __sal_NoAcquire )
103cdf0e10cSrcweir : m_pUnoI( pUnoI )
104cdf0e10cSrcweir {
105cdf0e10cSrcweir }
106cdf0e10cSrcweir
107cdf0e10cSrcweir //______________________________________________________________________________
UnoInterfaceReference(uno_Interface * pUnoI)108cdf0e10cSrcweir inline UnoInterfaceReference::UnoInterfaceReference( uno_Interface * pUnoI )
109cdf0e10cSrcweir : m_pUnoI( pUnoI )
110cdf0e10cSrcweir {
111cdf0e10cSrcweir if (m_pUnoI != 0)
112cdf0e10cSrcweir (*m_pUnoI->acquire)( m_pUnoI );
113cdf0e10cSrcweir }
114cdf0e10cSrcweir
115cdf0e10cSrcweir //______________________________________________________________________________
UnoInterfaceReference(UnoInterfaceReference const & ref)116cdf0e10cSrcweir inline UnoInterfaceReference::UnoInterfaceReference(
117cdf0e10cSrcweir UnoInterfaceReference const & ref )
118cdf0e10cSrcweir : m_pUnoI( ref.m_pUnoI )
119cdf0e10cSrcweir {
120cdf0e10cSrcweir if (m_pUnoI != 0)
121cdf0e10cSrcweir (*m_pUnoI->acquire)( m_pUnoI );
122cdf0e10cSrcweir }
123cdf0e10cSrcweir
124cdf0e10cSrcweir //______________________________________________________________________________
set(uno_Interface * pUnoI)125cdf0e10cSrcweir inline UnoInterfaceReference & UnoInterfaceReference::set(
126cdf0e10cSrcweir uno_Interface * pUnoI )
127cdf0e10cSrcweir {
128cdf0e10cSrcweir if (pUnoI != 0)
129cdf0e10cSrcweir (*pUnoI->acquire)( pUnoI );
130cdf0e10cSrcweir if (m_pUnoI != 0)
131cdf0e10cSrcweir (*m_pUnoI->release)( m_pUnoI );
132cdf0e10cSrcweir m_pUnoI = pUnoI;
133cdf0e10cSrcweir return *this;
134cdf0e10cSrcweir }
135cdf0e10cSrcweir
136cdf0e10cSrcweir //______________________________________________________________________________
set(uno_Interface * pUnoI,__sal_NoAcquire)137cdf0e10cSrcweir inline UnoInterfaceReference & UnoInterfaceReference::set(
138cdf0e10cSrcweir uno_Interface * pUnoI, __sal_NoAcquire )
139cdf0e10cSrcweir {
140cdf0e10cSrcweir if (m_pUnoI != 0)
141cdf0e10cSrcweir (*m_pUnoI->release)( m_pUnoI );
142cdf0e10cSrcweir m_pUnoI = pUnoI;
143cdf0e10cSrcweir return *this;
144cdf0e10cSrcweir }
145cdf0e10cSrcweir
146cdf0e10cSrcweir //______________________________________________________________________________
clear()147cdf0e10cSrcweir inline void UnoInterfaceReference::clear()
148cdf0e10cSrcweir {
149cdf0e10cSrcweir if (m_pUnoI != 0)
150cdf0e10cSrcweir {
151cdf0e10cSrcweir (*m_pUnoI->release)( m_pUnoI );
152cdf0e10cSrcweir m_pUnoI = 0;
153cdf0e10cSrcweir }
154cdf0e10cSrcweir }
155cdf0e10cSrcweir
156cdf0e10cSrcweir //______________________________________________________________________________
dispatch(struct _typelib_TypeDescription const * pMemberType,void * pReturn,void * pArgs[],uno_Any ** ppException) const157cdf0e10cSrcweir inline void UnoInterfaceReference::dispatch(
158cdf0e10cSrcweir struct _typelib_TypeDescription const * pMemberType,
159cdf0e10cSrcweir void * pReturn, void * pArgs [], uno_Any ** ppException ) const
160cdf0e10cSrcweir {
161cdf0e10cSrcweir (*m_pUnoI->pDispatcher)(
162cdf0e10cSrcweir m_pUnoI, pMemberType, pReturn, pArgs, ppException );
163cdf0e10cSrcweir }
164cdf0e10cSrcweir
165cdf0e10cSrcweir }
166cdf0e10cSrcweir }
167cdf0e10cSrcweir }
168cdf0e10cSrcweir }
169cdf0e10cSrcweir
170cdf0e10cSrcweir #endif
171cdf0e10cSrcweir
172