1*129fa3d1SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*129fa3d1SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*129fa3d1SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*129fa3d1SAndrew Rist * distributed with this work for additional information
6*129fa3d1SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*129fa3d1SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*129fa3d1SAndrew Rist * "License"); you may not use this file except in compliance
9*129fa3d1SAndrew Rist * with the License. You may obtain a copy of the License at
10*129fa3d1SAndrew Rist *
11*129fa3d1SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*129fa3d1SAndrew Rist *
13*129fa3d1SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*129fa3d1SAndrew Rist * software distributed under the License is distributed on an
15*129fa3d1SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*129fa3d1SAndrew Rist * KIND, either express or implied. See the License for the
17*129fa3d1SAndrew Rist * specific language governing permissions and limitations
18*129fa3d1SAndrew Rist * under the License.
19*129fa3d1SAndrew Rist *
20*129fa3d1SAndrew Rist *************************************************************/
21*129fa3d1SAndrew Rist
22*129fa3d1SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_cppu.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "cppu/helper/purpenv/Environment.hxx"
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include "osl/diagnose.h"
30cdf0e10cSrcweir #include "uno/lbnames.h"
31cdf0e10cSrcweir
32cdf0e10cSrcweir #include "typelib/typedescription.h"
33cdf0e10cSrcweir #include "osl/interlck.h"
34cdf0e10cSrcweir
35cdf0e10cSrcweir #ifdef debug
36cdf0e10cSrcweir # define LOG_LIFECYCLE_cppu_helper_purpenv_Base
37cdf0e10cSrcweir #endif
38cdf0e10cSrcweir
39cdf0e10cSrcweir #ifdef LOG_LIFECYCLE_cppu_helper_purpenv_Base
40cdf0e10cSrcweir # include <iostream>
41cdf0e10cSrcweir # define LOG_LIFECYCLE_cppu_helper_purpenv_Base_emit(x) x
42cdf0e10cSrcweir
43cdf0e10cSrcweir #else
44cdf0e10cSrcweir # define LOG_LIFECYCLE_cppu_helper_purpenv_Base_emit(x)
45cdf0e10cSrcweir
46cdf0e10cSrcweir #endif
47cdf0e10cSrcweir
48cdf0e10cSrcweir
49cdf0e10cSrcweir extern "C" {
50cdf0e10cSrcweir typedef void SAL_CALL EnvFun_P (uno_Environment *);
51cdf0e10cSrcweir typedef void SAL_CALL EnvFun_PP_P(uno_Environment ** ppHardEnv, uno_Environment *);
52cdf0e10cSrcweir typedef void SAL_CALL ExtEnv_registerProxyInterface (uno_ExtEnvironment *,
53cdf0e10cSrcweir void ** ppProxy,
54cdf0e10cSrcweir uno_freeProxyFunc freeProxy,
55cdf0e10cSrcweir rtl_uString * pOId,
56cdf0e10cSrcweir typelib_InterfaceTypeDescription * pTypeDescr);
57cdf0e10cSrcweir typedef void SAL_CALL ExtEnv_revokeInterface (uno_ExtEnvironment *,
58cdf0e10cSrcweir void * pInterface);
59cdf0e10cSrcweir typedef void SAL_CALL ExtEnv_getObjectIdentifier (uno_ExtEnvironment *,
60cdf0e10cSrcweir rtl_uString **,
61cdf0e10cSrcweir void *);
62cdf0e10cSrcweir typedef void SAL_CALL ExtEnv_getRegisteredInterface (uno_ExtEnvironment *,
63cdf0e10cSrcweir void **,
64cdf0e10cSrcweir rtl_uString *,
65cdf0e10cSrcweir typelib_InterfaceTypeDescription *);
66cdf0e10cSrcweir typedef void SAL_CALL ExtEnv_getRegisteredInterfaces(uno_ExtEnvironment *,
67cdf0e10cSrcweir void *** pppInterfaces,
68cdf0e10cSrcweir sal_Int32 * pnLen,
69cdf0e10cSrcweir uno_memAlloc memAlloc);
70cdf0e10cSrcweir typedef void SAL_CALL ExtEnv_computeObjectIdentifier(uno_ExtEnvironment *,
71cdf0e10cSrcweir rtl_uString ** ppOId,
72cdf0e10cSrcweir void * pInterface);
73cdf0e10cSrcweir typedef void SAL_CALL ExtEnv_acquireInterface (uno_ExtEnvironment *,
74cdf0e10cSrcweir void * pInterface);
75cdf0e10cSrcweir typedef void SAL_CALL ExtEnv_releaseInterface (uno_ExtEnvironment *,
76cdf0e10cSrcweir void * pInterface);
77cdf0e10cSrcweir }
78cdf0e10cSrcweir
79cdf0e10cSrcweir class Base : public cppu::Enterable
80cdf0e10cSrcweir {
81cdf0e10cSrcweir public:
82cdf0e10cSrcweir explicit Base(uno_Environment * pEnv, cppu::Enterable * pEnterable);
83cdf0e10cSrcweir
84cdf0e10cSrcweir void acquireWeak(void);
85cdf0e10cSrcweir void releaseWeak(void);
86cdf0e10cSrcweir void harden (uno_Environment ** ppHardEnv);
87cdf0e10cSrcweir void acquire (void);
88cdf0e10cSrcweir void release (void);
89cdf0e10cSrcweir
90cdf0e10cSrcweir void registerProxyInterface (void ** ppProxy,
91cdf0e10cSrcweir uno_freeProxyFunc freeProxy,
92cdf0e10cSrcweir rtl::OUString const & oid,
93cdf0e10cSrcweir typelib_InterfaceTypeDescription * pTypeDescr);
94cdf0e10cSrcweir void revokeInterface (void * pInterface);
95cdf0e10cSrcweir void getObjectIdentifier (void * pInterface,
96cdf0e10cSrcweir rtl::OUString * pOid);
97cdf0e10cSrcweir void getRegisteredInterface (void **,
98cdf0e10cSrcweir rtl::OUString const & oid,
99cdf0e10cSrcweir typelib_InterfaceTypeDescription *);
100cdf0e10cSrcweir void getRegisteredInterfaces(void ***,
101cdf0e10cSrcweir sal_Int32 * pnLen,
102cdf0e10cSrcweir uno_memAlloc memAlloc);
103cdf0e10cSrcweir void computeObjectIdentifier(void * pInterface,
104cdf0e10cSrcweir rtl::OUString * pOid);
105cdf0e10cSrcweir void acquireInterface (void * pInterface);
106cdf0e10cSrcweir void releaseInterface (void * pInterface);
107cdf0e10cSrcweir
108cdf0e10cSrcweir virtual void v_enter (void);
109cdf0e10cSrcweir virtual void v_leave (void);
110cdf0e10cSrcweir virtual void v_callInto_v(uno_EnvCallee * pCallee, va_list * pParam);
111cdf0e10cSrcweir virtual void v_callOut_v (uno_EnvCallee * pCallee, va_list * pParam);
112cdf0e10cSrcweir virtual int v_isValid (rtl::OUString * pReason);
113cdf0e10cSrcweir
114cdf0e10cSrcweir protected:
115cdf0e10cSrcweir oslInterlockedCount m_nRef;
116cdf0e10cSrcweir uno_Environment * m_pEnv;
117cdf0e10cSrcweir cppu::Enterable * m_pEnterable;
118cdf0e10cSrcweir
119cdf0e10cSrcweir EnvFun_P * m_env_acquire;
120cdf0e10cSrcweir EnvFun_P * m_env_release;
121cdf0e10cSrcweir EnvFun_PP_P * m_env_harden;
122cdf0e10cSrcweir EnvFun_P * m_env_acquireWeak;
123cdf0e10cSrcweir EnvFun_P * m_env_releaseWeak;
124cdf0e10cSrcweir
125cdf0e10cSrcweir ExtEnv_registerProxyInterface * m_env_registerProxyInterface;
126cdf0e10cSrcweir ExtEnv_revokeInterface * m_env_revokeInterface;
127cdf0e10cSrcweir ExtEnv_getObjectIdentifier * m_env_getObjectIdentifier;
128cdf0e10cSrcweir ExtEnv_getRegisteredInterface * m_env_getRegisteredInterface;
129cdf0e10cSrcweir ExtEnv_getRegisteredInterfaces * m_env_getRegisteredInterfaces;
130cdf0e10cSrcweir ExtEnv_computeObjectIdentifier * m_env_computeObjectIdentifier;
131cdf0e10cSrcweir ExtEnv_acquireInterface * m_env_acquireInterface;
132cdf0e10cSrcweir ExtEnv_releaseInterface * m_env_releaseInterface;
133cdf0e10cSrcweir
134cdf0e10cSrcweir virtual ~Base();
135cdf0e10cSrcweir };
136cdf0e10cSrcweir
137cdf0e10cSrcweir extern "C" {
s_acquire(uno_Environment * pEnv)138cdf0e10cSrcweir static void SAL_CALL s_acquire(uno_Environment * pEnv) //SAL_THROW_EXTERN_C()
139cdf0e10cSrcweir {
140cdf0e10cSrcweir Base * pBase = static_cast<Base *>(pEnv->pReserved);
141cdf0e10cSrcweir pBase->acquire();
142cdf0e10cSrcweir }
143cdf0e10cSrcweir
s_release(uno_Environment * pEnv)144cdf0e10cSrcweir static void SAL_CALL s_release(uno_Environment * pEnv) SAL_THROW_EXTERN_C()
145cdf0e10cSrcweir {
146cdf0e10cSrcweir Base * pBase = static_cast<Base *>(pEnv->pReserved);
147cdf0e10cSrcweir pBase->release();
148cdf0e10cSrcweir }
149cdf0e10cSrcweir
s_harden(uno_Environment ** ppHardEnv,uno_Environment * pEnv)150cdf0e10cSrcweir static void SAL_CALL s_harden(uno_Environment ** ppHardEnv, uno_Environment * pEnv) SAL_THROW_EXTERN_C()
151cdf0e10cSrcweir {
152cdf0e10cSrcweir Base * pBase = static_cast<Base *>(pEnv->pReserved);
153cdf0e10cSrcweir pBase->harden(ppHardEnv);
154cdf0e10cSrcweir }
155cdf0e10cSrcweir
s_acquireWeak(uno_Environment * pEnv)156cdf0e10cSrcweir static void SAL_CALL s_acquireWeak(uno_Environment * pEnv) SAL_THROW_EXTERN_C()
157cdf0e10cSrcweir {
158cdf0e10cSrcweir Base * pBase = static_cast<Base *>(pEnv->pReserved);
159cdf0e10cSrcweir pBase->acquireWeak();
160cdf0e10cSrcweir }
161cdf0e10cSrcweir
s_releaseWeak(uno_Environment * pEnv)162cdf0e10cSrcweir static void SAL_CALL s_releaseWeak(uno_Environment * pEnv) SAL_THROW_EXTERN_C()
163cdf0e10cSrcweir {
164cdf0e10cSrcweir Base * pBase = static_cast<Base *>(pEnv->pReserved);
165cdf0e10cSrcweir pBase->releaseWeak();
166cdf0e10cSrcweir }
167cdf0e10cSrcweir
168cdf0e10cSrcweir
s_registerProxyInterface(uno_ExtEnvironment * pExtEnv,void ** ppProxy,uno_freeProxyFunc freeProxy,rtl_uString * pOId,typelib_InterfaceTypeDescription * pTypeDescr)169cdf0e10cSrcweir static void SAL_CALL s_registerProxyInterface(uno_ExtEnvironment * pExtEnv,
170cdf0e10cSrcweir void ** ppProxy,
171cdf0e10cSrcweir uno_freeProxyFunc freeProxy,
172cdf0e10cSrcweir rtl_uString * pOId,
173cdf0e10cSrcweir typelib_InterfaceTypeDescription * pTypeDescr)
174cdf0e10cSrcweir {
175cdf0e10cSrcweir Base * pBase = static_cast<Base *>(pExtEnv->aBase.pReserved);
176cdf0e10cSrcweir pBase->registerProxyInterface(ppProxy, freeProxy, pOId, pTypeDescr);
177cdf0e10cSrcweir }
178cdf0e10cSrcweir
s_revokeInterface(uno_ExtEnvironment * pExtEnv,void * pInterface)179cdf0e10cSrcweir static void SAL_CALL s_revokeInterface(uno_ExtEnvironment * pExtEnv, void * pInterface)
180cdf0e10cSrcweir {
181cdf0e10cSrcweir Base * pBase = static_cast<Base *>(pExtEnv->aBase.pReserved);
182cdf0e10cSrcweir pBase->revokeInterface(pInterface);
183cdf0e10cSrcweir }
184cdf0e10cSrcweir
s_getObjectIdentifier(uno_ExtEnvironment * pExtEnv,rtl_uString ** ppOId,void * pInterface)185cdf0e10cSrcweir static void SAL_CALL s_getObjectIdentifier(uno_ExtEnvironment * pExtEnv,
186cdf0e10cSrcweir rtl_uString ** ppOId,
187cdf0e10cSrcweir void * pInterface)
188cdf0e10cSrcweir {
189cdf0e10cSrcweir Base * pBase = static_cast<Base *>(pExtEnv->aBase.pReserved);
190cdf0e10cSrcweir pBase->getObjectIdentifier(pInterface, reinterpret_cast<rtl::OUString *>(ppOId));
191cdf0e10cSrcweir }
192cdf0e10cSrcweir
s_getRegisteredInterface(uno_ExtEnvironment * pExtEnv,void ** ppInterface,rtl_uString * pOId,typelib_InterfaceTypeDescription * pTypeDescr)193cdf0e10cSrcweir static void SAL_CALL s_getRegisteredInterface(uno_ExtEnvironment * pExtEnv,
194cdf0e10cSrcweir void ** ppInterface,
195cdf0e10cSrcweir rtl_uString * pOId,
196cdf0e10cSrcweir typelib_InterfaceTypeDescription * pTypeDescr)
197cdf0e10cSrcweir {
198cdf0e10cSrcweir Base * pBase = static_cast<Base *>(pExtEnv->aBase.pReserved);
199cdf0e10cSrcweir pBase->getRegisteredInterface(ppInterface, pOId, pTypeDescr);
200cdf0e10cSrcweir }
201cdf0e10cSrcweir
s_getRegisteredInterfaces(uno_ExtEnvironment * pExtEnv,void *** pppInterface,sal_Int32 * pnLen,uno_memAlloc memAlloc)202cdf0e10cSrcweir static void SAL_CALL s_getRegisteredInterfaces(uno_ExtEnvironment * pExtEnv,
203cdf0e10cSrcweir void *** pppInterface,
204cdf0e10cSrcweir sal_Int32 * pnLen,
205cdf0e10cSrcweir uno_memAlloc memAlloc)
206cdf0e10cSrcweir {
207cdf0e10cSrcweir Base * pBase = static_cast<Base *>(pExtEnv->aBase.pReserved);
208cdf0e10cSrcweir pBase->getRegisteredInterfaces(pppInterface, pnLen, memAlloc);
209cdf0e10cSrcweir }
210cdf0e10cSrcweir
s_computeObjectIdentifier(uno_ExtEnvironment * pExtEnv,rtl_uString ** ppOId,void * pInterface)211cdf0e10cSrcweir static void SAL_CALL s_computeObjectIdentifier(uno_ExtEnvironment * pExtEnv,
212cdf0e10cSrcweir rtl_uString ** ppOId,
213cdf0e10cSrcweir void * pInterface)
214cdf0e10cSrcweir {
215cdf0e10cSrcweir Base * pBase = static_cast<Base *>(pExtEnv->aBase.pReserved);
216cdf0e10cSrcweir pBase->computeObjectIdentifier(pInterface, reinterpret_cast<rtl::OUString *>(ppOId));
217cdf0e10cSrcweir }
218cdf0e10cSrcweir
s_acquireInterface(uno_ExtEnvironment * pExtEnv,void * pInterface)219cdf0e10cSrcweir static void SAL_CALL s_acquireInterface(uno_ExtEnvironment * pExtEnv, void * pInterface) {
220cdf0e10cSrcweir Base * pBase = static_cast<Base *>(pExtEnv->aBase.pReserved);
221cdf0e10cSrcweir pBase->acquireInterface(pInterface);
222cdf0e10cSrcweir }
223cdf0e10cSrcweir
s_releaseInterface(uno_ExtEnvironment * pExtEnv,void * pInterface)224cdf0e10cSrcweir static void SAL_CALL s_releaseInterface(uno_ExtEnvironment * pExtEnv, void * pInterface) {
225cdf0e10cSrcweir Base * pBase = static_cast<Base *>(pExtEnv->aBase.pReserved);
226cdf0e10cSrcweir pBase->releaseInterface(pInterface);
227cdf0e10cSrcweir }
228cdf0e10cSrcweir
229cdf0e10cSrcweir }
230cdf0e10cSrcweir
Base(uno_Environment * pEnv,cppu::Enterable * pEnterable)231cdf0e10cSrcweir Base::Base(uno_Environment * pEnv, cppu::Enterable * pEnterable)
232cdf0e10cSrcweir :m_nRef(1),
233cdf0e10cSrcweir m_pEnv(pEnv),
234cdf0e10cSrcweir m_pEnterable (pEnterable),
235cdf0e10cSrcweir m_env_acquire (pEnv->acquire),
236cdf0e10cSrcweir m_env_release (pEnv->release),
237cdf0e10cSrcweir m_env_harden (pEnv->harden),
238cdf0e10cSrcweir m_env_acquireWeak(pEnv->acquireWeak),
239cdf0e10cSrcweir m_env_releaseWeak(pEnv->releaseWeak),
240cdf0e10cSrcweir m_env_registerProxyInterface (pEnv->pExtEnv->registerProxyInterface),
241cdf0e10cSrcweir m_env_revokeInterface (pEnv->pExtEnv->revokeInterface),
242cdf0e10cSrcweir m_env_getObjectIdentifier (pEnv->pExtEnv->getObjectIdentifier),
243cdf0e10cSrcweir m_env_getRegisteredInterface (pEnv->pExtEnv->getRegisteredInterface),
244cdf0e10cSrcweir m_env_getRegisteredInterfaces(pEnv->pExtEnv->getRegisteredInterfaces),
245cdf0e10cSrcweir m_env_computeObjectIdentifier(pEnv->pExtEnv->computeObjectIdentifier),
246cdf0e10cSrcweir m_env_acquireInterface (pEnv->pExtEnv->acquireInterface),
247cdf0e10cSrcweir m_env_releaseInterface (pEnv->pExtEnv->releaseInterface)
248cdf0e10cSrcweir {
249cdf0e10cSrcweir LOG_LIFECYCLE_cppu_helper_purpenv_Base_emit(fprintf(stderr, "LIFE: %s -> %p\n", "cppu::helper::purpenv::Base::Base(uno_Environment * pEnv)", this));
250cdf0e10cSrcweir OSL_ENSURE(
251cdf0e10cSrcweir rtl_ustr_ascii_compare_WithLength(pEnv->pTypeName->buffer, rtl_str_getLength(UNO_LB_UNO), UNO_LB_UNO)
252cdf0e10cSrcweir == 0,
253cdf0e10cSrcweir "### wrong environment type!");
254cdf0e10cSrcweir
255cdf0e10cSrcweir pEnv->acquire = s_acquire;
256cdf0e10cSrcweir pEnv->release = s_release;
257cdf0e10cSrcweir pEnv->harden = s_harden;
258cdf0e10cSrcweir pEnv->acquireWeak = s_acquireWeak;
259cdf0e10cSrcweir pEnv->releaseWeak = s_releaseWeak;
260cdf0e10cSrcweir
261cdf0e10cSrcweir pEnv->pExtEnv->registerProxyInterface = s_registerProxyInterface;
262cdf0e10cSrcweir pEnv->pExtEnv->revokeInterface = s_revokeInterface;
263cdf0e10cSrcweir pEnv->pExtEnv->getObjectIdentifier = s_getObjectIdentifier;
264cdf0e10cSrcweir pEnv->pExtEnv->getRegisteredInterface = s_getRegisteredInterface;
265cdf0e10cSrcweir pEnv->pExtEnv->getRegisteredInterfaces = s_getRegisteredInterfaces;
266cdf0e10cSrcweir pEnv->pExtEnv->computeObjectIdentifier = s_computeObjectIdentifier;
267cdf0e10cSrcweir pEnv->pExtEnv->acquireInterface = s_acquireInterface;
268cdf0e10cSrcweir pEnv->pExtEnv->releaseInterface = s_releaseInterface;
269cdf0e10cSrcweir
270cdf0e10cSrcweir pEnv->pReserved = this;
271cdf0e10cSrcweir }
272cdf0e10cSrcweir
~Base()273cdf0e10cSrcweir Base::~Base()
274cdf0e10cSrcweir {
275cdf0e10cSrcweir LOG_LIFECYCLE_cppu_helper_purpenv_Base_emit(fprintf(stderr, "LIFE: %s -> %p\n", "cppu::helper::purpenv::Base::~Base()", this));
276cdf0e10cSrcweir
277cdf0e10cSrcweir m_pEnv->acquire = m_env_acquire;
278cdf0e10cSrcweir m_pEnv->release = m_env_release;
279cdf0e10cSrcweir m_pEnv->harden = m_env_harden;
280cdf0e10cSrcweir m_pEnv->acquireWeak = m_env_acquireWeak;
281cdf0e10cSrcweir m_pEnv->releaseWeak = m_env_releaseWeak;
282cdf0e10cSrcweir
283cdf0e10cSrcweir m_pEnv->pReserved = NULL;
284cdf0e10cSrcweir
285cdf0e10cSrcweir delete m_pEnterable;
286cdf0e10cSrcweir m_pEnv->release(m_pEnv);
287cdf0e10cSrcweir }
288cdf0e10cSrcweir
acquire(void)289cdf0e10cSrcweir void Base::acquire(void)
290cdf0e10cSrcweir {
291cdf0e10cSrcweir m_env_acquire(m_pEnv);
292cdf0e10cSrcweir
293cdf0e10cSrcweir osl_incrementInterlockedCount(&m_nRef);
294cdf0e10cSrcweir }
295cdf0e10cSrcweir
release(void)296cdf0e10cSrcweir void Base::release(void)
297cdf0e10cSrcweir {
298cdf0e10cSrcweir if (osl_decrementInterlockedCount(&m_nRef) == 0)
299cdf0e10cSrcweir delete this;
300cdf0e10cSrcweir
301cdf0e10cSrcweir else
302cdf0e10cSrcweir m_env_release(m_pEnv);
303cdf0e10cSrcweir }
304cdf0e10cSrcweir
harden(uno_Environment ** ppHardEnv)305cdf0e10cSrcweir void Base::harden(uno_Environment ** ppHardEnv)
306cdf0e10cSrcweir {
307cdf0e10cSrcweir m_env_harden(ppHardEnv, m_pEnv);
308cdf0e10cSrcweir osl_incrementInterlockedCount(&m_nRef);
309cdf0e10cSrcweir }
310cdf0e10cSrcweir
acquireWeak(void)311cdf0e10cSrcweir void Base::acquireWeak(void)
312cdf0e10cSrcweir {
313cdf0e10cSrcweir m_env_acquireWeak(m_pEnv);
314cdf0e10cSrcweir }
315cdf0e10cSrcweir
releaseWeak(void)316cdf0e10cSrcweir void Base::releaseWeak(void)
317cdf0e10cSrcweir {
318cdf0e10cSrcweir m_env_releaseWeak(m_pEnv);
319cdf0e10cSrcweir }
320cdf0e10cSrcweir
321cdf0e10cSrcweir
s_registerProxyInterface_v(va_list * pParam)322cdf0e10cSrcweir extern "C" { static void s_registerProxyInterface_v(va_list * pParam)
323cdf0e10cSrcweir {
324cdf0e10cSrcweir uno_ExtEnvironment * pExtEnv = va_arg(*pParam, uno_ExtEnvironment *);
325cdf0e10cSrcweir void ** ppProxy = va_arg(*pParam, void **);
326cdf0e10cSrcweir uno_freeProxyFunc freeProxy = va_arg(*pParam, uno_freeProxyFunc);
327cdf0e10cSrcweir rtl_uString * pOId = va_arg(*pParam, rtl_uString *);
328cdf0e10cSrcweir typelib_InterfaceTypeDescription * pTypeDescr = va_arg(*pParam, typelib_InterfaceTypeDescription *);
329cdf0e10cSrcweir ExtEnv_registerProxyInterface * pRegisterProxyInterface
330cdf0e10cSrcweir = va_arg(*pParam, ExtEnv_registerProxyInterface *);
331cdf0e10cSrcweir
332cdf0e10cSrcweir pRegisterProxyInterface(pExtEnv, ppProxy, freeProxy, pOId, pTypeDescr);
333cdf0e10cSrcweir }}
334cdf0e10cSrcweir
registerProxyInterface(void ** ppProxy,uno_freeProxyFunc freeProxy,rtl::OUString const & oid,typelib_InterfaceTypeDescription * pTypeDescr)335cdf0e10cSrcweir void Base::registerProxyInterface(void ** ppProxy,
336cdf0e10cSrcweir uno_freeProxyFunc freeProxy,
337cdf0e10cSrcweir rtl::OUString const & oid,
338cdf0e10cSrcweir typelib_InterfaceTypeDescription * pTypeDescr)
339cdf0e10cSrcweir {
340cdf0e10cSrcweir uno_Environment_invoke(m_pEnv,
341cdf0e10cSrcweir s_registerProxyInterface_v,
342cdf0e10cSrcweir m_pEnv->pExtEnv,
343cdf0e10cSrcweir ppProxy,
344cdf0e10cSrcweir freeProxy,
345cdf0e10cSrcweir oid.pData,
346cdf0e10cSrcweir pTypeDescr,
347cdf0e10cSrcweir m_env_registerProxyInterface);
348cdf0e10cSrcweir }
349cdf0e10cSrcweir
350cdf0e10cSrcweir
s_revokeInterface_v(va_list * pParam)351cdf0e10cSrcweir extern "C" { static void s_revokeInterface_v(va_list * pParam)
352cdf0e10cSrcweir {
353cdf0e10cSrcweir uno_ExtEnvironment * pExtEnv = va_arg(*pParam, uno_ExtEnvironment *);
354cdf0e10cSrcweir void * pInterface = va_arg(*pParam, void *);
355cdf0e10cSrcweir ExtEnv_revokeInterface * pRevokeInterface = va_arg(*pParam, ExtEnv_revokeInterface *);
356cdf0e10cSrcweir
357cdf0e10cSrcweir pRevokeInterface(pExtEnv, pInterface);
358cdf0e10cSrcweir }}
359cdf0e10cSrcweir
revokeInterface(void * pInterface)360cdf0e10cSrcweir void Base::revokeInterface(void * pInterface)
361cdf0e10cSrcweir {
362cdf0e10cSrcweir uno_Environment_invoke(m_pEnv,
363cdf0e10cSrcweir s_revokeInterface_v,
364cdf0e10cSrcweir m_pEnv->pExtEnv,
365cdf0e10cSrcweir pInterface,
366cdf0e10cSrcweir m_env_revokeInterface);
367cdf0e10cSrcweir }
368cdf0e10cSrcweir
369cdf0e10cSrcweir
s_getObjectIdentifier_v(va_list * pParam)370cdf0e10cSrcweir extern "C" { static void s_getObjectIdentifier_v(va_list * pParam)
371cdf0e10cSrcweir {
372cdf0e10cSrcweir uno_ExtEnvironment * pExtEnv = va_arg(*pParam, uno_ExtEnvironment *);
373cdf0e10cSrcweir void * pInterface = va_arg(*pParam, void *);
374cdf0e10cSrcweir rtl::OUString * pOId = va_arg(*pParam, rtl::OUString *);
375cdf0e10cSrcweir ExtEnv_getObjectIdentifier * pGetObjectIdentifier
376cdf0e10cSrcweir = va_arg(*pParam, ExtEnv_getObjectIdentifier *);
377cdf0e10cSrcweir
378cdf0e10cSrcweir pGetObjectIdentifier(pExtEnv, reinterpret_cast<rtl_uString **>(pOId), pInterface);
379cdf0e10cSrcweir }}
380cdf0e10cSrcweir
getObjectIdentifier(void * pInterface,rtl::OUString * pOid)381cdf0e10cSrcweir void Base::getObjectIdentifier(void * pInterface, rtl::OUString * pOid)
382cdf0e10cSrcweir {
383cdf0e10cSrcweir uno_Environment_invoke(m_pEnv,
384cdf0e10cSrcweir s_getObjectIdentifier_v,
385cdf0e10cSrcweir m_pEnv->pExtEnv,
386cdf0e10cSrcweir pInterface,
387cdf0e10cSrcweir pOid,
388cdf0e10cSrcweir m_env_getObjectIdentifier);
389cdf0e10cSrcweir }
390cdf0e10cSrcweir
391cdf0e10cSrcweir
s_getRegisteredInterface_v(va_list * pParam)392cdf0e10cSrcweir extern "C" { static void s_getRegisteredInterface_v(va_list * pParam)
393cdf0e10cSrcweir {
394cdf0e10cSrcweir uno_ExtEnvironment * pExtEnv = va_arg(*pParam, uno_ExtEnvironment *);
395cdf0e10cSrcweir void ** ppInterface = va_arg(*pParam, void **);
396cdf0e10cSrcweir rtl_uString * pOId = va_arg(*pParam, rtl_uString *);
397cdf0e10cSrcweir typelib_InterfaceTypeDescription * pTypeDescr = va_arg(*pParam, typelib_InterfaceTypeDescription *);
398cdf0e10cSrcweir ExtEnv_getRegisteredInterface * pGetRegisteredInterface
399cdf0e10cSrcweir = va_arg(*pParam, ExtEnv_getRegisteredInterface *);
400cdf0e10cSrcweir
401cdf0e10cSrcweir pGetRegisteredInterface(pExtEnv, ppInterface, pOId, pTypeDescr);
402cdf0e10cSrcweir }}
403cdf0e10cSrcweir
getRegisteredInterface(void ** ppInterface,rtl::OUString const & oid,typelib_InterfaceTypeDescription * pTypeDescr)404cdf0e10cSrcweir void Base::getRegisteredInterface(void ** ppInterface,
405cdf0e10cSrcweir rtl::OUString const & oid,
406cdf0e10cSrcweir typelib_InterfaceTypeDescription * pTypeDescr)
407cdf0e10cSrcweir {
408cdf0e10cSrcweir uno_Environment_invoke(m_pEnv,
409cdf0e10cSrcweir s_getRegisteredInterface_v,
410cdf0e10cSrcweir m_pEnv->pExtEnv,
411cdf0e10cSrcweir ppInterface,
412cdf0e10cSrcweir oid.pData,
413cdf0e10cSrcweir pTypeDescr,
414cdf0e10cSrcweir m_env_getRegisteredInterface);
415cdf0e10cSrcweir }
416cdf0e10cSrcweir
417cdf0e10cSrcweir
s_getRegisteredInterfaces_v(va_list * pParam)418cdf0e10cSrcweir extern "C" { static void s_getRegisteredInterfaces_v(va_list * pParam)
419cdf0e10cSrcweir {
420cdf0e10cSrcweir uno_ExtEnvironment * pExtEnv = va_arg(*pParam, uno_ExtEnvironment *);
421cdf0e10cSrcweir void *** pppInterface = va_arg(*pParam, void ***);
422cdf0e10cSrcweir sal_Int32 * pnLen = va_arg(*pParam, sal_Int32 *);
423cdf0e10cSrcweir uno_memAlloc memAlloc = va_arg(*pParam, uno_memAlloc);
424cdf0e10cSrcweir ExtEnv_getRegisteredInterfaces * pGetRegisteredInterfaces
425cdf0e10cSrcweir = va_arg(*pParam, ExtEnv_getRegisteredInterfaces *);
426cdf0e10cSrcweir
427cdf0e10cSrcweir pGetRegisteredInterfaces(pExtEnv, pppInterface, pnLen, memAlloc);
428cdf0e10cSrcweir }}
429cdf0e10cSrcweir
getRegisteredInterfaces(void *** pppInterface,sal_Int32 * pnLen,uno_memAlloc memAlloc)430cdf0e10cSrcweir void Base::getRegisteredInterfaces(void *** pppInterface,
431cdf0e10cSrcweir sal_Int32 * pnLen,
432cdf0e10cSrcweir uno_memAlloc memAlloc)
433cdf0e10cSrcweir {
434cdf0e10cSrcweir uno_Environment_invoke(m_pEnv,
435cdf0e10cSrcweir s_getRegisteredInterfaces_v,
436cdf0e10cSrcweir m_pEnv->pExtEnv,
437cdf0e10cSrcweir pppInterface,
438cdf0e10cSrcweir pnLen,
439cdf0e10cSrcweir memAlloc,
440cdf0e10cSrcweir m_env_getRegisteredInterfaces);
441cdf0e10cSrcweir }
442cdf0e10cSrcweir
443cdf0e10cSrcweir
s_computeObjectIdentifier_v(va_list * pParam)444cdf0e10cSrcweir extern "C" { static void s_computeObjectIdentifier_v(va_list * pParam)
445cdf0e10cSrcweir {
446cdf0e10cSrcweir uno_ExtEnvironment * pExtEnv = va_arg(*pParam, uno_ExtEnvironment *);
447cdf0e10cSrcweir void * pInterface = va_arg(*pParam, void *);
448cdf0e10cSrcweir rtl::OUString * pOId = va_arg(*pParam, rtl::OUString *);
449cdf0e10cSrcweir ExtEnv_computeObjectIdentifier * pComputeObjectIdentifier
450cdf0e10cSrcweir = va_arg(*pParam, ExtEnv_computeObjectIdentifier *);
451cdf0e10cSrcweir
452cdf0e10cSrcweir pComputeObjectIdentifier(pExtEnv, reinterpret_cast<rtl_uString **>(pOId), pInterface);
453cdf0e10cSrcweir }}
454cdf0e10cSrcweir
computeObjectIdentifier(void * pInterface,rtl::OUString * pOid)455cdf0e10cSrcweir void Base::computeObjectIdentifier(void * pInterface, rtl::OUString * pOid)
456cdf0e10cSrcweir {
457cdf0e10cSrcweir uno_Environment_invoke(m_pEnv,
458cdf0e10cSrcweir s_computeObjectIdentifier_v,
459cdf0e10cSrcweir m_pEnv->pExtEnv,
460cdf0e10cSrcweir pInterface,
461cdf0e10cSrcweir pOid,
462cdf0e10cSrcweir m_env_computeObjectIdentifier);
463cdf0e10cSrcweir }
464cdf0e10cSrcweir
465cdf0e10cSrcweir
s_acquireInterface_v(va_list * pParam)466cdf0e10cSrcweir extern "C" { static void s_acquireInterface_v(va_list * pParam)
467cdf0e10cSrcweir {
468cdf0e10cSrcweir uno_ExtEnvironment * pExtEnv = va_arg(*pParam, uno_ExtEnvironment *);
469cdf0e10cSrcweir void * pInterface = va_arg(*pParam, void *);
470cdf0e10cSrcweir ExtEnv_acquireInterface * pAcquireInterface
471cdf0e10cSrcweir = va_arg(*pParam, ExtEnv_acquireInterface *);
472cdf0e10cSrcweir
473cdf0e10cSrcweir pAcquireInterface(pExtEnv, pInterface);
474cdf0e10cSrcweir }}
475cdf0e10cSrcweir
acquireInterface(void * pInterface)476cdf0e10cSrcweir void Base::acquireInterface(void * pInterface)
477cdf0e10cSrcweir {
478cdf0e10cSrcweir uno_Environment_invoke(m_pEnv, s_acquireInterface_v, m_pEnv->pExtEnv, pInterface, m_env_acquireInterface);
479cdf0e10cSrcweir }
480cdf0e10cSrcweir
481cdf0e10cSrcweir
s_releaseInterface_v(va_list * pParam)482cdf0e10cSrcweir extern "C" { static void s_releaseInterface_v(va_list * pParam)
483cdf0e10cSrcweir {
484cdf0e10cSrcweir uno_ExtEnvironment * pExtEnv = va_arg(*pParam, uno_ExtEnvironment *);
485cdf0e10cSrcweir void * pInterface = va_arg(*pParam, void *);
486cdf0e10cSrcweir ExtEnv_releaseInterface * pReleaseInterface
487cdf0e10cSrcweir = va_arg(*pParam, ExtEnv_releaseInterface *);
488cdf0e10cSrcweir
489cdf0e10cSrcweir pReleaseInterface(pExtEnv, pInterface);
490cdf0e10cSrcweir }}
491cdf0e10cSrcweir
releaseInterface(void * pInterface)492cdf0e10cSrcweir void Base::releaseInterface(void * pInterface)
493cdf0e10cSrcweir {
494cdf0e10cSrcweir uno_Environment_invoke(m_pEnv,
495cdf0e10cSrcweir s_releaseInterface_v,
496cdf0e10cSrcweir m_pEnv->pExtEnv,
497cdf0e10cSrcweir pInterface,
498cdf0e10cSrcweir m_env_releaseInterface);
499cdf0e10cSrcweir }
500cdf0e10cSrcweir
v_enter(void)501cdf0e10cSrcweir void Base::v_enter(void)
502cdf0e10cSrcweir {
503cdf0e10cSrcweir m_pEnterable->enter();
504cdf0e10cSrcweir }
505cdf0e10cSrcweir
v_leave(void)506cdf0e10cSrcweir void Base::v_leave(void)
507cdf0e10cSrcweir {
508cdf0e10cSrcweir m_pEnterable->leave();
509cdf0e10cSrcweir }
510cdf0e10cSrcweir
v_callInto_v(uno_EnvCallee * pCallee,va_list * pParam)511cdf0e10cSrcweir void Base::v_callInto_v(uno_EnvCallee * pCallee, va_list * pParam)
512cdf0e10cSrcweir {
513cdf0e10cSrcweir m_pEnterable->callInto_v(pCallee, pParam);
514cdf0e10cSrcweir }
515cdf0e10cSrcweir
v_callOut_v(uno_EnvCallee * pCallee,va_list * pParam)516cdf0e10cSrcweir void Base::v_callOut_v(uno_EnvCallee * pCallee, va_list * pParam)
517cdf0e10cSrcweir {
518cdf0e10cSrcweir m_pEnterable->callOut_v(pCallee, pParam);
519cdf0e10cSrcweir }
520cdf0e10cSrcweir
v_isValid(rtl::OUString * pReason)521cdf0e10cSrcweir int Base::v_isValid(rtl::OUString * pReason)
522cdf0e10cSrcweir {
523cdf0e10cSrcweir return m_pEnterable->isValid(pReason);
524cdf0e10cSrcweir }
525cdf0e10cSrcweir
526cdf0e10cSrcweir namespace cppu { namespace helper { namespace purpenv {
527cdf0e10cSrcweir
Environment_initWithEnterable(uno_Environment * pEnvironment,cppu::Enterable * pEnterable)528cdf0e10cSrcweir void Environment_initWithEnterable(uno_Environment * pEnvironment, cppu::Enterable * pEnterable)
529cdf0e10cSrcweir {
530cdf0e10cSrcweir new Base(pEnvironment, pEnterable);
531cdf0e10cSrcweir }
532cdf0e10cSrcweir
533cdf0e10cSrcweir }}}
534