25#include <osl/interlck.h>
27#include <uno/environment.hxx>
28#include <uno/dispatcher.h>
36 uno::Environment m_from;
37 uno::Environment m_to;
48 void * pProbeContext);
52 uno_Interface ** ppOut,
53 uno_Interface * pUnoI,
54 typelib_InterfaceTypeDescription * pTypeDescr);
66 typelib_InterfaceTypeDescription * pTypeDescr )
69 Mapping *
pMapping =
static_cast<Mapping *
>(puno_Mapping);
71 reinterpret_cast<uno_Interface **
>(ppOut),
72 static_cast<uno_Interface *
>(pUnoI), pTypeDescr);
79 Mapping *
pMapping =
static_cast<Mapping *
>(puno_Mapping);
86 Mapping *
pMapping =
static_cast<Mapping *
>(puno_Mapping);
93 uno_ExtEnvironment * pEnv = va_arg(*pParam, uno_ExtEnvironment *);
94 rtl_uString ** ppOid = va_arg(*pParam, rtl_uString **);
95 uno_Interface * pUnoI = va_arg(*pParam, uno_Interface *);
97 pEnv->getObjectIdentifier(pEnv, ppOid, pUnoI);
103 Mapping *
pMapping =
static_cast<Mapping *
>(puno_Mapping);
116 m_probeFun(probeFun),
117 m_pContext(pProbeContext)
119 SAL_INFO(
"cppu.purpenv",
"LIFE: Mapping::Mapping(uno_Environment * pFrom, uno_Environment * pTo -> " <<
this);
128 SAL_INFO(
"cppu.purpenv",
"LIFE: Mapping:~Mapping() -> " <<
this);
132void Mapping::mapInterface(
133 uno_Interface ** ppOut,
134 uno_Interface * pUnoI,
135 typelib_InterfaceTypeDescription * pTypeDescr)
137 OSL_ASSERT(ppOut && pTypeDescr);
140 (*ppOut)->release(*ppOut);
149 rtl_uString * pOId =
nullptr;
154 m_to.get()->pExtEnv->getRegisteredInterface(m_to.get()->pExtEnv,
reinterpret_cast<void **
>(ppOut), pOId, pTypeDescr);
159 uno_Interface * pProxy =
new Proxy(
this,
169 m_to.get()->pExtEnv->registerProxyInterface(m_to.get()->pExtEnv,
170 reinterpret_cast<void **
>(&pProxy),
178 rtl_uString_release(pOId);
182void Mapping::acquire()
184 if (osl_atomic_increment(&m_nCount) == 1)
192void Mapping::release()
194 if (osl_atomic_decrement(&m_nCount) == 0)
208 *ppMapping =
new Mapping(pFrom, pTo, probeFun, pContext);
void SAL_CALL uno_Environment_invoke(uno_Environment *pEnv, uno_EnvCallee *pCallee,...) SAL_THROW_EXTERN_C()
struct _uno_Environment uno_Environment
static void s_release(uno_Mapping *puno_Mapping) SAL_THROW_EXTERN_C()
static void s_mapInterface(uno_Mapping *puno_Mapping, void **ppOut, void *pUnoI, typelib_InterfaceTypeDescription *pTypeDescr) SAL_THROW_EXTERN_C()
static void s_free(uno_Mapping *puno_Mapping) SAL_THROW_EXTERN_C()
static void s_getIdentifier_v(va_list *pParam)
static void s_acquire(uno_Mapping *puno_Mapping) SAL_THROW_EXTERN_C()
void Proxy_free(SAL_UNUSED_PARAMETER uno_ExtEnvironment *, void *pProxy) SAL_THROW_EXTERN_C()
void SAL_CALL uno_registerMapping(uno_Mapping **ppMapping, uno_freeMappingFunc freeMapping, uno_Environment *pFrom, uno_Environment *pTo, rtl_uString *pAddPurpose) SAL_THROW_EXTERN_C()
void SAL_CALL uno_revokeMapping(uno_Mapping *pMapping) SAL_THROW_EXTERN_C()
#define SAL_INFO(area, stream)
struct _uno_Mapping uno_Mapping
void ProbeFun(bool pre, void *pThis, void *pContext, typelib_TypeDescriptionReference *pReturnTypeRef, typelib_MethodParameter *pParams, sal_Int32 nParams, typelib_TypeDescription const *pMemberType, void *pReturn, void *pArgs[], uno_Any **ppException)
C++ helper for implementing Purpose Environments.
void createMapping(uno_Mapping **ppMapping, uno_Environment *pFrom, uno_Environment *pTo, ProbeFun *probeFun, void *pContext)
#define SAL_THROW_EXTERN_C()