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