2000-09-18 14:29:57 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2005-09-08 07:41:49 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2000-09-18 14:29:57 +00:00
|
|
|
*
|
2005-09-08 07:41:49 +00:00
|
|
|
* $RCSfile: mapping.hxx,v $
|
2000-09-18 14:29:57 +00:00
|
|
|
*
|
2005-09-08 07:41:49 +00:00
|
|
|
* $Revision: 1.8 $
|
2000-09-18 14:29:57 +00:00
|
|
|
*
|
2005-09-08 07:41:49 +00:00
|
|
|
* last change: $Author: rt $ $Date: 2005-09-08 08:41:49 $
|
2000-09-18 14:29:57 +00:00
|
|
|
*
|
2005-09-08 07:41:49 +00:00
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
2000-09-18 14:29:57 +00:00
|
|
|
*
|
|
|
|
*
|
2005-09-08 07:41:49 +00:00
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
* =============================================
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
2000-09-18 14:29:57 +00:00
|
|
|
*
|
2005-09-08 07:41:49 +00:00
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
2000-09-18 14:29:57 +00:00
|
|
|
*
|
2005-09-08 07:41:49 +00:00
|
|
|
* This library 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 for more details.
|
2000-09-18 14:29:57 +00:00
|
|
|
*
|
2005-09-08 07:41:49 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
* MA 02111-1307 USA
|
2000-09-18 14:29:57 +00:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
#ifndef _UNO_MAPPING_HXX_
|
|
|
|
#define _UNO_MAPPING_HXX_
|
|
|
|
|
|
|
|
#ifndef _CPPU_MACROS_HXX_
|
|
|
|
#include <cppu/macros.hxx>
|
|
|
|
#endif
|
2001-11-09 08:14:31 +00:00
|
|
|
#ifndef _RTL_ALLOC_H_
|
|
|
|
#include <rtl/alloc.h>
|
|
|
|
#endif
|
2000-09-18 14:29:57 +00:00
|
|
|
#ifndef _RTL_USTRING_HXX_
|
|
|
|
#include <rtl/ustring.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _UNO_MAPPING_H_
|
|
|
|
#include <uno/mapping.h>
|
|
|
|
#endif
|
|
|
|
#ifndef _COM_SUN_STAR_UNO_TYPE_HXX_
|
|
|
|
#include <com/sun/star/uno/Type.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _COM_SUN_STAR_UNO_REFERENCE_HXX_
|
|
|
|
#include <com/sun/star/uno/Reference.hxx>
|
|
|
|
#endif
|
|
|
|
|
2001-11-09 08:14:31 +00:00
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
typedef struct _typelib_TypeDescription typelib_TypeDescription;
|
|
|
|
typedef struct _typelib_InterfaceTypeDescription typelib_InterfaceTypeDescription;
|
|
|
|
typedef struct _uno_Interface uno_Interface;
|
2001-04-17 12:29:25 +00:00
|
|
|
typedef struct _uno_Environment uno_Environment;
|
2000-09-18 14:29:57 +00:00
|
|
|
|
|
|
|
namespace com
|
|
|
|
{
|
|
|
|
namespace sun
|
|
|
|
{
|
|
|
|
namespace star
|
|
|
|
{
|
|
|
|
namespace uno
|
|
|
|
{
|
|
|
|
|
|
|
|
/** C++ wrapper for C uno_Mapping.
|
2001-11-09 08:14:31 +00:00
|
|
|
|
|
|
|
@see uno_Mapping
|
2000-09-18 14:29:57 +00:00
|
|
|
*/
|
|
|
|
class Mapping
|
|
|
|
{
|
|
|
|
uno_Mapping * _pMapping;
|
|
|
|
|
|
|
|
public:
|
2001-11-09 08:14:31 +00:00
|
|
|
// these are here to force memory de/allocation to sal lib.
|
|
|
|
/** @internal */
|
|
|
|
inline static void * SAL_CALL operator new ( size_t nSize ) SAL_THROW( () )
|
|
|
|
{ return ::rtl_allocateMemory( nSize ); }
|
|
|
|
/** @internal */
|
|
|
|
inline static void SAL_CALL operator delete ( void * pMem ) SAL_THROW( () )
|
|
|
|
{ ::rtl_freeMemory( pMem ); }
|
|
|
|
/** @internal */
|
|
|
|
inline static void * SAL_CALL operator new ( size_t, void * pMem ) SAL_THROW( () )
|
|
|
|
{ return pMem; }
|
|
|
|
/** @internal */
|
|
|
|
inline static void SAL_CALL operator delete ( void *, void * ) SAL_THROW( () )
|
|
|
|
{}
|
|
|
|
|
2001-08-21 08:17:07 +00:00
|
|
|
/** Holds a mapping from the specified source to the specified destination by environment
|
|
|
|
type names.
|
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
@param rFrom type name of source environment
|
|
|
|
@param rTo type name of destination environment
|
|
|
|
@param rAddPurpose additional purpose
|
|
|
|
*/
|
2001-08-21 08:17:07 +00:00
|
|
|
inline Mapping(
|
|
|
|
const ::rtl::OUString & rFrom, const ::rtl::OUString & rTo,
|
|
|
|
const ::rtl::OUString & rAddPurpose = ::rtl::OUString() )
|
|
|
|
SAL_THROW( () );
|
2000-09-18 14:29:57 +00:00
|
|
|
|
|
|
|
/** Holds a mapping from the specified source to the specified destination.
|
2001-08-21 08:17:07 +00:00
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
@param pFrom source environment
|
|
|
|
@param pTo destination environment
|
|
|
|
@param rAddPurpose additional purpose
|
|
|
|
*/
|
2001-08-21 08:17:07 +00:00
|
|
|
inline Mapping(
|
|
|
|
uno_Environment * pFrom, uno_Environment * pTo,
|
|
|
|
const ::rtl::OUString & rAddPurpose = ::rtl::OUString() )
|
|
|
|
SAL_THROW( () );
|
2000-09-18 14:29:57 +00:00
|
|
|
|
|
|
|
/** Constructor.
|
2001-08-21 08:17:07 +00:00
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
@param pMapping another mapping
|
|
|
|
*/
|
2001-03-09 11:10:57 +00:00
|
|
|
inline Mapping( uno_Mapping * pMapping = 0 ) SAL_THROW( () );
|
2000-09-18 14:29:57 +00:00
|
|
|
|
|
|
|
/** Copy constructor.
|
2001-08-21 08:17:07 +00:00
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
@param rMapping another mapping
|
|
|
|
*/
|
2001-03-09 11:10:57 +00:00
|
|
|
inline Mapping( const Mapping & rMapping ) SAL_THROW( () );
|
2000-09-18 14:29:57 +00:00
|
|
|
|
|
|
|
/** Destructor.
|
|
|
|
*/
|
2001-03-09 11:10:57 +00:00
|
|
|
inline ~Mapping() SAL_THROW( () );
|
2000-09-18 14:29:57 +00:00
|
|
|
|
|
|
|
/** Sets a given mapping.
|
2001-08-21 08:17:07 +00:00
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
@param pMapping another mapping
|
|
|
|
@return this mapping
|
|
|
|
*/
|
2001-03-09 11:10:57 +00:00
|
|
|
inline Mapping & SAL_CALL operator = ( uno_Mapping * pMapping ) SAL_THROW( () );
|
2000-09-18 14:29:57 +00:00
|
|
|
/** Sets a given mapping.
|
2001-08-21 08:17:07 +00:00
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
@param rMapping another mapping
|
|
|
|
@return this mapping
|
|
|
|
*/
|
2001-03-09 11:10:57 +00:00
|
|
|
inline Mapping & SAL_CALL operator = ( const Mapping & rMapping ) SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{ return operator = ( rMapping._pMapping ); }
|
|
|
|
|
2001-08-21 08:17:07 +00:00
|
|
|
/** Provides a pointer to the C mapping. The returned mapping is NOT acquired!
|
|
|
|
|
|
|
|
@return UNacquired C mapping
|
2000-09-18 14:29:57 +00:00
|
|
|
*/
|
2001-03-09 11:10:57 +00:00
|
|
|
inline uno_Mapping * SAL_CALL get() const SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{ return _pMapping; }
|
|
|
|
|
|
|
|
/** Tests if a mapping is set.
|
2001-08-21 08:17:07 +00:00
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
@return true if a mapping is set
|
|
|
|
*/
|
2001-03-09 11:10:57 +00:00
|
|
|
inline sal_Bool SAL_CALL is() const SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{ return (_pMapping != 0); }
|
|
|
|
|
|
|
|
/** Releases a set mapping.
|
|
|
|
*/
|
2001-03-09 11:10:57 +00:00
|
|
|
inline void SAL_CALL clear() SAL_THROW( () );
|
2000-09-18 14:29:57 +00:00
|
|
|
|
|
|
|
/** Maps an interface from one environment to another.
|
2001-08-21 08:17:07 +00:00
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
@param pInterface source interface
|
|
|
|
@param pTypeDescr type description of interface
|
|
|
|
@return mapped interface
|
|
|
|
*/
|
2001-03-09 11:10:57 +00:00
|
|
|
inline void * SAL_CALL mapInterface( void * pInterface, typelib_InterfaceTypeDescription * pTypeDescr ) const SAL_THROW( () );
|
2000-09-18 14:29:57 +00:00
|
|
|
/** Maps an interface from one environment to another.
|
2001-08-21 08:17:07 +00:00
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
@param pInterface source interface
|
|
|
|
@param pTypeDescr type description of interface
|
|
|
|
@return mapped interface
|
|
|
|
*/
|
2001-03-09 11:10:57 +00:00
|
|
|
inline void * SAL_CALL mapInterface( void * pInterface, typelib_TypeDescription * pTypeDescr ) const SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{ return mapInterface( pInterface, (typelib_InterfaceTypeDescription *)pTypeDescr ); }
|
|
|
|
|
|
|
|
/** Maps an interface from one environment to another.
|
2001-08-21 08:17:07 +00:00
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
@param pInterface source interface
|
|
|
|
@param rType type of interface
|
|
|
|
@return mapped interface
|
|
|
|
*/
|
2000-12-21 13:35:28 +00:00
|
|
|
inline void * SAL_CALL mapInterface(
|
2001-03-09 11:10:57 +00:00
|
|
|
void * pInterface, const ::com::sun::star::uno::Type & rType ) const SAL_THROW( () );
|
2000-09-18 14:29:57 +00:00
|
|
|
|
|
|
|
/** Maps an interface from one environment to another.
|
2001-08-21 08:17:07 +00:00
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
@param ppOut inout mapped interface
|
|
|
|
@param pInterface source interface
|
|
|
|
@param pTypeDescr type description of interface
|
|
|
|
*/
|
2001-03-09 11:10:57 +00:00
|
|
|
inline void SAL_CALL mapInterface( void ** ppOut, void * pInterface, typelib_InterfaceTypeDescription * pTypeDescr ) const SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{ (*_pMapping->mapInterface)( _pMapping, ppOut, pInterface, pTypeDescr ); }
|
|
|
|
/** Maps an interface from one environment to another.
|
2001-08-21 08:17:07 +00:00
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
@param ppOut inout mapped interface
|
|
|
|
@param pInterface source interface
|
|
|
|
@param pTypeDescr type description of interface
|
|
|
|
*/
|
2001-03-09 11:10:57 +00:00
|
|
|
inline void SAL_CALL mapInterface( void ** ppOut, void * pInterface, typelib_TypeDescription * pTypeDescr ) const SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{ (*_pMapping->mapInterface)( _pMapping, ppOut, pInterface, (typelib_InterfaceTypeDescription *)pTypeDescr ); }
|
|
|
|
|
|
|
|
/** Maps an interface from one environment to another.
|
2001-08-21 08:17:07 +00:00
|
|
|
|
2000-09-18 14:29:57 +00:00
|
|
|
@param ppOut inout mapped interface
|
|
|
|
@param pInterface source interface
|
|
|
|
@param rType type of interface to be mapped
|
|
|
|
*/
|
2001-03-09 11:10:57 +00:00
|
|
|
inline void SAL_CALL mapInterface( void ** ppOut, void * pInterface, const ::com::sun::star::uno::Type & rType ) const SAL_THROW( () );
|
2000-09-18 14:29:57 +00:00
|
|
|
};
|
|
|
|
//__________________________________________________________________________________________________
|
2001-03-09 11:10:57 +00:00
|
|
|
inline Mapping::Mapping(
|
|
|
|
const ::rtl::OUString & rFrom, const ::rtl::OUString & rTo, const ::rtl::OUString & rAddPurpose )
|
|
|
|
SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
: _pMapping( 0 )
|
|
|
|
{
|
|
|
|
uno_getMappingByName( &_pMapping, rFrom.pData, rTo.pData, rAddPurpose.pData );
|
|
|
|
}
|
|
|
|
//__________________________________________________________________________________________________
|
2001-03-09 11:10:57 +00:00
|
|
|
inline Mapping::Mapping(
|
|
|
|
uno_Environment * pFrom, uno_Environment * pTo, const ::rtl::OUString & rAddPurpose )
|
|
|
|
SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
: _pMapping( 0 )
|
|
|
|
{
|
|
|
|
uno_getMapping( &_pMapping, pFrom, pTo, rAddPurpose.pData );
|
|
|
|
}
|
|
|
|
//__________________________________________________________________________________________________
|
2001-03-09 11:10:57 +00:00
|
|
|
inline Mapping::Mapping( uno_Mapping * pMapping ) SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
: _pMapping( pMapping )
|
|
|
|
{
|
|
|
|
if (_pMapping)
|
|
|
|
(*_pMapping->acquire)( _pMapping );
|
|
|
|
}
|
|
|
|
//__________________________________________________________________________________________________
|
2001-03-09 11:10:57 +00:00
|
|
|
inline Mapping::Mapping( const Mapping & rMapping ) SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
: _pMapping( rMapping._pMapping )
|
|
|
|
{
|
|
|
|
if (_pMapping)
|
|
|
|
(*_pMapping->acquire)( _pMapping );
|
|
|
|
}
|
|
|
|
//__________________________________________________________________________________________________
|
2001-03-09 11:10:57 +00:00
|
|
|
inline Mapping::~Mapping() SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{
|
|
|
|
if (_pMapping)
|
|
|
|
(*_pMapping->release)( _pMapping );
|
|
|
|
}
|
|
|
|
//__________________________________________________________________________________________________
|
2001-03-09 11:10:57 +00:00
|
|
|
inline void Mapping::clear() SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{
|
|
|
|
if (_pMapping)
|
|
|
|
{
|
|
|
|
(*_pMapping->release)( _pMapping );
|
|
|
|
_pMapping = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//__________________________________________________________________________________________________
|
2001-03-09 11:10:57 +00:00
|
|
|
inline Mapping & Mapping::operator = ( uno_Mapping * pMapping ) SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{
|
|
|
|
if (pMapping)
|
|
|
|
(*pMapping->acquire)( pMapping );
|
|
|
|
if (_pMapping)
|
|
|
|
(*_pMapping->release)( _pMapping );
|
|
|
|
_pMapping = pMapping;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
//__________________________________________________________________________________________________
|
2001-03-09 11:10:57 +00:00
|
|
|
inline void Mapping::mapInterface(
|
|
|
|
void ** ppOut, void * pInterface, const ::com::sun::star::uno::Type & rType ) const
|
|
|
|
SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{
|
|
|
|
typelib_TypeDescription * pTD = 0;
|
|
|
|
TYPELIB_DANGER_GET( &pTD, rType.getTypeLibType() );
|
|
|
|
if (pTD)
|
|
|
|
{
|
|
|
|
(*_pMapping->mapInterface)( _pMapping, ppOut, pInterface, (typelib_InterfaceTypeDescription *)pTD );
|
|
|
|
TYPELIB_DANGER_RELEASE( pTD );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//__________________________________________________________________________________________________
|
2001-03-09 11:10:57 +00:00
|
|
|
inline void * Mapping::mapInterface(
|
|
|
|
void * pInterface, typelib_InterfaceTypeDescription * pTypeDescr ) const
|
|
|
|
SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{
|
|
|
|
void * pOut = 0;
|
|
|
|
(*_pMapping->mapInterface)( _pMapping, &pOut, pInterface, pTypeDescr );
|
|
|
|
return pOut;
|
|
|
|
}
|
|
|
|
//__________________________________________________________________________________________________
|
2001-03-09 11:10:57 +00:00
|
|
|
inline void * Mapping::mapInterface(
|
|
|
|
void * pInterface, const ::com::sun::star::uno::Type & rType ) const
|
|
|
|
SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{
|
|
|
|
void * pOut = 0;
|
|
|
|
mapInterface( &pOut, pInterface, rType );
|
|
|
|
return pOut;
|
|
|
|
}
|
|
|
|
|
2001-11-09 08:14:31 +00:00
|
|
|
/** Maps an binary C UNO interface to be used in the currently used compiler environment.
|
|
|
|
|
|
|
|
@tplparam C interface type
|
|
|
|
@param ppRet inout returned interface pointer
|
|
|
|
@param pUnoI binary C UNO interface
|
|
|
|
@return true if successful, false otherwise
|
|
|
|
*/
|
2000-09-18 14:29:57 +00:00
|
|
|
template< class C >
|
2001-03-09 11:10:57 +00:00
|
|
|
inline sal_Bool mapToCpp( Reference< C > * ppRet, uno_Interface * pUnoI ) SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{
|
|
|
|
Mapping aMapping(
|
|
|
|
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(UNO_LB_UNO) ),
|
|
|
|
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(CPPU_CURRENT_LANGUAGE_BINDING_NAME) ) );
|
|
|
|
OSL_ASSERT( aMapping.is() );
|
2004-07-30 14:03:57 +00:00
|
|
|
aMapping.mapInterface( (void **)ppRet, pUnoI, getCppuType( ppRet ) );
|
2000-09-18 14:29:57 +00:00
|
|
|
return (0 != *ppRet);
|
|
|
|
}
|
2001-11-09 08:14:31 +00:00
|
|
|
/** Maps an UNO interface of the currently used compiler environment to binary C UNO.
|
|
|
|
|
|
|
|
@tplparam C interface type
|
|
|
|
@param ppRet inout returned interface pointer
|
|
|
|
@param x interface reference
|
|
|
|
@return true if successful, false otherwise
|
|
|
|
*/
|
2000-09-18 14:29:57 +00:00
|
|
|
template< class C >
|
2001-03-09 11:10:57 +00:00
|
|
|
inline sal_Bool mapToUno( uno_Interface ** ppRet, const Reference< C > & x ) SAL_THROW( () )
|
2000-09-18 14:29:57 +00:00
|
|
|
{
|
|
|
|
Mapping aMapping(
|
|
|
|
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(CPPU_CURRENT_LANGUAGE_BINDING_NAME) ),
|
|
|
|
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(UNO_LB_UNO) ) );
|
|
|
|
OSL_ASSERT( aMapping.is() );
|
2004-07-30 14:03:57 +00:00
|
|
|
aMapping.mapInterface( (void **)ppRet, x.get(), getCppuType( &x ) );
|
2000-09-18 14:29:57 +00:00
|
|
|
return (0 != *ppRet);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|