#102391# introducing some base type extensions
This commit is contained in:
@@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: Any.h,v $
|
||||
*
|
||||
* $Revision: 1.7 $
|
||||
* $Revision: 1.8 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2001-11-09 09:14:30 $
|
||||
* last change: $Author: dbo $ $Date: 2002-08-19 07:18:44 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@@ -227,6 +227,14 @@ public:
|
||||
*/
|
||||
inline void SAL_CALL clear() SAL_THROW( () );
|
||||
|
||||
/** Tests whether this any is extractable to a value of given type.
|
||||
Widening conversion without data loss is taken into account.
|
||||
|
||||
@param rType destination type
|
||||
@return true if this any is extractable to value of given type (e.g. using >>= operator)
|
||||
*/
|
||||
inline sal_Bool SAL_CALL isExtractableTo( const Type & rType ) const SAL_THROW( () );
|
||||
|
||||
/** Equality operator: compares two anys.
|
||||
The values need not be of equal type, e.g. a short integer is compared to a long integer.
|
||||
|
||||
|
@@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: Any.hxx,v $
|
||||
*
|
||||
* $Revision: 1.10 $
|
||||
* $Revision: 1.11 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2001-12-17 12:49:34 $
|
||||
* last change: $Author: dbo $ $Date: 2002-08-19 07:18:44 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@@ -166,6 +166,13 @@ inline void Any::clear() SAL_THROW( () )
|
||||
this, (uno_ReleaseFunc)cpp_release );
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
inline sal_Bool Any::isExtractableTo( const Type & rType ) const SAL_THROW( () )
|
||||
{
|
||||
return ::uno_type_isAssignableFromData(
|
||||
rType.getTypeLibType(), pData, pType,
|
||||
(uno_QueryInterfaceFunc)cpp_queryInterface, (uno_ReleaseFunc)cpp_release );
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
inline sal_Bool Any::operator == ( const Any & rAny ) const SAL_THROW( () )
|
||||
{
|
||||
return ::uno_type_equalData(
|
||||
|
@@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: Reference.h,v $
|
||||
*
|
||||
* $Revision: 1.10 $
|
||||
* $Revision: 1.11 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2001-11-09 09:14:30 $
|
||||
* last change: $Author: dbo $ $Date: 2002-08-19 07:18:44 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@@ -77,6 +77,7 @@ namespace uno
|
||||
|
||||
class RuntimeException;
|
||||
class XInterface;
|
||||
class Type;
|
||||
class Any;
|
||||
|
||||
/** Enum defining UNO_REF_NO_ACQUIRE for setting reference without acquiring a given interface.
|
||||
@@ -101,6 +102,26 @@ protected:
|
||||
*/
|
||||
XInterface * _pInterface;
|
||||
|
||||
/** Queries given interface for type rType.
|
||||
|
||||
@param pInterface interface pointer
|
||||
@param rType interface type
|
||||
@return interface of demanded type (may be null)
|
||||
*/
|
||||
inline static XInterface * SAL_CALL __query( XInterface * pInterface, const Type & rType )
|
||||
SAL_THROW( (RuntimeException) );
|
||||
#ifndef EXCEPTIONS_OFF
|
||||
/** Queries given interface for type rType.
|
||||
Throws a RuntimeException if the demanded interface cannot be queried.
|
||||
|
||||
@param pInterface interface pointer
|
||||
@param rType interface type
|
||||
@return interface of demanded type
|
||||
*/
|
||||
inline static XInterface * SAL_CALL __query_throw( XInterface * pInterface, const Type & rType )
|
||||
SAL_THROW( (RuntimeException) );
|
||||
#endif
|
||||
|
||||
public:
|
||||
/** Gets interface pointer. This call does not acquire the interface.
|
||||
|
||||
@@ -114,7 +135,7 @@ public:
|
||||
@return true if reference acquires an interface, i.e. true if it is not null
|
||||
*/
|
||||
inline sal_Bool SAL_CALL is() const SAL_THROW( () )
|
||||
{ return (_pInterface != 0); }
|
||||
{ return (0 != _pInterface); }
|
||||
|
||||
/** Equality operator: compares two interfaces
|
||||
Checks if both references are null or refer to the same object.
|
||||
@@ -146,22 +167,38 @@ public:
|
||||
*/
|
||||
inline sal_Bool SAL_CALL operator != ( const BaseReference & rRef ) const SAL_THROW( () );
|
||||
|
||||
// needed for some stl container operations, though this makes no sense on pointers
|
||||
/** needed for some stl container operations, though this makes no sense on pointers
|
||||
@internal
|
||||
*/
|
||||
inline sal_Bool SAL_CALL operator < ( const BaseReference & rRef ) const SAL_THROW( () )
|
||||
{ return (_pInterface < rRef._pInterface); }
|
||||
};
|
||||
|
||||
/** Enum defining UNO_QUERY and UNO_REF_QUERY for query interface constructor of reference template.
|
||||
/** Enum defining UNO_QUERY and UNO_REF_QUERY for implicit interface query.
|
||||
*/
|
||||
enum __UnoReference_Query
|
||||
{
|
||||
/** This enum value can be used for querying interface constructor of reference template.
|
||||
/** This enum value can be used for implicit interface query.
|
||||
*/
|
||||
UNO_QUERY,
|
||||
/** This enum value can be used for querying interface constructor of reference template.
|
||||
/** This enum value can be used for implicit interface query.
|
||||
*/
|
||||
UNO_REF_QUERY
|
||||
};
|
||||
#ifndef EXCEPTIONS_OFF
|
||||
/** Enum defining UNO_QUERY_THROW and UNO_REF_QUERY_THROW for implicit interface query.
|
||||
If the demanded interface is unavailable, then a RuntimeException is thrown.
|
||||
*/
|
||||
enum __UnoReference_QueryThrow
|
||||
{
|
||||
/** This enum value can be used for implicit interface query.
|
||||
*/
|
||||
UNO_QUERY_THROW,
|
||||
/** This enum value can be used for implicit interface query.
|
||||
*/
|
||||
UNO_REF_QUERY_THROW
|
||||
};
|
||||
#endif
|
||||
|
||||
/** Template reference class for interface type derived from BaseReference.
|
||||
A special constructor given the UNO_QUERY or UNO_REF_QUERY identifier queries interfaces
|
||||
@@ -170,12 +207,23 @@ enum __UnoReference_Query
|
||||
template< class interface_type >
|
||||
class Reference : public BaseReference
|
||||
{
|
||||
/** Queries given interface reference for type interface_type.
|
||||
/** Queries given interface for type interface_type.
|
||||
|
||||
@param pInterface interface pointer
|
||||
@return interface of demanded type (may be null)
|
||||
*/
|
||||
inline static interface_type * SAL_CALL __query( XInterface * pInterface ) SAL_THROW( (RuntimeException) );
|
||||
inline static interface_type * SAL_CALL __query( XInterface * pInterface )
|
||||
SAL_THROW( (RuntimeException) );
|
||||
#ifndef EXCEPTIONS_OFF
|
||||
/** Queries given interface for type interface_type.
|
||||
Throws a RuntimeException if the demanded interface cannot be queried.
|
||||
|
||||
@param pInterface interface pointer
|
||||
@return interface of demanded type
|
||||
*/
|
||||
inline static interface_type * SAL_CALL __query_throw( XInterface * pInterface )
|
||||
SAL_THROW( (RuntimeException) );
|
||||
#endif
|
||||
|
||||
public:
|
||||
// these are here to force memory de/allocation to sal lib.
|
||||
@@ -244,6 +292,32 @@ public:
|
||||
@param dummy UNO_QUERY to force obvious distinction to other constructors
|
||||
*/
|
||||
inline Reference( const Any & rAny, __UnoReference_Query ) SAL_THROW( (RuntimeException) );
|
||||
#ifndef EXCEPTIONS_OFF
|
||||
/** Constructor: Queries given interface for reference interface type (interface_type).
|
||||
Throws a RuntimeException if the demanded interface cannot be queried.
|
||||
|
||||
@param rRef another reference
|
||||
@param dummy UNO_QUERY_THROW or UNO_REF_QUERY_THROW to force obvious distinction
|
||||
to other constructors
|
||||
*/
|
||||
inline Reference( const BaseReference & rRef, __UnoReference_QueryThrow ) SAL_THROW( (RuntimeException) );
|
||||
/** Constructor: Queries given interface for reference interface type (interface_type).
|
||||
Throws a RuntimeException if the demanded interface cannot be queried.
|
||||
|
||||
@param pInterface an interface pointer
|
||||
@param dummy UNO_QUERY_THROW or UNO_REF_QUERY_THROW to force obvious distinction
|
||||
to other constructors
|
||||
*/
|
||||
inline Reference( XInterface * pInterface, __UnoReference_QueryThrow ) SAL_THROW( (RuntimeException) );
|
||||
/** Constructor: Queries given any for reference interface type (interface_type).
|
||||
Throws a RuntimeException if the demanded interface cannot be queried.
|
||||
|
||||
@param rAny an any
|
||||
@param dummy UNO_QUERY_THROW or UNO_REF_QUERY_THROW to force obvious distinction
|
||||
to other constructors
|
||||
*/
|
||||
inline Reference( const Any & rAny, __UnoReference_QueryThrow ) SAL_THROW( (RuntimeException) );
|
||||
#endif
|
||||
|
||||
/** Cast operator to Reference< XInterface >: Reference objects are binary compatible and
|
||||
any interface must be derived from com.sun.star.uno.XInterface.
|
||||
@@ -286,6 +360,7 @@ public:
|
||||
/** Sets interface pointer without acquiring it. An interface already set will be released.
|
||||
|
||||
@param pInterface an interface pointer
|
||||
@param dummy SAL_NO_ACQUIRE to force obvious distinction to set methods
|
||||
@return true, if non-null interface was set
|
||||
*/
|
||||
inline sal_Bool SAL_CALL set( interface_type * pInterface, __sal_NoAcquire ) SAL_THROW( () );
|
||||
@@ -294,6 +369,7 @@ public:
|
||||
|
||||
@deprecated
|
||||
@param pInterface an interface pointer
|
||||
@param dummy UNO_REF_NO_ACQUIRE to force obvious distinction to set methods
|
||||
@return true, if non-null interface was set
|
||||
*/
|
||||
inline sal_Bool SAL_CALL set( interface_type * pInterface, __UnoReference_NoAcquire ) SAL_THROW( () );
|
||||
@@ -302,6 +378,7 @@ public:
|
||||
An interface already set will be released.
|
||||
|
||||
@param pInterface an interface pointer
|
||||
@param dummy UNO_QUERY or UNO_REF_QUERY to force obvious distinction to set methods
|
||||
@return true, if non-null interface was set
|
||||
*/
|
||||
inline sal_Bool SAL_CALL set( XInterface * pInterface, __UnoReference_Query ) SAL_THROW( (RuntimeException) );
|
||||
@@ -309,9 +386,30 @@ public:
|
||||
An interface already set will be released.
|
||||
|
||||
@param rRef another reference
|
||||
@param dummy UNO_QUERY or UNO_REF_QUERY to force obvious distinction to set methods
|
||||
@return true, if non-null interface was set
|
||||
*/
|
||||
inline sal_Bool SAL_CALL set( const BaseReference & rRef, __UnoReference_Query ) SAL_THROW( (RuntimeException) );
|
||||
#ifndef EXCEPTIONS_OFF
|
||||
/** Queries given interface for reference interface type (interface_type) and sets it.
|
||||
An interface already set will be released.
|
||||
Throws a RuntimeException if the demanded interface cannot be set.
|
||||
|
||||
@param pInterface an interface pointer
|
||||
@param dummy UNO_QUERY_THROW or UNO_REF_QUERY_THROW to force obvious distinction
|
||||
to set methods
|
||||
*/
|
||||
inline void SAL_CALL set( XInterface * pInterface, __UnoReference_QueryThrow ) SAL_THROW( (RuntimeException) );
|
||||
/** Queries given interface for reference interface type (interface_type) and sets it.
|
||||
An interface already set will be released.
|
||||
Throws a RuntimeException if the demanded interface cannot be set.
|
||||
|
||||
@param rRef another reference
|
||||
@param dummy UNO_QUERY_THROW or UNO_REF_QUERY_THROW to force obvious distinction
|
||||
to set methods
|
||||
*/
|
||||
inline void SAL_CALL set( const BaseReference & rRef, __UnoReference_QueryThrow ) SAL_THROW( (RuntimeException) );
|
||||
#endif
|
||||
|
||||
/** Assignment operator: Acquires given interface pointer and sets reference.
|
||||
An interface already set will be released.
|
||||
|
@@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: Reference.hxx,v $
|
||||
*
|
||||
* $Revision: 1.14 $
|
||||
* $Revision: 1.15 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2002-03-13 09:45:34 $
|
||||
* last change: $Author: dbo $ $Date: 2002-08-19 07:18:44 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@@ -81,62 +81,57 @@ namespace uno
|
||||
{
|
||||
|
||||
//__________________________________________________________________________________________________
|
||||
inline sal_Bool BaseReference::operator == ( XInterface * pInterface ) const SAL_THROW( () )
|
||||
{
|
||||
if (_pInterface == pInterface)
|
||||
return sal_True;
|
||||
#ifndef EXCEPTIONS_OFF
|
||||
try
|
||||
{
|
||||
#endif
|
||||
// only the query to XInterface must return the same pointer if they belong to same objects
|
||||
Reference< XInterface > x1( _pInterface, UNO_QUERY );
|
||||
Reference< XInterface > x2( pInterface, UNO_QUERY );
|
||||
return (x1._pInterface == x2._pInterface);
|
||||
#ifndef EXCEPTIONS_OFF
|
||||
}
|
||||
catch (RuntimeException &)
|
||||
{
|
||||
return sal_False;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
inline sal_Bool BaseReference::operator != ( XInterface * pInterface ) const SAL_THROW( () )
|
||||
{
|
||||
return (! operator == ( pInterface ));
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
inline sal_Bool BaseReference::operator == ( const BaseReference & rRef ) const SAL_THROW( () )
|
||||
{
|
||||
return operator == ( rRef._pInterface );
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
inline sal_Bool BaseReference::operator != ( const BaseReference & rRef ) const SAL_THROW( () )
|
||||
{
|
||||
return (! operator == ( rRef._pInterface ));
|
||||
}
|
||||
|
||||
//##################################################################################################
|
||||
|
||||
//__________________________________________________________________________________________________
|
||||
template< class interface_type >
|
||||
inline interface_type * Reference< interface_type >::__query(
|
||||
XInterface * pInterface ) SAL_THROW( (RuntimeException) )
|
||||
inline XInterface * BaseReference::__query(
|
||||
XInterface * pInterface, const Type & rType )
|
||||
SAL_THROW( (RuntimeException) )
|
||||
{
|
||||
if (pInterface)
|
||||
{
|
||||
const Type & rType = ::getCppuType( (const Reference< interface_type > *)0 );
|
||||
Any aRet( pInterface->queryInterface( rType ) );
|
||||
if (typelib_TypeClass_INTERFACE == aRet.pType->eTypeClass)
|
||||
{
|
||||
interface_type * pRet = reinterpret_cast< interface_type * >( aRet.pReserved );
|
||||
XInterface * pRet = reinterpret_cast< XInterface * >( aRet.pReserved );
|
||||
aRet.pReserved = 0;
|
||||
return pRet;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
template< class interface_type >
|
||||
inline interface_type * Reference< interface_type >::__query(
|
||||
XInterface * pInterface ) SAL_THROW( (RuntimeException) )
|
||||
{
|
||||
return static_cast< interface_type * >(
|
||||
BaseReference::__query(
|
||||
pInterface, ::getCppuType( (const Reference< interface_type > *)0 ) ) );
|
||||
}
|
||||
#ifndef EXCEPTIONS_OFF
|
||||
extern "C" rtl_uString * SAL_CALL __cppu_unsatisfied_query_msg(
|
||||
typelib_TypeDescriptionReference * pType )
|
||||
SAL_THROW_EXTERN_C();
|
||||
//__________________________________________________________________________________________________
|
||||
inline XInterface * BaseReference::__query_throw(
|
||||
XInterface * pInterface, const Type & rType )
|
||||
SAL_THROW( (RuntimeException) )
|
||||
{
|
||||
XInterface * pQueried = __query( pInterface, rType );
|
||||
if (pQueried)
|
||||
return pQueried;
|
||||
throw RuntimeException(
|
||||
::rtl::OUString( __cppu_unsatisfied_query_msg( rType.getTypeLibType() ), SAL_NO_ACQUIRE ),
|
||||
Reference< XInterface >( pInterface ) );
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
template< class interface_type >
|
||||
inline interface_type * Reference< interface_type >::__query_throw(
|
||||
XInterface * pInterface ) SAL_THROW( (RuntimeException) )
|
||||
{
|
||||
return static_cast< interface_type * >(
|
||||
BaseReference::__query_throw(
|
||||
pInterface, ::getCppuType( (const Reference< interface_type > *)0 ) ) );
|
||||
}
|
||||
#endif
|
||||
|
||||
//__________________________________________________________________________________________________
|
||||
template< class interface_type >
|
||||
@@ -198,6 +193,27 @@ inline Reference< interface_type >::Reference( const Any & rAny, __UnoReference_
|
||||
_pInterface = (typelib_TypeClass_INTERFACE == rAny.pType->eTypeClass
|
||||
? __query( reinterpret_cast< XInterface * >( rAny.pReserved ) ) : 0);
|
||||
}
|
||||
#ifndef EXCEPTIONS_OFF
|
||||
//__________________________________________________________________________________________________
|
||||
template< class interface_type >
|
||||
inline Reference< interface_type >::Reference( const BaseReference & rRef, __UnoReference_QueryThrow ) SAL_THROW( (RuntimeException) )
|
||||
{
|
||||
_pInterface = __query_throw( rRef.get() );
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
template< class interface_type >
|
||||
inline Reference< interface_type >::Reference( XInterface * pInterface, __UnoReference_QueryThrow ) SAL_THROW( (RuntimeException) )
|
||||
{
|
||||
_pInterface = __query_throw( pInterface );
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
template< class interface_type >
|
||||
inline Reference< interface_type >::Reference( const Any & rAny, __UnoReference_QueryThrow ) SAL_THROW( (RuntimeException) )
|
||||
{
|
||||
_pInterface = __query_throw( typelib_TypeClass_INTERFACE == rAny.pType->eTypeClass
|
||||
? reinterpret_cast< XInterface * >( rAny.pReserved ) : 0 );
|
||||
}
|
||||
#endif
|
||||
|
||||
//__________________________________________________________________________________________________
|
||||
template< class interface_type >
|
||||
@@ -219,7 +235,7 @@ inline sal_Bool Reference< interface_type >::set(
|
||||
if (_pInterface)
|
||||
_pInterface->release();
|
||||
_pInterface = pInterface;
|
||||
return (pInterface != 0);
|
||||
return (0 != pInterface);
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
template< class interface_type >
|
||||
@@ -229,7 +245,7 @@ inline sal_Bool Reference< interface_type >::set(
|
||||
if (_pInterface)
|
||||
_pInterface->release();
|
||||
_pInterface = pInterface;
|
||||
return (pInterface != 0);
|
||||
return (0 != pInterface);
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
template< class interface_type >
|
||||
@@ -260,6 +276,22 @@ inline sal_Bool Reference< interface_type >::set(
|
||||
{
|
||||
return set( __query( rRef.get() ), SAL_NO_ACQUIRE );
|
||||
}
|
||||
#ifndef EXCEPTIONS_OFF
|
||||
//__________________________________________________________________________________________________
|
||||
template< class interface_type >
|
||||
inline void Reference< interface_type >::set(
|
||||
XInterface * pInterface, __UnoReference_QueryThrow ) SAL_THROW( (RuntimeException) )
|
||||
{
|
||||
set( __query_throw( pInterface ), SAL_NO_ACQUIRE );
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
template< class interface_type >
|
||||
inline void Reference< interface_type >::set(
|
||||
const BaseReference & rRef, __UnoReference_QueryThrow ) SAL_THROW( (RuntimeException) )
|
||||
{
|
||||
set( __query_throw( rRef.get() ), SAL_NO_ACQUIRE );
|
||||
}
|
||||
#endif
|
||||
|
||||
//__________________________________________________________________________________________________
|
||||
template< class interface_type >
|
||||
@@ -293,6 +325,45 @@ inline Reference< interface_type > Reference< interface_type >::query(
|
||||
return Reference< interface_type >( __query( pInterface ), SAL_NO_ACQUIRE );
|
||||
}
|
||||
|
||||
//##################################################################################################
|
||||
|
||||
//__________________________________________________________________________________________________
|
||||
inline sal_Bool BaseReference::operator == ( XInterface * pInterface ) const SAL_THROW( () )
|
||||
{
|
||||
if (_pInterface == pInterface)
|
||||
return sal_True;
|
||||
#ifndef EXCEPTIONS_OFF
|
||||
try
|
||||
{
|
||||
#endif
|
||||
// only the query to XInterface must return the same pointer if they belong to same objects
|
||||
Reference< XInterface > x1( _pInterface, UNO_QUERY );
|
||||
Reference< XInterface > x2( pInterface, UNO_QUERY );
|
||||
return (x1._pInterface == x2._pInterface);
|
||||
#ifndef EXCEPTIONS_OFF
|
||||
}
|
||||
catch (RuntimeException &)
|
||||
{
|
||||
return sal_False;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
inline sal_Bool BaseReference::operator != ( XInterface * pInterface ) const SAL_THROW( () )
|
||||
{
|
||||
return (! operator == ( pInterface ));
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
inline sal_Bool BaseReference::operator == ( const BaseReference & rRef ) const SAL_THROW( () )
|
||||
{
|
||||
return operator == ( rRef._pInterface );
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
inline sal_Bool BaseReference::operator != ( const BaseReference & rRef ) const SAL_THROW( () )
|
||||
{
|
||||
return (! operator == ( rRef._pInterface ));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: Type.h,v $
|
||||
*
|
||||
* $Revision: 1.7 $
|
||||
* $Revision: 1.8 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2002-06-20 11:04:52 $
|
||||
* last change: $Author: dbo $ $Date: 2002-08-19 07:18:45 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@@ -211,6 +211,17 @@ public:
|
||||
inline typelib_TypeDescriptionReference * SAL_CALL getTypeLibType() const SAL_THROW( () )
|
||||
{ return _pType; }
|
||||
|
||||
/** Tests if values of this reflected type can be assigned by values of given type.
|
||||
This includes widening conversion (e.g., long assignable from short), as long as there
|
||||
is no data loss.
|
||||
|
||||
@param rType another type
|
||||
@return true if values of this type can be assigned from values of given type,
|
||||
false otherwise
|
||||
*/
|
||||
inline sal_Bool SAL_CALL isAssignableFrom( const Type & rType ) const SAL_THROW( () )
|
||||
{ return ::typelib_typedescriptionreference_isAssignableFrom( _pType, rType._pType ); }
|
||||
|
||||
/** Compares two types.
|
||||
|
||||
@param rType another type
|
||||
|
@@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: data.h,v $
|
||||
*
|
||||
* $Revision: 1.6 $
|
||||
* $Revision: 1.7 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2001-08-21 09:17:07 $
|
||||
* last change: $Author: dbo $ $Date: 2002-08-19 07:18:46 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@@ -219,9 +219,10 @@ void SAL_CALL uno_type_constructData(
|
||||
void * pMem, struct _typelib_TypeDescriptionReference * pType )
|
||||
SAL_THROW_EXTERN_C();
|
||||
|
||||
/** Assigns a destination value with a source value. Widening conversion WITHOUT data loss is
|
||||
allowed (e.g., assigning a long with a short). Assignment from any value to a value of type
|
||||
Any and vice versa is allowed.
|
||||
/** Assigns a destination value with a source value.
|
||||
Widening conversion WITHOUT data loss is allowed (e.g., assigning a long with a short).
|
||||
Querying for demanded interface type is allowed.
|
||||
Assignment from any value to a value of type Any and vice versa is allowed.
|
||||
|
||||
@param pDest pointer to destination value
|
||||
@param pDestTypeDescr type description of destination value
|
||||
@@ -241,9 +242,10 @@ sal_Bool SAL_CALL uno_assignData(
|
||||
void * pSource, struct _typelib_TypeDescription * pSourceTypeDescr,
|
||||
uno_QueryInterfaceFunc queryInterface, uno_AcquireFunc acquire, uno_ReleaseFunc release )
|
||||
SAL_THROW_EXTERN_C();
|
||||
/** Assigns a destination value with a source value. Widening conversion WITHOUT data loss is
|
||||
allowed (e.g., assigning a long with a short). Assignment from any value to a value of type
|
||||
Any and vice versa is allowed.
|
||||
/** Assigns a destination value with a source value.
|
||||
Widening conversion WITHOUT data loss is allowed (e.g., assigning a long with a short).
|
||||
Querying for demanded interface type is allowed.
|
||||
Assignment from any value to a value of type Any and vice versa is allowed.
|
||||
|
||||
@param pDest pointer to destination value
|
||||
@param pDestType type of destination value
|
||||
@@ -264,6 +266,26 @@ sal_Bool SAL_CALL uno_type_assignData(
|
||||
uno_QueryInterfaceFunc queryInterface, uno_AcquireFunc acquire, uno_ReleaseFunc release )
|
||||
SAL_THROW_EXTERN_C();
|
||||
|
||||
/** Tests whether a value of given type is assignable from given value.
|
||||
Widening conversion WITHOUT data loss is allowed (e.g., assigning a long with a short).
|
||||
Querying for demanded interface type is allowed.
|
||||
Assignment from any value to a value of type Any and vice versa is allowed.
|
||||
|
||||
@param pAssignable type
|
||||
@param pFrom pointer to value
|
||||
@param pFromType type of value
|
||||
@param queryInterface function called each time an interface needs to be queried;
|
||||
defaults (0) to uno
|
||||
@param release function called each time an interface needs to be released;
|
||||
defaults (0) to uno
|
||||
@return true if value is destination has been successfully assigned
|
||||
*/
|
||||
sal_Bool SAL_CALL uno_type_isAssignableFromData(
|
||||
struct _typelib_TypeDescriptionReference * pAssignable,
|
||||
void * pFrom, struct _typelib_TypeDescriptionReference * pFromType,
|
||||
uno_QueryInterfaceFunc queryInterface, uno_ReleaseFunc release )
|
||||
SAL_THROW_EXTERN_C();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@@ -4,4 +4,5 @@ cu cppu\source nmake - all cu_source NULL
|
||||
cu cppu\source\uno nmake - all cu_uno cu_source NULL
|
||||
cu cppu\source\threadpool nmake - all cu_thpool cu_source NULL
|
||||
cu cppu\source\typelib nmake - all cu_typelib NULL
|
||||
cu cppu\util nmake - all cu_util cu_thpool cu_typelib cu_uno NULL
|
||||
cu cppu\source\cppu nmake - all cu_cppu NULL
|
||||
cu cppu\util nmake - all cu_util cu_thpool cu_typelib cu_cppu cu_uno NULL
|
||||
|
80
cppu/source/cppu/cppu_opt.cxx
Normal file
80
cppu/source/cppu/cppu_opt.cxx
Normal file
@@ -0,0 +1,80 @@
|
||||
/*************************************************************************
|
||||
*
|
||||
* $RCSfile: cppu_opt.cxx,v $
|
||||
*
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2002-08-19 07:18:47 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1
|
||||
* - Sun Industry Standards Source License Version 1.1
|
||||
*
|
||||
* Sun Microsystems Inc., October, 2000
|
||||
*
|
||||
* GNU Lesser General Public License Version 2.1
|
||||
* =============================================
|
||||
* Copyright 2000 by Sun Microsystems, Inc.
|
||||
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*
|
||||
* Sun Industry Standards Source License Version 1.1
|
||||
* =================================================
|
||||
* The contents of this file are subject to the Sun Industry Standards
|
||||
* Source License Version 1.1 (the "License"); You may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of the
|
||||
* License at http://www.openoffice.org/license.html.
|
||||
*
|
||||
* Software provided under this License is provided on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
|
||||
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
|
||||
* See the License for the specific provisions governing your rights and
|
||||
* obligations concerning the Software.
|
||||
*
|
||||
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
|
||||
*
|
||||
* Copyright: 2000 by Sun Microsystems, Inc.
|
||||
*
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): _______________________________________
|
||||
*
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
#include <typelib/typedescription.h>
|
||||
#include <rtl/ustrbuf.hxx>
|
||||
|
||||
|
||||
using namespace ::rtl;
|
||||
|
||||
//##################################################################################################
|
||||
extern "C" rtl_uString * SAL_CALL __cppu_unsatisfied_query_msg(
|
||||
typelib_TypeDescriptionReference * pType )
|
||||
SAL_THROW_EXTERN_C()
|
||||
{
|
||||
OUStringBuffer buf( 64 );
|
||||
buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("unsatisfied query for interface of type ") );
|
||||
buf.append( * reinterpret_cast< OUString const * >( &pType->pTypeName ) );
|
||||
buf.append( (sal_Unicode)'!' );
|
||||
OUString ret( buf.makeStringAndClear() );
|
||||
rtl_uString_acquire( ret.pData );
|
||||
return ret.pData;
|
||||
}
|
82
cppu/source/cppu/makefile.mk
Normal file
82
cppu/source/cppu/makefile.mk
Normal file
@@ -0,0 +1,82 @@
|
||||
#*************************************************************************
|
||||
#
|
||||
# $RCSfile: makefile.mk,v $
|
||||
#
|
||||
# $Revision: 1.3 $
|
||||
#
|
||||
# last change: $Author: dbo $ $Date: 2002-08-19 07:18:47 $
|
||||
#
|
||||
# The Contents of this file are made available subject to the terms of
|
||||
# either of the following licenses
|
||||
#
|
||||
# - GNU Lesser General Public License Version 2.1
|
||||
# - Sun Industry Standards Source License Version 1.1
|
||||
#
|
||||
# Sun Microsystems Inc., October, 2000
|
||||
#
|
||||
# GNU Lesser General Public License Version 2.1
|
||||
# =============================================
|
||||
# Copyright 2000 by Sun Microsystems, Inc.
|
||||
# 901 San Antonio Road, Palo Alto, CA 94303, USA
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
# Sun Industry Standards Source License Version 1.1
|
||||
# =================================================
|
||||
# The contents of this file are subject to the Sun Industry Standards
|
||||
# Source License Version 1.1 (the "License"); You may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of the
|
||||
# License at http://www.openoffice.org/license.html.
|
||||
#
|
||||
# Software provided under this License is provided on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
|
||||
# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
|
||||
# See the License for the specific provisions governing your rights and
|
||||
# obligations concerning the Software.
|
||||
#
|
||||
# The Initial Developer of the Original Code is: Sun Microsystems, Inc.
|
||||
#
|
||||
# Copyright: 2000 by Sun Microsystems, Inc.
|
||||
#
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Contributor(s): _______________________________________
|
||||
#
|
||||
#
|
||||
#
|
||||
#*************************************************************************
|
||||
PRJ=..$/..
|
||||
|
||||
PRJNAME=cppu
|
||||
TARGET=cppu_cppu
|
||||
|
||||
# --- Settings -----------------------------------------------------
|
||||
|
||||
.INCLUDE : ..$/..$/util$/makefile.pmk
|
||||
.INCLUDE : svpre.mk
|
||||
.INCLUDE : settings.mk
|
||||
.INCLUDE : sv.mk
|
||||
|
||||
# --- Files --------------------------------------------------------
|
||||
|
||||
SLOFILES= \
|
||||
$(SLO)$/cppu_opt.obj
|
||||
|
||||
# --- Targets ------------------------------------------------------
|
||||
|
||||
.INCLUDE : ..$/..$/util$/target.pmk
|
||||
.INCLUDE : target.mk
|
@@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: data.cxx,v $
|
||||
*
|
||||
* $Revision: 1.16 $
|
||||
* $Revision: 1.17 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2001-10-19 13:25:14 $
|
||||
* last change: $Author: dbo $ $Date: 2002-08-19 07:18:48 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@@ -277,6 +277,64 @@ sal_Bool SAL_CALL uno_assignData(
|
||||
pSource, pSourceTD->pWeakRef, pSourceTD,
|
||||
queryInterface, acquire, release );
|
||||
}
|
||||
//##################################################################################################
|
||||
sal_Bool SAL_CALL uno_type_isAssignableFromData(
|
||||
typelib_TypeDescriptionReference * pAssignable,
|
||||
void * pFrom, typelib_TypeDescriptionReference * pFromType,
|
||||
uno_QueryInterfaceFunc queryInterface, uno_ReleaseFunc release )
|
||||
SAL_THROW_EXTERN_C()
|
||||
{
|
||||
if (::typelib_typedescriptionreference_isAssignableFrom( pAssignable, pFromType ))
|
||||
return sal_True;
|
||||
if (typelib_TypeClass_INTERFACE != pFromType->eTypeClass ||
|
||||
typelib_TypeClass_INTERFACE != pAssignable->eTypeClass)
|
||||
{
|
||||
return sal_False;
|
||||
}
|
||||
|
||||
// query
|
||||
if (!pFrom)
|
||||
return sal_False;
|
||||
void * pInterface = *(void **)pFrom;
|
||||
if (! pInterface)
|
||||
return sal_False;
|
||||
|
||||
if (queryInterface)
|
||||
{
|
||||
void * p = (*queryInterface)( pInterface, pAssignable );
|
||||
if (p)
|
||||
{
|
||||
(*release)( p );
|
||||
}
|
||||
return (0 != p);
|
||||
}
|
||||
else /* bin UNO */
|
||||
{
|
||||
uno_Any aRet, aExc;
|
||||
uno_Any * pExc = &aExc;
|
||||
|
||||
void * aArgs[1];
|
||||
aArgs[0] = &pAssignable;
|
||||
|
||||
typelib_TypeDescription * pMTqueryInterface = __getQueryInterfaceTypeDescr();
|
||||
(*((uno_Interface *)pInterface)->pDispatcher)(
|
||||
(uno_Interface *)pInterface, pMTqueryInterface, &aRet, aArgs, &pExc );
|
||||
::typelib_typedescription_release( pMTqueryInterface );
|
||||
|
||||
OSL_ENSURE( !pExc, "### Exception occured during queryInterface()!" );
|
||||
if (pExc)
|
||||
{
|
||||
__destructAny( pExc, 0 );
|
||||
return sal_False;
|
||||
}
|
||||
else
|
||||
{
|
||||
sal_Bool ret = (typelib_TypeClass_INTERFACE == aRet.pType->eTypeClass);
|
||||
__destructAny( &aRet, 0 );
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: test_di.cxx,v $
|
||||
*
|
||||
* $Revision: 1.14 $
|
||||
* $Revision: 1.15 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2002-04-24 13:43:27 $
|
||||
* last change: $Author: dbo $ $Date: 2002-08-19 07:18:48 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@@ -79,6 +79,7 @@
|
||||
|
||||
#include <cppuhelper/implbase1.hxx>
|
||||
|
||||
#include <com/sun/star/lang/XComponent.hpp>
|
||||
#include <com/sun/star/lang/DisposedException.hpp>
|
||||
|
||||
|
||||
@@ -653,6 +654,16 @@ static void checkInvalidInterfaceQuery(
|
||||
catch (RuntimeException &)
|
||||
{
|
||||
}
|
||||
try
|
||||
{
|
||||
Reference< lang::XComponent > xComp( xObj, UNO_QUERY_THROW );
|
||||
OSL_ASSERT( 0 );
|
||||
}
|
||||
catch (RuntimeException & exc)
|
||||
{
|
||||
// OString str( OUStringToOString( exc.Message, RTL_TEXTENCODING_ASCII_US ) );
|
||||
// OSL_TRACE( str.getStr() );
|
||||
}
|
||||
}
|
||||
|
||||
//==================================================================================================
|
||||
|
@@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: testcppu.cxx,v $
|
||||
*
|
||||
* $Revision: 1.24 $
|
||||
* $Revision: 1.25 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2001-10-17 13:02:12 $
|
||||
* last change: $Author: dbo $ $Date: 2002-08-19 07:18:49 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@@ -324,6 +324,8 @@ nPos = (sal_Int32)&((Test3 *)0)->aAny;
|
||||
a3.td.dDouble = 2;
|
||||
a3.bBool = sal_True;
|
||||
a3.aAny = makeAny( (sal_Int32)2 );
|
||||
OSL_ASSERT( a3.aAny.isExtractableTo( ::getCppuType( (sal_Int64 const *)0 ) ) );
|
||||
OSL_ASSERT( ::getCppuType( (sal_Int64 const *)0 ).isAssignableFrom( a3.aAny.getValueType() ) );
|
||||
bAssignable = uno_type_assignData(
|
||||
&sz3, getCppuType( (Test3*)0).getTypeLibType(),
|
||||
&a3, getCppuType( (Test3*)0).getTypeLibType(),
|
||||
@@ -1129,10 +1131,13 @@ int SAL_CALL main(int argc, char **argv)
|
||||
test_interface();
|
||||
test_inheritance();
|
||||
|
||||
// shutdown
|
||||
#ifdef SAL_W32
|
||||
Reference< XComponent > xComp( xContext, UNO_QUERY );
|
||||
OSL_ENSURE( xComp.is(), "### root component context implement XComponent!" );
|
||||
// shutdown
|
||||
Reference< XComponent > xComp( xContext, UNO_QUERY_THROW );
|
||||
xComp.set( xContext, UNO_QUERY_THROW );
|
||||
Reference< XInterface > x(
|
||||
xContext->getValueByName(
|
||||
OUString( RTL_CONSTASCII_USTRINGPARAM("/singletons/com.sun.star.reflection.theTypeDescriptionManager") ) ), UNO_QUERY_THROW );
|
||||
xComp->dispose();
|
||||
#endif
|
||||
}
|
||||
|
@@ -47,6 +47,7 @@ UDK_3_0_0 {
|
||||
uno_type_copyAndConvertData;
|
||||
uno_assignData;
|
||||
uno_type_assignData;
|
||||
uno_type_isAssignableFromData;
|
||||
|
||||
uno_any_assign;
|
||||
uno_type_any_assign;
|
||||
@@ -91,6 +92,8 @@ UDK_3_0_0 {
|
||||
uno_threadpool_dispose;
|
||||
uno_threadpool_attach;
|
||||
uno_threadpool_detach;
|
||||
|
||||
__cppu_unsatisfied_query_msg;
|
||||
local:
|
||||
*;
|
||||
};
|
||||
|
@@ -2,9 +2,9 @@
|
||||
#
|
||||
# $RCSfile: makefile.mk,v $
|
||||
#
|
||||
# $Revision: 1.4 $
|
||||
# $Revision: 1.5 $
|
||||
#
|
||||
# last change: $Author: svesik $ $Date: 2002-03-11 21:15:38 $
|
||||
# last change: $Author: dbo $ $Date: 2002-08-19 07:18:50 $
|
||||
#
|
||||
# The Contents of this file are made available subject to the terms of
|
||||
# either of the following licenses
|
||||
@@ -78,7 +78,8 @@ UNIXVERSIONNAMES=UDK
|
||||
SHL1LIBS= \
|
||||
$(SLB)$/cppu_typelib.lib \
|
||||
$(SLB)$/cppu_uno.lib \
|
||||
$(SLB)$/cppu_threadpool.lib
|
||||
$(SLB)$/cppu_threadpool.lib \
|
||||
$(SLB)$/cppu_cppu.lib
|
||||
|
||||
SHL1TARGET=$(TARGET)
|
||||
|
||||
|
Reference in New Issue
Block a user