diff options
Diffstat (limited to 'bridges/inc')
-rw-r--r-- | bridges/inc/bridges/cpp_uno/bridge.hxx | 504 | ||||
-rw-r--r-- | bridges/inc/bridges/cpp_uno/shared/arraypointer.hxx | 58 | ||||
-rw-r--r-- | bridges/inc/bridges/cpp_uno/shared/bridge.hxx | 131 | ||||
-rw-r--r-- | bridges/inc/bridges/cpp_uno/shared/cppinterfaceproxy.hxx | 109 | ||||
-rw-r--r-- | bridges/inc/bridges/cpp_uno/shared/types.hxx | 80 | ||||
-rw-r--r-- | bridges/inc/bridges/cpp_uno/shared/unointerfaceproxy.hxx | 119 | ||||
-rw-r--r-- | bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx | 218 | ||||
-rw-r--r-- | bridges/inc/bridges/cpp_uno/shared/vtables.hxx | 111 | ||||
-rw-r--r-- | bridges/inc/bridges/cpp_uno/type_misc.hxx | 132 | ||||
-rw-r--r-- | bridges/inc/makefile.mk | 47 | ||||
-rw-r--r-- | bridges/inc/pch/precompiled_bridges.cxx | 31 | ||||
-rw-r--r-- | bridges/inc/pch/precompiled_bridges.hxx | 151 |
12 files changed, 0 insertions, 1691 deletions
diff --git a/bridges/inc/bridges/cpp_uno/bridge.hxx b/bridges/inc/bridges/cpp_uno/bridge.hxx deleted file mode 100644 index b4e47185c..000000000 --- a/bridges/inc/bridges/cpp_uno/bridge.hxx +++ /dev/null @@ -1,504 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef _BRIDGES_CPP_UNO_BRIDGE_HXX_ -#define _BRIDGES_CPP_UNO_BRIDGE_HXX_ - -#include <bridges/cpp_uno/bridge.h> -#include <osl/mutex.hxx> -#include <rtl/process.h> -#include <rtl/ustrbuf.hxx> -#include <com/sun/star/uno/genfunc.hxx> -#include <com/sun/star/uno/XInterface.hpp> - - -namespace CPPU_CURRENT_NAMESPACE -{ - -//-------------------------------------------------------------------------------------------------- -inline void SAL_CALL cppu_cppInterfaceProxy_free( uno_ExtEnvironment * pEnv, void * pProxy ) SAL_THROW( () ) -{ - cppu_cppInterfaceProxy * pThis = - static_cast< cppu_cppInterfaceProxy * >( - reinterpret_cast< ::com::sun::star::uno::XInterface * >( pProxy ) ); - OSL_ASSERT( pEnv == pThis->pBridge->pCppEnv ); - - (*pThis->pBridge->pUnoEnv->revokeInterface)( pThis->pBridge->pUnoEnv, pThis->pUnoI ); - (*pThis->pUnoI->release)( pThis->pUnoI ); - ::typelib_typedescription_release( (typelib_TypeDescription *)pThis->pTypeDescr ); - pThis->pBridge->release(); - -#if OSL_DEBUG_LEVEL > 1 - *(int *)pProxy = 0xdeadbabe; -#endif - delete pThis; -} -//-------------------------------------------------------------------------------------------------- -inline void SAL_CALL cppu_Mapping_uno2cpp( - uno_Mapping * pMapping, void ** ppCppI, - void * pUnoI, typelib_InterfaceTypeDescription * pTypeDescr ) SAL_THROW( () ) -{ - OSL_ASSERT( ppCppI && pTypeDescr ); - if (*ppCppI) - { - reinterpret_cast< ::com::sun::star::uno::XInterface * >( *ppCppI )->release(); - *ppCppI = 0; - } - if (pUnoI) - { - cppu_Bridge * pBridge = static_cast< cppu_Mapping * >( pMapping )->pBridge; - - // get object id of uno interface to be wrapped - rtl_uString * pOId = 0; - (*pBridge->pUnoEnv->getObjectIdentifier)( pBridge->pUnoEnv, &pOId, pUnoI ); - OSL_ASSERT( pOId ); - - // try to get any known interface from target environment - (*pBridge->pCppEnv->getRegisteredInterface)( - pBridge->pCppEnv, ppCppI, pOId, pTypeDescr ); - - if (! *ppCppI) // no existing interface, register new proxy interface - { - // try to publish a new proxy (ref count initially 1) - cppu_cppInterfaceProxy * pProxy = new cppu_cppInterfaceProxy( - pBridge, reinterpret_cast< uno_Interface * >( pUnoI ), pTypeDescr, pOId ); - ::com::sun::star::uno::XInterface * pSurrogate = pProxy; - cppu_cppInterfaceProxy_patchVtable( pSurrogate, pProxy->pTypeDescr ); - - // proxy may be exchanged during registration - (*pBridge->pCppEnv->registerProxyInterface)( - pBridge->pCppEnv, reinterpret_cast< void ** >( &pSurrogate ), - (uno_freeProxyFunc)cppu_cppInterfaceProxy_free, pOId, pTypeDescr ); - - *ppCppI = pSurrogate; - } - ::rtl_uString_release( pOId ); - } -} -//__________________________________________________________________________________________________ -inline void cppu_cppInterfaceProxy::acquireProxy() SAL_THROW( () ) -{ - if (1 == osl_incrementInterlockedCount( &nRef )) - { - // rebirth of proxy zombie - // register at cpp env - void * pThis = static_cast< ::com::sun::star::uno::XInterface * >( this ); - (*pBridge->pCppEnv->registerProxyInterface)( - pBridge->pCppEnv, &pThis, (uno_freeProxyFunc)cppu_cppInterfaceProxy_free, - oid.pData, pTypeDescr ); - OSL_ASSERT( pThis == static_cast< ::com::sun::star::uno::XInterface * >( this ) ); - } -} -//__________________________________________________________________________________________________ -inline void cppu_cppInterfaceProxy::releaseProxy() SAL_THROW( () ) -{ - if (! osl_decrementInterlockedCount( &nRef )) // last release - { - // revoke from cpp env - (*pBridge->pCppEnv->revokeInterface)( - pBridge->pCppEnv, static_cast< ::com::sun::star::uno::XInterface * >( this ) ); - } -} -//__________________________________________________________________________________________________ -inline cppu_cppInterfaceProxy::cppu_cppInterfaceProxy( - cppu_Bridge * pBridge_, uno_Interface * pUnoI_, - typelib_InterfaceTypeDescription * pTypeDescr_, const ::rtl::OUString & rOId_ ) SAL_THROW( () ) - : nRef( 1 ) - , pBridge( pBridge_ ) - , pUnoI( pUnoI_ ) - , pTypeDescr( pTypeDescr_ ) - , oid( rOId_ ) -{ - pBridge->acquire(); - ::typelib_typedescription_acquire( (typelib_TypeDescription *)pTypeDescr ); - if (! ((typelib_TypeDescription *)pTypeDescr)->bComplete) - ::typelib_typedescription_complete( (typelib_TypeDescription **)&pTypeDescr ); - OSL_ENSURE( ((typelib_TypeDescription *)pTypeDescr)->bComplete, "### type is incomplete!" ); - (*pUnoI->acquire)( pUnoI ); - (*pBridge->pUnoEnv->registerInterface)( - pBridge->pUnoEnv, reinterpret_cast< void ** >( &pUnoI ), oid.pData, pTypeDescr ); -} - - -//################################################################################################## -//################################################################################################## -//################################################################################################## - - -//-------------------------------------------------------------------------------------------------- -inline void SAL_CALL cppu_unoInterfaceProxy_free( uno_ExtEnvironment * pEnv, void * pProxy ) SAL_THROW( () ) -{ - cppu_unoInterfaceProxy * pThis = - static_cast< cppu_unoInterfaceProxy * >( - reinterpret_cast< uno_Interface * >( pProxy ) ); - OSL_ASSERT( pEnv == pThis->pBridge->pUnoEnv ); - - (*pThis->pBridge->pCppEnv->revokeInterface)( pThis->pBridge->pCppEnv, pThis->pCppI ); - pThis->pCppI->release(); - ::typelib_typedescription_release( (typelib_TypeDescription *)pThis->pTypeDescr ); - pThis->pBridge->release(); - -#if OSL_DEBUG_LEVEL > 1 - *(int *)pProxy = 0xdeadbabe; -#endif - delete pThis; -} -//-------------------------------------------------------------------------------------------------- -inline void SAL_CALL cppu_unoInterfaceProxy_acquire( uno_Interface * pUnoI ) SAL_THROW( () ) -{ - if (1 == osl_incrementInterlockedCount( & static_cast< cppu_unoInterfaceProxy * >( pUnoI )->nRef )) - { - // rebirth of proxy zombie - // register at uno env -#if OSL_DEBUG_LEVEL > 1 - void * pThis = pUnoI; -#endif - (*static_cast< cppu_unoInterfaceProxy * >( pUnoI )->pBridge->pUnoEnv->registerProxyInterface)( - static_cast< cppu_unoInterfaceProxy * >( pUnoI )->pBridge->pUnoEnv, - reinterpret_cast< void ** >( &pUnoI ), - (uno_freeProxyFunc)cppu_unoInterfaceProxy_free, - static_cast< cppu_unoInterfaceProxy * >( pUnoI )->oid.pData, - static_cast< cppu_unoInterfaceProxy * >( pUnoI )->pTypeDescr ); -#if OSL_DEBUG_LEVEL > 1 - OSL_ASSERT( pThis == pUnoI ); -#endif - } -} -//-------------------------------------------------------------------------------------------------- -inline void SAL_CALL cppu_unoInterfaceProxy_release( uno_Interface * pUnoI ) SAL_THROW( () ) -{ - if (! osl_decrementInterlockedCount( & static_cast< cppu_unoInterfaceProxy * >( pUnoI )->nRef )) - { - // revoke from uno env on last release - (*static_cast< cppu_unoInterfaceProxy * >( pUnoI )->pBridge->pUnoEnv->revokeInterface)( - static_cast< cppu_unoInterfaceProxy * >( pUnoI )->pBridge->pUnoEnv, pUnoI ); - } -} -//-------------------------------------------------------------------------------------------------- -inline void SAL_CALL cppu_Mapping_cpp2uno( - uno_Mapping * pMapping, void ** ppUnoI, - void * pCppI, typelib_InterfaceTypeDescription * pTypeDescr ) SAL_THROW( () ) -{ - OSL_ENSURE( ppUnoI && pTypeDescr, "### null ptr!" ); - if (*ppUnoI) - { - (*reinterpret_cast< uno_Interface * >( *ppUnoI )->release)( - reinterpret_cast< uno_Interface * >( *ppUnoI ) ); - *ppUnoI = 0; - } - if (pCppI) - { - cppu_Bridge * pBridge = static_cast< cppu_Mapping * >( pMapping )->pBridge; - - // get object id of interface to be wrapped - rtl_uString * pOId = 0; - (*pBridge->pCppEnv->getObjectIdentifier)( pBridge->pCppEnv, &pOId, pCppI ); - OSL_ASSERT( pOId ); - - // try to get any known interface from target environment - (*pBridge->pUnoEnv->getRegisteredInterface)( - pBridge->pUnoEnv, ppUnoI, pOId, pTypeDescr ); - - if (! *ppUnoI) // no existing interface, register new proxy interface - { - // try to publish a new proxy (refcount initially 1) - uno_Interface * pSurrogate = new cppu_unoInterfaceProxy( - pBridge, reinterpret_cast< ::com::sun::star::uno::XInterface * >( pCppI ), - pTypeDescr, pOId ); - - // proxy may be exchanged during registration - (*pBridge->pUnoEnv->registerProxyInterface)( - pBridge->pUnoEnv, reinterpret_cast< void ** >( &pSurrogate ), - (uno_freeProxyFunc)cppu_unoInterfaceProxy_free, pOId, pTypeDescr ); - - *ppUnoI = pSurrogate; - } - ::rtl_uString_release( pOId ); - } -} -//__________________________________________________________________________________________________ -inline cppu_unoInterfaceProxy::cppu_unoInterfaceProxy( - cppu_Bridge * pBridge_, ::com::sun::star::uno::XInterface * pCppI_, - typelib_InterfaceTypeDescription * pTypeDescr_, const ::rtl::OUString & rOId_ ) SAL_THROW( () ) - : nRef( 1 ) - , pBridge( pBridge_ ) - , pCppI( pCppI_ ) - , pTypeDescr( pTypeDescr_ ) - , oid( rOId_ ) -{ - pBridge->acquire(); - ::typelib_typedescription_acquire( (typelib_TypeDescription *)pTypeDescr ); - if (! ((typelib_TypeDescription *)pTypeDescr)->bComplete) - ::typelib_typedescription_complete( (typelib_TypeDescription **)&pTypeDescr ); - OSL_ENSURE( ((typelib_TypeDescription *)pTypeDescr)->bComplete, "### type is incomplete!" ); - pCppI->acquire(); - (*pBridge->pCppEnv->registerInterface)( - pBridge->pCppEnv, reinterpret_cast< void ** >( &pCppI ), oid.pData, pTypeDescr ); - - // uno_Interface - uno_Interface::acquire = cppu_unoInterfaceProxy_acquire; - uno_Interface::release = cppu_unoInterfaceProxy_release; - uno_Interface::pDispatcher = (uno_DispatchMethod)cppu_unoInterfaceProxy_dispatch; -} - - -//################################################################################################## -//################################################################################################## -//################################################################################################## - - -//-------------------------------------------------------------------------------------------------- -inline void SAL_CALL cppu_Mapping_acquire( uno_Mapping * pMapping ) SAL_THROW( () ) -{ - static_cast< cppu_Mapping * >( pMapping )->pBridge->acquire(); -} -//-------------------------------------------------------------------------------------------------- -inline void SAL_CALL cppu_Mapping_release( uno_Mapping * pMapping ) SAL_THROW( () ) -{ - static_cast< cppu_Mapping * >( pMapping )->pBridge->release(); -} -//__________________________________________________________________________________________________ -inline cppu_Bridge::cppu_Bridge( - uno_ExtEnvironment * pCppEnv_, uno_ExtEnvironment * pUnoEnv_, - sal_Bool bExportCpp2Uno_ ) SAL_THROW( () ) - : nRef( 1 ) - , pCppEnv( pCppEnv_ ) - , pUnoEnv( pUnoEnv_ ) - , bExportCpp2Uno( bExportCpp2Uno_ ) -{ - g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt ); - - aCpp2Uno.pBridge = this; - aCpp2Uno.acquire = cppu_Mapping_acquire; - aCpp2Uno.release = cppu_Mapping_release; - aCpp2Uno.mapInterface = cppu_Mapping_cpp2uno; - - aUno2Cpp.pBridge = this; - aUno2Cpp.acquire = cppu_Mapping_acquire; - aUno2Cpp.release = cppu_Mapping_release; - aUno2Cpp.mapInterface = cppu_Mapping_uno2cpp; - - (*((uno_Environment *)pCppEnv)->acquire)( (uno_Environment *)pCppEnv ); - (*((uno_Environment *)pUnoEnv)->acquire)( (uno_Environment *)pUnoEnv ); -} -//__________________________________________________________________________________________________ -inline cppu_Bridge::~cppu_Bridge() SAL_THROW( () ) -{ - (*((uno_Environment *)pUnoEnv)->release)( (uno_Environment *)pUnoEnv ); - (*((uno_Environment *)pCppEnv)->release)( (uno_Environment *)pCppEnv ); - g_moduleCount.modCnt.release( &g_moduleCount.modCnt ); -} -//__________________________________________________________________________________________________ -inline void SAL_CALL cppu_Bridge_free( uno_Mapping * pMapping ) SAL_THROW( () ) -{ - delete static_cast< cppu_Mapping * >( pMapping )->pBridge; -} -//__________________________________________________________________________________________________ -inline void cppu_Bridge::acquire() SAL_THROW( () ) -{ - if (1 == osl_incrementInterlockedCount( &nRef )) - { - if (bExportCpp2Uno) - { - uno_Mapping * pMapping = &aCpp2Uno; - ::uno_registerMapping( - &pMapping, cppu_Bridge_free, - (uno_Environment *)pCppEnv, (uno_Environment *)pUnoEnv, 0 ); - } - else - { - uno_Mapping * pMapping = &aUno2Cpp; - ::uno_registerMapping( - &pMapping, cppu_Bridge_free, - (uno_Environment *)pUnoEnv, (uno_Environment *)pCppEnv, 0 ); - } - } -} -//__________________________________________________________________________________________________ -inline void cppu_Bridge::release() SAL_THROW( () ) -{ - if (! osl_decrementInterlockedCount( &nRef )) - { - ::uno_revokeMapping( bExportCpp2Uno ? &aCpp2Uno : &aUno2Cpp ); - } -} - -//################################################################################################## -inline void SAL_CALL cppu_ext_getMapping( - uno_Mapping ** ppMapping, uno_Environment * pFrom, uno_Environment * pTo ) SAL_THROW( () ) -{ - OSL_ASSERT( ppMapping && pFrom && pTo ); - if (ppMapping && pFrom && pTo && pFrom->pExtEnv && pTo->pExtEnv) - { - uno_Mapping * pMapping = 0; - - if (0 == rtl_ustr_ascii_compare( pFrom->pTypeName->buffer, CPPU_CURRENT_LANGUAGE_BINDING_NAME ) && - 0 == rtl_ustr_ascii_compare( pTo->pTypeName->buffer, UNO_LB_UNO )) - { - // ref count initially 1 - pMapping = &(new cppu_Bridge( pFrom->pExtEnv, pTo->pExtEnv, sal_True ))->aCpp2Uno; - ::uno_registerMapping( - &pMapping, cppu_Bridge_free, - (uno_Environment *)pFrom->pExtEnv, - (uno_Environment *)pTo->pExtEnv, 0 ); - } - else if (0 == rtl_ustr_ascii_compare( pTo->pTypeName->buffer, CPPU_CURRENT_LANGUAGE_BINDING_NAME ) && - 0 == rtl_ustr_ascii_compare( pFrom->pTypeName->buffer, UNO_LB_UNO )) - { - // ref count initially 1 - pMapping = &(new cppu_Bridge( pTo->pExtEnv, pFrom->pExtEnv, sal_False ))->aUno2Cpp; - ::uno_registerMapping( - &pMapping, cppu_Bridge_free, - (uno_Environment *)pFrom->pExtEnv, - (uno_Environment *)pTo->pExtEnv, 0 ); - } - - if (*ppMapping) - { - (*(*ppMapping)->release)( *ppMapping ); - } - if (pMapping) - *ppMapping = pMapping; - } -} - - -//################################################################################################## -//################################################################################################## -//################################################################################################## - -#if (defined(__SUNPRO_CC) && (__SUNPRO_CC == 0x500)) -static ::rtl::OUString * s_pStaticOidPart = 0; -#endif - -// environment init stuff -//-------------------------------------------------------------------------------------------------- -inline const ::rtl::OUString & SAL_CALL cppu_cppenv_getStaticOIdPart() SAL_THROW( () ) -{ -#if ! (defined(__SUNPRO_CC) && (__SUNPRO_CC == 0x500)) - static ::rtl::OUString * s_pStaticOidPart = 0; -#endif - if (! s_pStaticOidPart) - { - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - if (! s_pStaticOidPart) - { - ::rtl::OUStringBuffer aRet( 64 ); - aRet.appendAscii( RTL_CONSTASCII_STRINGPARAM("];") ); - // good guid - sal_uInt8 ar[16]; - ::rtl_getGlobalProcessId( ar ); - for ( sal_Int32 i = 0; i < 16; ++i ) - { - aRet.append( (sal_Int32)ar[i], 16 ); - } -#if (defined(__SUNPRO_CC) && (__SUNPRO_CC == 0x500)) - s_pStaticOidPart = new ::rtl::OUString( aRet.makeStringAndClear() ); -#else - static ::rtl::OUString s_aStaticOidPart( aRet.makeStringAndClear() ); - s_pStaticOidPart = &s_aStaticOidPart; -#endif - } - } - return *s_pStaticOidPart; -} -// functions set at environment init -//-------------------------------------------------------------------------------------------------- -inline void SAL_CALL cppu_cppenv_computeObjectIdentifier( - uno_ExtEnvironment * pEnv, rtl_uString ** ppOId, void * pInterface ) SAL_THROW( () ) -{ - OSL_ENSURE( pEnv && ppOId && pInterface, "### null ptr!" ); - if (pEnv && ppOId && pInterface) - { - if (*ppOId) - { - rtl_uString_release( *ppOId ); - *ppOId = 0; - } - - try - { - ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xHome( - reinterpret_cast< ::com::sun::star::uno::XInterface * >( pInterface ), - ::com::sun::star::uno::UNO_QUERY ); - OSL_ENSURE( xHome.is(), "### query to XInterface failed!" ); - if (xHome.is()) - { - // interface - ::rtl::OUStringBuffer oid( 64 ); - oid.append( (sal_Int64)xHome.get(), 16 ); - oid.append( (sal_Unicode)';' ); - // ;environment[context] - oid.append( - *reinterpret_cast< ::rtl::OUString const * >( - &((uno_Environment *) pEnv)->pTypeName ) ); - oid.append( (sal_Unicode)'[' ); - oid.append( (sal_Int64)((uno_Environment *)pEnv)->pContext, 16 ); - // ];good guid - oid.append( cppu_cppenv_getStaticOIdPart() ); - ::rtl::OUString aRet( oid.makeStringAndClear() ); - ::rtl_uString_acquire( *ppOId = aRet.pData ); - } - } - catch (::com::sun::star::uno::RuntimeException &) - { - OSL_FAIL( "### RuntimeException occurred udring queryInterface()!" ); - } - } -} -//-------------------------------------------------------------------------------------------------- -inline void SAL_CALL cppu_cppenv_acquireInterface( uno_ExtEnvironment *, void * pCppI ) SAL_THROW( () ) -{ - reinterpret_cast< ::com::sun::star::uno::XInterface * >( pCppI )->acquire(); -} -//-------------------------------------------------------------------------------------------------- -inline void SAL_CALL cppu_cppenv_releaseInterface( uno_ExtEnvironment *, void * pCppI ) SAL_THROW( () ) -{ - reinterpret_cast< ::com::sun::star::uno::XInterface * >( pCppI )->release(); -} -//-------------------------------------------------------------------------------------------------- -inline void SAL_CALL cppu_cppenv_environmentDisposing( uno_Environment * ) SAL_THROW( () ) -{ - g_moduleCount.modCnt.release( &g_moduleCount.modCnt ); -} -//-------------------------------------------------------------------------------------------------- -inline void SAL_CALL cppu_cppenv_initEnvironment( uno_Environment * pCppEnv ) SAL_THROW( () ) -{ - OSL_ENSURE( pCppEnv->pExtEnv, "### expected extended environment!" ); - OSL_ENSURE( ::rtl_ustr_ascii_compare( pCppEnv->pTypeName->buffer, CPPU_CURRENT_LANGUAGE_BINDING_NAME ) == 0, "### wrong environment type!" ); - g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt ); - ((uno_ExtEnvironment *)pCppEnv)->computeObjectIdentifier = cppu_cppenv_computeObjectIdentifier; - ((uno_ExtEnvironment *)pCppEnv)->acquireInterface = cppu_cppenv_acquireInterface; - ((uno_ExtEnvironment *)pCppEnv)->releaseInterface = cppu_cppenv_releaseInterface; - pCppEnv->environmentDisposing = cppu_cppenv_environmentDisposing; -} - -} - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/bridges/inc/bridges/cpp_uno/shared/arraypointer.hxx b/bridges/inc/bridges/cpp_uno/shared/arraypointer.hxx deleted file mode 100644 index f18520ec8..000000000 --- a/bridges/inc/bridges/cpp_uno/shared/arraypointer.hxx +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_ARRAYPOINTER_HXX -#define INCLUDED_BRIDGES_CPP_UNO_SHARED_ARRAYPOINTER_HXX - -#include "sal/config.h" - -namespace bridges { namespace cpp_uno { namespace shared { - -/** - * A simple smart pointer that holds an array until it is being released. - */ -template< typename T > class ArrayPointer { -public: - ArrayPointer(T * p): p_(p) {} - - ~ArrayPointer() { delete[] p_; } - - T * release() { T * t = p_; p_ = 0; return t; } - -private: - ArrayPointer(ArrayPointer &); // not defined - void operator =(ArrayPointer &); // not defined - - T * p_; -}; - -} } } - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/bridges/inc/bridges/cpp_uno/shared/bridge.hxx b/bridges/inc/bridges/cpp_uno/shared/bridge.hxx deleted file mode 100644 index 35bf11d90..000000000 --- a/bridges/inc/bridges/cpp_uno/shared/bridge.hxx +++ /dev/null @@ -1,131 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_BRIDGE_HXX -#define INCLUDED_BRIDGES_CPP_UNO_SHARED_BRIDGE_HXX - -#include "osl/interlck.h" -#include "sal/types.h" -#include "typelib/typedescription.h" -#include "uno/environment.h" -#include "uno/mapping.h" - -namespace bridges { namespace cpp_uno { namespace shared { - -// private: -extern "C" typedef void SAL_CALL FreeMapping(uno_Mapping *); -FreeMapping freeMapping; - -// private: -extern "C" -typedef void SAL_CALL AcquireMapping(uno_Mapping *); -AcquireMapping acquireMapping; - -// private: -extern "C" -typedef void SAL_CALL ReleaseMapping(uno_Mapping *); -ReleaseMapping releaseMapping; - -// private: -extern "C" typedef void SAL_CALL Cpp2unoMapping( - uno_Mapping *, void **, void *, typelib_InterfaceTypeDescription *); -Cpp2unoMapping cpp2unoMapping; - -// private: -extern "C" typedef void SAL_CALL Uno2cppMapping( - uno_Mapping *, void **, void *, typelib_InterfaceTypeDescription *); -Uno2cppMapping uno2cppMapping; - -/** - * Holding environments and mappings. - */ -class Bridge { -public: - // Interface for generic/component.cxx: - - static uno_Mapping * createMapping( - uno_ExtEnvironment * pCppEnv, uno_ExtEnvironment * pUnoEnv, - bool bExportCpp2Uno) SAL_THROW(()); - - // Interface for Cpp/UnoInterfaceProxy: - - void acquire() SAL_THROW(()); - void release() SAL_THROW(()); - - // Interface for individual CPP--UNO bridges: - - uno_ExtEnvironment * getCppEnv() { return pCppEnv; } - uno_ExtEnvironment * getUnoEnv() { return pUnoEnv; } - - uno_Mapping * getCpp2Uno() { return &aCpp2Uno; } - uno_Mapping * getUno2Cpp() { return &aUno2Cpp; } - -private: - Bridge(Bridge &); // not implemented - void operator =(Bridge); // not implemented - - Bridge( - uno_ExtEnvironment * pCppEnv_, uno_ExtEnvironment * pUnoEnv_, - bool bExportCpp2Uno_) SAL_THROW(()); - - ~Bridge() SAL_THROW(()); - - struct Mapping: public uno_Mapping { - Bridge * pBridge; - }; - - oslInterlockedCount nRef; - - uno_ExtEnvironment * pCppEnv; - uno_ExtEnvironment * pUnoEnv; - - Mapping aCpp2Uno; - Mapping aUno2Cpp; - - bool bExportCpp2Uno; - - friend void SAL_CALL freeMapping(uno_Mapping * pMapping); - - friend void SAL_CALL acquireMapping(uno_Mapping * pMapping); - - friend void SAL_CALL releaseMapping(uno_Mapping * pMapping); - - friend void SAL_CALL cpp2unoMapping( - uno_Mapping * pMapping, void ** ppUnoI, void * pCppI, - typelib_InterfaceTypeDescription * pTypeDescr); - - friend void SAL_CALL uno2cppMapping( - uno_Mapping * pMapping, void ** ppCppI, void * pUnoI, - typelib_InterfaceTypeDescription * pTypeDescr); -}; - -} } } - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/bridges/inc/bridges/cpp_uno/shared/cppinterfaceproxy.hxx b/bridges/inc/bridges/cpp_uno/shared/cppinterfaceproxy.hxx deleted file mode 100644 index ffaada865..000000000 --- a/bridges/inc/bridges/cpp_uno/shared/cppinterfaceproxy.hxx +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_CPPINTERFACEPROXY_HXX -#define INCLUDED_BRIDGES_CPP_UNO_SHARED_CPPINTERFACEPROXY_HXX - -#include "osl/interlck.h" -#include "rtl/ustring.hxx" -#include "sal/types.h" -#include "typelib/typedescription.h" -#include "uno/dispatcher.h" -#include "uno/environment.h" -#include "bridges/cpp_uno/shared/vtablefactory.hxx" - -namespace com { namespace sun { namespace star { namespace uno { - class XInterface; -} } } } - -namespace bridges { namespace cpp_uno { namespace shared { - -class Bridge; - -extern "C" typedef void SAL_CALL FreeCppInterfaceProxy( - uno_ExtEnvironment * pEnv, void * pInterface); -FreeCppInterfaceProxy freeCppInterfaceProxy; - -/** - * A cpp proxy wrapping a uno interface. - */ -class CppInterfaceProxy { -public: - // Interface for Bridge: - - static com::sun::star::uno::XInterface * create( - Bridge * pBridge, uno_Interface * pUnoI, - typelib_InterfaceTypeDescription * pTypeDescr, - rtl::OUString const & rOId) SAL_THROW(()); - - // Interface for individual CPP--UNO bridges: - - Bridge * getBridge() { return pBridge; } - uno_Interface * getUnoI() { return pUnoI; } - typelib_InterfaceTypeDescription * getTypeDescr() { return pTypeDescr; } - rtl::OUString getOid() { return oid; } - - // non virtual methods called on incoming vtable calls #1, #2 - void acquireProxy() SAL_THROW(()); - void releaseProxy() SAL_THROW(()); - - static CppInterfaceProxy * castInterfaceToProxy(void * pInterface); - -private: - CppInterfaceProxy(CppInterfaceProxy &); // not implemented - void operator =(CppInterfaceProxy); // not implemented - - CppInterfaceProxy( - Bridge * pBridge_, uno_Interface * pUnoI_, - typelib_InterfaceTypeDescription * pTypeDescr_, - rtl::OUString const & rOId_) SAL_THROW(()); - - ~CppInterfaceProxy(); - - static com::sun::star::uno::XInterface * castProxyToInterface( - CppInterfaceProxy * pProxy); - - oslInterlockedCount nRef; - Bridge * pBridge; - - // mapping information - uno_Interface * pUnoI; // wrapped interface - typelib_InterfaceTypeDescription * pTypeDescr; - rtl::OUString oid; - - VtableFactory::Slot * vtables[1]; - - friend void SAL_CALL freeCppInterfaceProxy( - uno_ExtEnvironment * pEnv, void * pInterface); -}; - -} } } - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/bridges/inc/bridges/cpp_uno/shared/types.hxx b/bridges/inc/bridges/cpp_uno/shared/types.hxx deleted file mode 100644 index bb3b4f717..000000000 --- a/bridges/inc/bridges/cpp_uno/shared/types.hxx +++ /dev/null @@ -1,80 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_TYPES_HXX -#define INCLUDED_BRIDGES_CPP_UNO_SHARED_TYPES_HXX - -#include "typelib/typeclass.h" -#include "typelib/typedescription.h" - -namespace bridges { namespace cpp_uno { namespace shared { - -/** - * Determines whether a type is a "simple" type (VOID, BOOLEAN, BYTE, SHORT, - * UNSIGNED SHORT, LONG, UNSIGNED LONG, HYPER, UNSIGNED HYPER, FLOAT, DOUBLE, - * CHAR, or an enum type). - * - * @param typeClass a type class - * @return true if the given type is "simple" - */ -bool isSimpleType(typelib_TypeClass typeClass); - -/** - * Determines whether a type is a "simple" type (VOID, BOOLEAN, BYTE, SHORT, - * UNSIGNED SHORT, LONG, UNSIGNED LONG, HYPER, UNSIGNED HYPER, FLOAT, DOUBLE, - * CHAR, or an enum type). - * - * @param type a non-null pointer to a type description reference - * @return true if the given type is "simple" - */ -bool isSimpleType(typelib_TypeDescriptionReference const * type); - -/** - * Determines whether a type is a "simple" type (VOID, BOOLEAN, BYTE, SHORT, - * UNSIGNED SHORT, LONG, UNSIGNED LONG, HYPER, UNSIGNED HYPER, FLOAT, DOUBLE, - * CHAR, or an enum type). - * - * @param type a non-null pointer to a type description - * @return true if the given type is "simple" - */ -bool isSimpleType(typelib_TypeDescription const * type); - -/** - * Determines whether a type relates to an interface type (is itself an - * interface type, or might contain entities of interface type). - * - * @param type a non-null pointer to a type description - * @return true if the given type relates to an interface type - */ -bool relatesToInterfaceType(typelib_TypeDescription const * type); - -} } } - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/bridges/inc/bridges/cpp_uno/shared/unointerfaceproxy.hxx b/bridges/inc/bridges/cpp_uno/shared/unointerfaceproxy.hxx deleted file mode 100644 index a3c89f9f3..000000000 --- a/bridges/inc/bridges/cpp_uno/shared/unointerfaceproxy.hxx +++ /dev/null @@ -1,119 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_UNOINTERFACEPROXY_HXX -#define INCLUDED_BRIDGES_CPP_UNO_SHARED_UNOINTERFACEPROXY_HXX - -#include "osl/interlck.h" -#include "rtl/ustring.hxx" -#include "sal/types.h" -#include "typelib/typedescription.h" -#include "uno/dispatcher.h" -#include "uno/environment.h" - -namespace com { namespace sun { namespace star { namespace uno { - class XInterface; -} } } } - -namespace bridges { namespace cpp_uno { namespace shared { - -class Bridge; - -extern "C" typedef void SAL_CALL FreeUnoInterfaceProxy( - uno_ExtEnvironment * pEnv, void * pProxy); -FreeUnoInterfaceProxy freeUnoInterfaceProxy; - -// private: -extern "C" typedef void SAL_CALL UnoInterfaceProxyDispatch( - uno_Interface * pUnoI, typelib_TypeDescription const * pMemberDescr, - void * pReturn, void * pArgs[], uno_Any ** ppException); -UnoInterfaceProxyDispatch unoInterfaceProxyDispatch; - // this function is not defined in the generic part, but instead has to be - // defined individually for each CPP--UNO bridge - -// private: -extern "C" typedef void SAL_CALL AcquireProxy(uno_Interface *); -AcquireProxy acquireProxy; - -// private: -extern "C" typedef void SAL_CALL ReleaseProxy(uno_Interface *); -ReleaseProxy releaseProxy; - -/** - * A uno proxy wrapping a cpp interface. - */ -class UnoInterfaceProxy: public uno_Interface { -public: - // Interface for Bridge: - - static UnoInterfaceProxy * create( - Bridge * pBridge, com::sun::star::uno::XInterface * pCppI, - typelib_InterfaceTypeDescription * pTypeDescr, - rtl::OUString const & rOId) SAL_THROW(()); - - // Interface for individual CPP--UNO bridges: - - Bridge * getBridge() { return pBridge; } - com::sun::star::uno::XInterface * getCppI() { return pCppI; } - -private: - UnoInterfaceProxy(UnoInterfaceProxy &); // not implemented - void operator =(UnoInterfaceProxy); // not implemented - - UnoInterfaceProxy( - Bridge * pBridge_, com::sun::star::uno::XInterface * pCppI_, - typelib_InterfaceTypeDescription * pTypeDescr_, - rtl::OUString const & rOId_) SAL_THROW(()); - - ~UnoInterfaceProxy(); - - oslInterlockedCount nRef; - Bridge * pBridge; - - // mapping information - com::sun::star::uno::XInterface * pCppI; // wrapped interface - typelib_InterfaceTypeDescription * pTypeDescr; - rtl::OUString oid; - - friend void SAL_CALL freeUnoInterfaceProxy( - uno_ExtEnvironment * pEnv, void * pProxy); - - friend void SAL_CALL unoInterfaceProxyDispatch( - uno_Interface * pUnoI, typelib_TypeDescription const * pMemberDescr, - void * pReturn, void * pArgs[], uno_Any ** ppException); - - friend void SAL_CALL acquireProxy(uno_Interface * pUnoI); - - friend void SAL_CALL releaseProxy(uno_Interface * pUnoI); -}; - -} } } - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx b/bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx deleted file mode 100644 index c0168a512..000000000 --- a/bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx +++ /dev/null @@ -1,218 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_VTABLEFACTORY_HXX -#define INCLUDED_BRIDGES_CPP_UNO_SHARED_VTABLEFACTORY_HXX - -#include "osl/mutex.hxx" -#include "rtl/alloc.h" -#include "rtl/ustring.hxx" -#include "sal/types.h" -#include "typelib/typedescription.hxx" - -#include <boost/unordered_map.hpp> - -/*See: http://people.redhat.com/drepper/selinux-mem.html*/ -#if defined(LINUX) || defined(OPENBSD) || defined(FREEBSD) \ - || defined(NETBSD) || defined(DRAGONFLY) -#define USE_DOUBLE_MMAP -#endif - -namespace bridges { namespace cpp_uno { namespace shared { - -/** Hand out vtable structures for interface type descriptions. - */ -class VtableFactory { -public: - // This structure is not defined in the generic part, but instead has to be - // defined individually for each CPP--UNO bridge: - /** A vtable slot. - */ - struct Slot; - - /** A raw vtable block. - */ - struct Block { - /** The start of the raw vtable block. - - It points to the start of the allocated memory block, whereas the - vtable pointer typically points some bytes into the block (e.g., - skipping an RTTI pointer, see mapBlockToVtable). Also, the block - contains any generated code snippets, after the vtable itself. - */ - void * start; - -#ifdef USE_DOUBLE_MMAP - /** When seperately mmapping the block for writing and executing - exec points to the same memory as start, except start is used - exclusively for writing and exec for executing - */ - void * exec; - - /** File handle for the underlying anonymous file - */ - int fd; -#endif - - /** The size of the raw vtable block, in bytes. - */ - sal_Size size; - }; - - /** The vtable structure corresponding to an interface type. - */ - struct Vtables { - /** The number of blocks/vtables. - */ - sal_Int32 count; - - /** An array of blocks, representing the multiple vtables of a - (multiple-inheritance) type. - - <p>A block is a raw vtable. It points to the start of the allocated - memory block, whereas the vtable pointer typically points some bytes - into the block (e.g., skipping an RTTI pointer, see - mapBlockToVtable). Also, the block contains any generated code - snippets, after the vtable itself.</p> - */ - Block * blocks; - }; - - VtableFactory(); - - ~VtableFactory(); - - /** Given an interface type description, return its corresponding vtable - structure. - */ - Vtables getVtables(typelib_InterfaceTypeDescription * type); - - // This function is not defined in the generic part, but instead has to be - // defined individually for each CPP--UNO bridge: - /** Given a pointer to a block, turn it into a vtable pointer. - */ - static Slot * mapBlockToVtable(void * block); - -private: - class GuardedBlocks; - friend class GuardedBlocks; - - class BaseOffset; - - VtableFactory(VtableFactory &); // not implemented - void operator =(VtableFactory); // not implemented - - bool createBlock(Block &block, sal_Int32 slotCount) const; - - void freeBlock(Block const & block) const; - - void createVtables( - GuardedBlocks & blocks, BaseOffset const & baseOffset, - typelib_InterfaceTypeDescription * type, bool includePrimary) const; - - // This function is not defined in the generic part, but instead has to be - // defined individually for each CPP--UNO bridge: - /** Calculate the size of a raw vtable block. - - @param slotCount the number of virtual function slots the returned - vtable block shall support (if there are any platform-specific slots, - like an RTTI pointer, or a pointer to a destructor, they are not covered - by slotCount) - @return the size of the raw vtable block, in bytes - */ - static sal_Size getBlockSize(sal_Int32 slotCount); - - // This function is not defined in the generic part, but instead has to be - // defined individually for each CPP--UNO bridge: - /** Initialize a raw vtable block. - - @param block the start address of the raw vtable block - @param slotCount the number of slots - @return a pointer past the last vtable slot - */ - static Slot * initializeBlock(void * block, sal_Int32 slotCount); - - // This function is not defined in the generic part, but instead has to be - // defined individually for each CPP--UNO bridge: - /** Fill the vtable slots corresponding to all local (i.e., not inherited) - functions of a given interface type (and generate any necessary code - snippets for them). - - @param slots on input, points past the vtable slot to be filled with - the last virtual function local to the given type; on output, points to - the vtable slot filled with the first virtual function local to the - given type - @param code points to the start of the area where code snippets can be - generated - @param writetoexecdiff when the same code area is mmaped twice, once for - writing for code-generation, and once for code-execution, then this - records the offset from a writable address to its executable address - @param type the interface type description for which to generate vtable - slots - @param functionOffset the function offset of the first vtable slot - (typically coded into the code snippet for that vtable slot) - @param functionCount the number of vtable slots to fill (the number of - local functions of the given type, passed in so that it need not be - recomputed) - @param vtableOffset the offset of this vtable (needed to adjust the - this pointer, typically coded into the code snippets for all the filled - vtable slots) - @return a pointer to the remaining code snippet area - */ - static unsigned char * addLocalFunctions( - Slot ** slots, unsigned char * code, -#ifdef USE_DOUBLE_MMAP - sal_PtrDiff writetoexecdiff, -#endif - typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset, - sal_Int32 functionCount, sal_Int32 vtableOffset); - - // This function is not defined in the generic part, but instead has to be - // defined individually for each CPP--UNO bridge: - /** Flush all the generated code snippets of a vtable, on platforms that - require it. - - @param begin points to the start of the code snippet area - @param end points behind the end of the code snippet area - */ - static void flushCode( - unsigned char const * begin, unsigned char const * end); - - typedef boost::unordered_map< rtl::OUString, Vtables, rtl::OUStringHash > Map; - - osl::Mutex m_mutex; - Map m_map; - - rtl_arena_type * m_arena; -}; - -} } } - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/bridges/inc/bridges/cpp_uno/shared/vtables.hxx b/bridges/inc/bridges/cpp_uno/shared/vtables.hxx deleted file mode 100644 index f282f997b..000000000 --- a/bridges/inc/bridges/cpp_uno/shared/vtables.hxx +++ /dev/null @@ -1,111 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_VTABLES_HXX -#define INCLUDED_BRIDGES_CPP_UNO_SHARED_VTABLES_HXX - -#include "sal/types.h" -#include "typelib/typedescription.h" - -namespace bridges { namespace cpp_uno { namespace shared { - -/** - * Calculate the number of local functions of an interface type. - * - * <p><em>Local</em> functions are those not inherited from any base types. The - * number of <em>functions</em> is potentially larger than the number of - * <em>members</em>, as each read–write attribute member counts as two - * functions.</p> - * - * @param type a non-null pointer to an interface type description, for which - * <code>typelib_typedescription_complete</code> must already have been - * executed - * @return the number of local functions of the given interface type - */ -sal_Int32 getLocalFunctions(typelib_InterfaceTypeDescription const * type); - -/** - * Calculate the number of primary functions of an interface type. - * - * <p>The number of primary functions of an interface is the number of local - * functions of that interface (see <code>getLocalFunctions</code>), plus the - * number of primary functions of that interface's first base type (if it has at - * least one base type).</p> - * - * @param type a pointer to an interface type description; may be null - * @return the number of primary functions of the given interface type, or zero - * if the given interface type is null - */ -sal_Int32 getPrimaryFunctions(typelib_InterfaceTypeDescription * type); - -/** - * Represents a vtable slot of a C++ class. - */ -struct VtableSlot { - /** - * The offset of the vtable. - * - * <p>Multiple-inheritance C++ classes have more than one vtable. The - * offset is logical (<em>not</em> a byte offset), and must be - * non-negative.</p> - */ - sal_Int32 offset; - - /** - * The index within the vtable. - * - * <p>The index is logical (<em>not</em> a byte offset), and must be - * non-negative.</p> - */ - sal_Int32 index; -}; - -/** - * Calculates the vtable slot associated with an interface attribute member. - * - * @param ifcMember a non-null pointer to an interface attribute member - * description - * @return the vtable slot associated with the given interface member - */ -VtableSlot getVtableSlot( - typelib_InterfaceAttributeTypeDescription const * ifcMember); - -/** - * Calculates the vtable slot associated with an interface method member. - * - * @param ifcMember a non-null pointer to an interface method member description - * @return the vtable slot associated with the given interface member - */ -VtableSlot getVtableSlot( - typelib_InterfaceMethodTypeDescription const * ifcMember); - -} } } - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/bridges/inc/bridges/cpp_uno/type_misc.hxx b/bridges/inc/bridges/cpp_uno/type_misc.hxx deleted file mode 100644 index 98fd84205..000000000 --- a/bridges/inc/bridges/cpp_uno/type_misc.hxx +++ /dev/null @@ -1,132 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef _BRIDGES_CPP_UNO_TYPE_MISC_HXX_ -#define _BRIDGES_CPP_UNO_TYPE_MISC_HXX_ - -#include <sal/types.h> -#include <typelib/typedescription.h> - - -/** Determines whether given type might relate or relates to an interface, - i.e. values of this type are interface or may contain interface(s).<br> - @param pTypeDescr type description of type - @return true if type might relate to an interface, false otherwise -*/ -inline bool cppu_relatesToInterface( typelib_TypeDescription * pTypeDescr ) SAL_THROW( () ) -{ - switch (pTypeDescr->eTypeClass) - { -// case typelib_TypeClass_TYPEDEF: - case typelib_TypeClass_SEQUENCE: - { - switch (((typelib_IndirectTypeDescription *)pTypeDescr)->pType->eTypeClass) - { - case typelib_TypeClass_INTERFACE: - case typelib_TypeClass_UNION: // might relate to interface - case typelib_TypeClass_ANY: // might relate to interface - return true; - case typelib_TypeClass_SEQUENCE: - case typelib_TypeClass_STRUCT: - case typelib_TypeClass_EXCEPTION: - { - typelib_TypeDescription * pTD = 0; - TYPELIB_DANGER_GET( &pTD, ((typelib_IndirectTypeDescription *)pTypeDescr)->pType ); - bool bRel = cppu_relatesToInterface( pTD ); - TYPELIB_DANGER_RELEASE( pTD ); - return bRel; - } - default: - return false; - } - } - case typelib_TypeClass_STRUCT: - case typelib_TypeClass_EXCEPTION: - { - // ...optimized... to avoid getDescription() calls! - typelib_CompoundTypeDescription * pComp = (typelib_CompoundTypeDescription *)pTypeDescr; - typelib_TypeDescriptionReference ** pTypes = pComp->ppTypeRefs; - for ( sal_Int32 nPos = pComp->nMembers; nPos--; ) - { - switch (pTypes[nPos]->eTypeClass) - { - case typelib_TypeClass_INTERFACE: - case typelib_TypeClass_UNION: // might relate to interface - case typelib_TypeClass_ANY: // might relate to interface - return true; -// case typelib_TypeClass_TYPEDEF: - case typelib_TypeClass_SEQUENCE: - case typelib_TypeClass_STRUCT: - case typelib_TypeClass_EXCEPTION: - { - typelib_TypeDescription * pTD = 0; - TYPELIB_DANGER_GET( &pTD, pTypes[nPos] ); - bool bRel = cppu_relatesToInterface( pTD ); - TYPELIB_DANGER_RELEASE( pTD ); - if (bRel) - return true; - } - default: - break; - } - } - if (pComp->pBaseTypeDescription) - return cppu_relatesToInterface( (typelib_TypeDescription *)pComp->pBaseTypeDescription ); - return false; - } - case typelib_TypeClass_UNION: // might relate to interface - case typelib_TypeClass_ANY: // might relate to interface - case typelib_TypeClass_INTERFACE: - return true; - default: - return false; - } -} - -/** Determines whether given type is a cpp simple type, e.g. int, enum.<br> - @param eTypeClass type class of type - @return true if type is a cpp simple type, false otherwise -*/ -inline bool cppu_isSimpleType( typelib_TypeClass eTypeClass ) SAL_THROW( () ) -{ - return (eTypeClass <= typelib_TypeClass_ENUM && - eTypeClass != typelib_TypeClass_STRING && - eTypeClass != typelib_TypeClass_ANY && - eTypeClass != typelib_TypeClass_TYPE); -} -/** Determines whether given type is a cpp simple type, e.g. int, enum.<br> - @param pTypeDescr type description of type - @return true if type is a cpp simple type, false otherwise -*/ -inline bool cppu_isSimpleType( typelib_TypeDescription * pTypeDescr ) SAL_THROW( () ) -{ - return cppu_isSimpleType( pTypeDescr->eTypeClass ); -} - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/bridges/inc/makefile.mk b/bridges/inc/makefile.mk deleted file mode 100644 index de828a784..000000000 --- a/bridges/inc/makefile.mk +++ /dev/null @@ -1,47 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* -PRJ=.. - -PRJNAME=bridges -TARGET=inc - -# --- Settings ----------------------------------------------------- - -.INCLUDE : settings.mk - -# --- Files -------------------------------------------------------- -# --- Targets ------------------------------------------------------- - -.INCLUDE : target.mk - -.IF "$(ENABLE_PCH)"!="" -ALLTAR : \ - $(SLO)$/precompiled.pch \ - $(SLO)$/precompiled_ex.pch - -.ENDIF # "$(ENABLE_PCH)"!="" - diff --git a/bridges/inc/pch/precompiled_bridges.cxx b/bridges/inc/pch/precompiled_bridges.cxx deleted file mode 100644 index 6cd286dca..000000000 --- a/bridges/inc/pch/precompiled_bridges.cxx +++ /dev/null @@ -1,31 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#include "precompiled_bridges.hxx" - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/bridges/inc/pch/precompiled_bridges.hxx b/bridges/inc/pch/precompiled_bridges.hxx deleted file mode 100644 index 3d7d7b764..000000000 --- a/bridges/inc/pch/precompiled_bridges.hxx +++ /dev/null @@ -1,151 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): Generated on 2006-09-01 17:49:31.967936 - -#ifdef PRECOMPILED_HEADERS -//---MARKER--- -#include "boost/static_assert.hpp" - -#include "com/sun/star/bridge/InvalidProtocolChangeException.hdl" -#include "com/sun/star/bridge/InvalidProtocolChangeException.hpp" -#include "com/sun/star/bridge/ProtocolProperty.hdl" -#include "com/sun/star/bridge/ProtocolProperty.hpp" -#include "com/sun/star/bridge/XBridge.hpp" -#include "com/sun/star/bridge/XBridgeFactory.hpp" -#include "com/sun/star/bridge/XInstanceProvider.hpp" -#include "com/sun/star/bridge/XUnoUrlResolver.hpp" -#include "com/sun/star/connection/ConnectionSetupException.hpp" -#include "com/sun/star/connection/NoConnectException.hpp" -#include "com/sun/star/connection/XAcceptor.hpp" -#include "com/sun/star/connection/XConnection.hpp" -#include "com/sun/star/connection/XConnector.hpp" -#include "com/sun/star/frame/XComponentLoader.hpp" -#include "com/sun/star/io/XInputStream.hpp" -#include "com/sun/star/io/XOutputStream.hpp" -#include "com/sun/star/lang/IllegalArgumentException.hpp" -#include "com/sun/star/lang/WrappedTargetRuntimeException.hpp" -#include "com/sun/star/lang/XComponent.hpp" -#include "com/sun/star/lang/XInitialization.hpp" -#include "com/sun/star/lang/XMain.hpp" -#include "com/sun/star/lang/XMultiComponentFactory.hpp" -#include "com/sun/star/lang/XServiceInfo.hpp" -#include "com/sun/star/lang/XSingleComponentFactory.hpp" -#include "com/sun/star/registry/InvalidRegistryException.hpp" -#include "com/sun/star/registry/XImplementationRegistration.hpp" -#include "com/sun/star/registry/XRegistryKey.hpp" -#include "com/sun/star/text/XTextDocument.hpp" -#include "com/sun/star/uno/Any.h" -#include "com/sun/star/uno/Any.hxx" -#include "com/sun/star/uno/DeploymentException.hpp" -#include "com/sun/star/uno/Exception.hdl" -#include "com/sun/star/uno/Exception.hpp" -#include "com/sun/star/uno/Reference.h" -#include "com/sun/star/uno/Reference.hxx" -#include "com/sun/star/uno/RuntimeException.hdl" -#include "com/sun/star/uno/RuntimeException.hpp" -#include "com/sun/star/uno/Sequence.h" -#include "com/sun/star/uno/Sequence.hxx" -#include "com/sun/star/uno/Type.h" -#include "com/sun/star/uno/Type.hxx" -#include "com/sun/star/uno/TypeClass.hdl" -#include "com/sun/star/uno/XComponentContext.hpp" -#include "com/sun/star/uno/XInterface.hdl" -#include "com/sun/star/uno/XInterface.hpp" -#include "com/sun/star/uno/XNamingService.hpp" -#include "com/sun/star/uno/genfunc.hxx" - -#include "cppu/macros.hxx" -#include "cppu/unotype.hxx" - -#include "cppuhelper/factory.hxx" -#include "cppuhelper/implbase1.hxx" -#include "cppuhelper/implbase2.hxx" -#include "cppuhelper/implbase3.hxx" -#include "cppuhelper/implementationentry.hxx" -#include "cppuhelper/servicefactory.hxx" -#include "cppuhelper/weak.hxx" - - -#include "osl/conditn.h" -#include "osl/conditn.hxx" -#include "osl/diagnose.h" -#include "osl/doublecheckedlocking.h" -#include "osl/getglobalmutex.hxx" -#include "osl/interlck.h" -#include "osl/module.h" -#include "osl/module.hxx" -#include "osl/mutex.h" -#include "osl/mutex.hxx" -#include "osl/process.h" -#include "osl/semaphor.h" -#include "osl/thread.h" -#include "osl/thread.hxx" -#include "osl/time.h" - -#include "rtl/alloc.h" -#include "rtl/byteseq.h" -#include "rtl/byteseq.hxx" -#include "rtl/instance.hxx" -#include "rtl/memory.h" -#include "rtl/process.h" -#include "rtl/random.h" -#include "rtl/strbuf.hxx" -#include "rtl/string.h" -#include "rtl/string.hxx" -#include "rtl/unload.h" -#include "rtl/ustrbuf.hxx" -#include "rtl/ustring.h" -#include "rtl/ustring.hxx" -#include "rtl/uuid.h" - -#include "sal/alloca.h" -#include "sal/config.h" -#include "sal/types.h" - -#include "sys/types.h" - - -#include "typelib/typeclass.h" -#include "typelib/typedescription.h" -#include "typelib/typedescription.hxx" - -#include "uno/any2.h" -#include "uno/data.h" -#include "uno/dispatcher.h" -#include "uno/environment.h" -#include "uno/environment.hxx" -#include "uno/lbnames.h" -#include "uno/mapping.h" -#include "uno/mapping.hxx" -#include "uno/sequence2.h" -#include "uno/threadpool.h" -//---MARKER--- -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |