21#include <osl/mutex.hxx>
22#include <osl/thread.h>
23#include <osl/thread.hxx>
24#include <osl/diagnose.h>
28#include <com/sun/star/uno/Type.hxx>
37 oslThreadIdentifier m_threadId;
39 virtual ~LogBridge()
override;
44 virtual void v_callInto_v(uno_EnvCallee * pCallee, va_list * pParam)
override;
45 virtual void v_callOut_v (uno_EnvCallee * pCallee, va_list * pParam)
override;
47 virtual void v_enter()
override;
48 virtual void v_leave()
override;
50 virtual bool v_isValid(OUString * pReason)
override;
59LogBridge::~LogBridge()
61 OSL_ASSERT(m_count >= 0);
64void LogBridge::v_callInto_v(uno_EnvCallee * pCallee, va_list * pParam)
71void LogBridge::v_callOut_v(uno_EnvCallee * pCallee, va_list * pParam)
73 OSL_ASSERT(m_count > 0);
80 m_threadId = osl::Thread::getCurrentIdentifier();
83void LogBridge::v_enter()
87 OSL_ASSERT(m_count >= 0);
90 m_threadId = osl::Thread::getCurrentIdentifier();
95void LogBridge::v_leave()
97 OSL_ASSERT(m_count > 0);
107bool LogBridge::v_isValid(OUString * pReason)
112 *pReason =
"not entered";
116 result = m_threadId == osl::Thread::getCurrentIdentifier();
119 *pReason =
"wrong thread";
128 void traceValue(typelib_TypeDescriptionReference* _pTypeRef,
void* pArg)
130 switch(_pTypeRef->eTypeClass)
132 case typelib_TypeClass_STRING:
133 SAL_INFO(
"cppu.log",
"" << *
static_cast< OUString*
>(pArg));
135 case typelib_TypeClass_BOOLEAN:
138 case typelib_TypeClass_BYTE:
141 case typelib_TypeClass_CHAR:
142 SAL_INFO(
"cppu.log",
"" << *
static_cast<char*
>(pArg));
144 case typelib_TypeClass_SHORT:
145 case typelib_TypeClass_UNSIGNED_SHORT:
146 SAL_INFO(
"cppu.log",
"" << *
static_cast<sal_Int16*
>(pArg));
148 case typelib_TypeClass_LONG:
149 case typelib_TypeClass_UNSIGNED_LONG:
150 case typelib_TypeClass_ENUM:
151 SAL_INFO(
"cppu.log",
"" << *
static_cast<sal_Int32*
>(pArg));
153 case typelib_TypeClass_HYPER:
154 case typelib_TypeClass_UNSIGNED_HYPER:
155 SAL_INFO(
"cppu.log",
"" << *
static_cast<sal_Int64*
>(pArg));
157 case typelib_TypeClass_FLOAT:
158 SAL_INFO(
"cppu.log",
"" << *
static_cast<float*
>(pArg));
160 case typelib_TypeClass_DOUBLE:
161 SAL_INFO(
"cppu.log",
"" << *
static_cast<double*
>(pArg));
163 case typelib_TypeClass_TYPE:
166 case typelib_TypeClass_ANY:
167 if (
static_cast<uno_Any*
>(pArg)->pData )
168 traceValue(
static_cast<uno_Any*
>(pArg)->pType,
static_cast<uno_Any*
>(pArg)->pData);
172 case typelib_TypeClass_EXCEPTION:
175 case typelib_TypeClass_INTERFACE:
176 SAL_INFO(
"cppu.log",
"" << _pTypeRef->pTypeName <<
"0x" << std::hex << pArg);
178 case typelib_TypeClass_VOID:
182 SAL_INFO(
"cppu.log",
"0x" << std::hex << pArg);
190 SAL_UNUSED_PARAMETER
void * ,
191 SAL_UNUSED_PARAMETER
void * ,
192 typelib_TypeDescriptionReference * pReturnTypeRef,
193 typelib_MethodParameter * pParams,
201 if ( pMemberType && pMemberType->pTypeName )
203 OUString::unacquired(&pMemberType->pTypeName),RTL_TEXTENCODING_ASCII_US);
206 SAL_INFO(
"cppu.log",
"{ LogBridge () " << sTemp );
209 SAL_INFO(
"cppu.log",
"\n| : ( LogBridge ");
210 for(sal_Int32
i = 0;
i < nParams;++
i)
214 traceValue(pParams[
i].pTypeRef,pArgs[
i]);
223 SAL_INFO(
"cppu.log",
"} LogBridge () " << sTemp);
224 if ( ppException && *ppException )
226 SAL_INFO(
"cppu.log",
" exception occurred : ");
228 TYPELIB_DANGER_GET( &pElementTypeDescr, (*ppException)->pType );
229 SAL_INFO(
"cppu.log",
"" << pElementTypeDescr->pTypeName);
230 TYPELIB_DANGER_RELEASE( pElementTypeDescr );
232 else if ( pReturnTypeRef )
235 traceValue(pReturnTypeRef,pReturn);
242#ifdef DISABLE_DYNLOADING
244#define uno_initEnvironment log_uno_uno_initEnvironment
245#define uno_ext_getMapping log_uno_uno_ext_getMapping
static void LogProbe(bool pre, SAL_UNUSED_PARAMETER void *, SAL_UNUSED_PARAMETER void *, typelib_TypeDescriptionReference *pReturnTypeRef, typelib_MethodParameter *pParams, sal_Int32 nParams, typelib_TypeDescription const *pMemberType, void *pReturn, void *pArgs[], uno_Any **ppException)
void SAL_DLLPUBLIC_EXPORT uno_ext_getMapping(uno_Mapping **ppMapping, uno_Environment *pFrom, uno_Environment *pTo)
void SAL_DLLPUBLIC_EXPORT uno_initEnvironment(uno_Environment *pEnv) SAL_THROW_EXTERN_C()
C++ wrapper for binary C Enterable (http://wiki.openoffice.org/wiki/Uno/Cpp/Spec/Environment_Stack)
virtual bool v_isValid(rtl::OUString *pReason)=0
virtual void v_callOut_v(uno_EnvCallee *pCallee, va_list *pParam)=0
virtual void v_callInto_v(uno_EnvCallee *pCallee, va_list *pParam)=0
struct _uno_Environment uno_Environment
#define SAL_INFO(area, stream)
struct _uno_Mapping uno_Mapping
struct _typelib_TypeDescription typelib_TypeDescription
rtl::OUString getTypeName(rtl::OUString const &rEnvDcp)
Get the OBI type part of an environment descriptor.
void Environment_initWithEnterable(uno_Environment *pEnvironment, cppu::Enterable *pEnterable)
C++ helper for implementing Purpose Environments.
void createMapping(uno_Mapping **ppMapping, uno_Environment *pFrom, uno_Environment *pTo, ProbeFun *probeFun, void *pContext)
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
#define SAL_THROW_EXTERN_C()