22#include <rtl/byteseq.h>
23#include <osl/mutex.hxx>
25#include <uno/current_context.h>
26#include <uno/environment.hxx>
27#include <uno/mapping.hxx>
28#include <typelib/typedescription.h>
35using namespace ::
cppu;
43 static typelib_InterfaceTypeDescription* s_type_XCurrentContext = []() {
44 OUString sTypeName(
"com.sun.star.uno.XCurrentContext");
45 typelib_InterfaceTypeDescription* pTD =
nullptr;
46 typelib_TypeDescriptionReference* pMembers[1] = {
nullptr };
47 OUString sMethodName0(
"com.sun.star.uno.XCurrentContext::getValueByName");
51 &pTD, sTypeName.pData, 0, 0, 0, 0, 0,
57 typelib_InterfaceMethodTypeDescription* pMethod =
nullptr;
58 typelib_Parameter_Init aParameters[1];
59 OUString sParamName0(
"Name");
60 OUString sParamType0(
"string");
61 aParameters[0].pParamName = sParamName0.pData;
62 aParameters[0].eTypeClass = typelib_TypeClass_STRING;
63 aParameters[0].pTypeName = sParamType0.pData;
64 aParameters[0].bIn =
true;
65 aParameters[0].bOut =
false;
66 rtl_uString* pExceptions[1];
67 OUString sExceptionName0(
"com.sun.star.uno.RuntimeException");
68 pExceptions[0] = sExceptionName0.pData;
69 OUString sReturnType0(
"any");
71 typelib_TypeClass_ANY, sReturnType0.pData, 1,
72 aParameters, 1, pExceptions);
80 return s_type_XCurrentContext;
84 : pCurrentContext(nullptr)
85 , pCurrentContextEnv(nullptr)
86 , pLocalThreadId(nullptr)
88 , nRefCountOfCurrentId(0)
118 void * pCurrentContext,
119 rtl_uString * pEnvTypeName,
void * pEnvContext )
125 if (
id.pCurrentContext)
127 (*
id.pCurrentContextEnv->releaseInterface)(
128 id.pCurrentContextEnv,
id.pCurrentContext );
129 (*
id.pCurrentContextEnv->aBase.release)(
130 &
id.pCurrentContextEnv->aBase );
131 id.pCurrentContextEnv =
nullptr;
133 id.pCurrentContext =
nullptr;
136 if (!pCurrentContext)
141 OSL_ASSERT( pEnv && pEnv->pExtEnv );
146 id.pCurrentContextEnv = pEnv->pExtEnv;
147 (*
id.pCurrentContextEnv->acquireInterface)(
148 id.pCurrentContextEnv, pCurrentContext );
149 id.pCurrentContext = pCurrentContext;
153 (*pEnv->release)( pEnv );
165 void ** ppCurrentContext, rtl_uString * pEnvTypeName,
void * pEnvContext )
173 if (*ppCurrentContext)
175 target_env =
Environment(OUString(pEnvTypeName), pEnvContext);
176 OSL_ASSERT( target_env.is() );
177 if (! target_env.is())
179 uno_ExtEnvironment * pEnv = target_env.get()->pExtEnv;
180 OSL_ASSERT(
nullptr != pEnv );
183 (*pEnv->releaseInterface)( pEnv, *ppCurrentContext );
185 *ppCurrentContext =
nullptr;
189 if (
nullptr ==
id.pCurrentContext)
192 if (! target_env.is())
194 target_env =
Environment(OUString(pEnvTypeName), pEnvContext);
195 OSL_ASSERT( target_env.is() );
196 if (! target_env.is())
200 Mapping mapping(&
id.pCurrentContextEnv->aBase, target_env.get());
201 OSL_ASSERT( mapping.is() );
sal_Bool SAL_CALL uno_getCurrentContext(void **ppCurrentContext, rtl_uString *pEnvTypeName, void *pEnvContext) SAL_THROW_EXTERN_C()
sal_Bool SAL_CALL uno_setCurrentContext(void *pCurrentContext, rtl_uString *pEnvTypeName, void *pEnvContext) SAL_THROW_EXTERN_C()
struct _uno_Environment uno_Environment
void SAL_CALL uno_getEnvironment(uno_Environment **ppEnv, rtl_uString *pEnvDcp, void *pContext) SAL_THROW_EXTERN_C()
struct _typelib_TypeDescription typelib_TypeDescription
static typelib_InterfaceTypeDescription * get_type_XCurrentContext()
IdContainer & getIdContainer()
typelib_TypeDescriptionReference **SAL_CALL typelib_static_type_getByTypeClass(typelib_TypeClass eTypeClass) SAL_THROW_EXTERN_C()
sal_Sequence * pCurrentId
sal_Sequence * pLocalThreadId
_uno_ExtEnvironment * pCurrentContextEnv
void SAL_CALL typelib_typedescriptionreference_new(typelib_TypeDescriptionReference **ppTDR, typelib_TypeClass eTypeClass, rtl_uString *pTypeName) SAL_THROW_EXTERN_C()
void SAL_CALL typelib_typedescription_register(typelib_TypeDescription **ppNewDescription) SAL_THROW_EXTERN_C()
void SAL_CALL typelib_typedescription_newInterface(typelib_InterfaceTypeDescription **ppRet, rtl_uString *pTypeName, SAL_UNUSED_PARAMETER sal_uInt32, SAL_UNUSED_PARAMETER sal_uInt16, SAL_UNUSED_PARAMETER sal_uInt16, SAL_UNUSED_PARAMETER sal_uInt32, SAL_UNUSED_PARAMETER sal_uInt32, typelib_TypeDescriptionReference *pBaseInterface, sal_Int32 nMembers, typelib_TypeDescriptionReference **ppMembers) SAL_THROW_EXTERN_C()
void SAL_CALL typelib_typedescription_release(typelib_TypeDescription *pTD) SAL_THROW_EXTERN_C()
void SAL_CALL typelib_typedescriptionreference_release(typelib_TypeDescriptionReference *pRef) SAL_THROW_EXTERN_C()
void SAL_CALL typelib_typedescription_newInterfaceMethod(typelib_InterfaceMethodTypeDescription **ppRet, sal_Int32 nAbsolutePosition, sal_Bool bOneWay, rtl_uString *pTypeName, typelib_TypeClass eReturnTypeClass, rtl_uString *pReturnTypeName, sal_Int32 nParams, typelib_Parameter_Init *pParams, sal_Int32 nExceptions, rtl_uString **ppExceptionNames) SAL_THROW_EXTERN_C()
#define SAL_THROW_EXTERN_C()