summaryrefslogtreecommitdiff
path: root/cppu
diff options
context:
space:
mode:
authorOliver Bolte <obo@openoffice.org>2003-09-04 09:51:45 +0000
committerOliver Bolte <obo@openoffice.org>2003-09-04 09:51:45 +0000
commit9561d993dec91c9996788f3e6b4edd799d545b28 (patch)
tree0eb4478f8067a83d2813b9af04c51b21b0d4675a /cppu
parentb67a582a089f3190da73454dc46f047705ec8fe1 (diff)
INTEGRATION: CWS cliuno01 (1.14.44); FILE MERGED
2003/09/01 16:51:29 dbo 1.14.44.5: #107130# less code 2003/08/11 10:42:01 dbo 1.14.44.4: using bad_alloc def ctor 2003/08/08 12:43:48 dbo 1.14.44.3: RESYNC: (1.14-1.15); FILE MERGED 2003/07/24 15:19:00 dbo 1.14.44.2: - sequence reallocation fix - more code cleanup - test code 2003/07/23 16:39:19 dbo 1.14.44.1: - fixing cppu core sequence routines returning 0 handle upon memory allocation failure - C++ Sequence<> throws ::std::bad_alloc upon memory allocation failure
Diffstat (limited to 'cppu')
-rw-r--r--cppu/inc/com/sun/star/uno/Sequence.hxx143
1 files changed, 92 insertions, 51 deletions
diff --git a/cppu/inc/com/sun/star/uno/Sequence.hxx b/cppu/inc/com/sun/star/uno/Sequence.hxx
index ef19e9c24abf..88d1108cbc64 100644
--- a/cppu/inc/com/sun/star/uno/Sequence.hxx
+++ b/cppu/inc/com/sun/star/uno/Sequence.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: Sequence.hxx,v $
*
- * $Revision: 1.15 $
+ * $Revision: 1.16 $
*
- * last change: $Author: vg $ $Date: 2003-06-12 10:33:29 $
+ * last change: $Author: obo $ $Date: 2003-09-04 10:51:45 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -62,22 +62,22 @@
#define _COM_SUN_STAR_UNO_SEQUENCE_HXX_
#ifndef _OSL_DIAGNOSE_H_
-#include <osl/diagnose.h>
+#include "osl/diagnose.h"
#endif
#ifndef _OSL_INTERLCK_H_
-#include <osl/interlck.h>
+#include "osl/interlck.h"
#endif
#ifndef _COM_SUN_STAR_UNO_SEQUENCE_H_
-#include <com/sun/star/uno/Sequence.h>
+#include "com/sun/star/uno/Sequence.h"
#endif
#ifndef _TYPELIB_TYPEDESCRIPTION_H_
-#include <typelib/typedescription.h>
+#include "typelib/typedescription.h"
#endif
#ifndef _UNO_DATA_H_
-#include <uno/data.h>
+#include "uno/data.h"
#endif
#ifndef _COM_SUN_STAR_UNO_GENFUNC_HXX_
-#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/genfunc.hxx"
#endif
@@ -89,11 +89,12 @@ namespace star
{
namespace uno
{
-//__________________________________________________________________________________________________
+
+//______________________________________________________________________________
template< class E >
typelib_TypeDescriptionReference * Sequence< E >::s_pType = 0;
-//__________________________________________________________________________________________________
+//______________________________________________________________________________
template< class E >
inline Sequence< E >::Sequence() SAL_THROW( () )
{
@@ -101,39 +102,54 @@ inline Sequence< E >::Sequence() SAL_THROW( () )
::uno_type_sequence_construct(
&_pSequence, rType.getTypeLibType(),
0, 0, (uno_AcquireFunc)cpp_acquire );
+ // no bad_alloc, because empty sequence is statically allocated in cppu
}
-//__________________________________________________________________________________________________
+
+//______________________________________________________________________________
template< class E >
inline Sequence< E >::Sequence( const Sequence< E > & rSeq ) SAL_THROW( () )
{
::osl_incrementInterlockedCount( &rSeq._pSequence->nRefCount );
_pSequence = rSeq._pSequence;
}
-//__________________________________________________________________________________________________
+
+//______________________________________________________________________________
template< class E >
-inline Sequence< E >::Sequence( uno_Sequence * pSequence, __sal_NoAcquire ) SAL_THROW( () )
- : _pSequence( pSequence )
+inline Sequence< E >::Sequence(
+ uno_Sequence * pSequence, __sal_NoAcquire ) SAL_THROW( () )
+ : _pSequence( pSequence )
{
}
-//__________________________________________________________________________________________________
+
+//______________________________________________________________________________
template< class E >
-inline Sequence< E >::Sequence( const E * pElements, sal_Int32 len ) SAL_THROW( () )
+inline Sequence< E >::Sequence( const E * pElements, sal_Int32 len )
{
const Type & rType = ::getCppuType( this );
- ::uno_type_sequence_construct(
+ sal_Bool success = ::uno_type_sequence_construct(
&_pSequence, rType.getTypeLibType(),
const_cast< E * >( pElements ), len, (uno_AcquireFunc)cpp_acquire );
+#if ! defined EXCEPTIONS_OFF
+ if (! success)
+ throw ::std::bad_alloc();
+#endif
}
-//__________________________________________________________________________________________________
+
+//______________________________________________________________________________
template< class E >
-inline Sequence< E >::Sequence( sal_Int32 len ) SAL_THROW( () )
+inline Sequence< E >::Sequence( sal_Int32 len )
{
const Type & rType = ::getCppuType( this );
- ::uno_type_sequence_construct(
+ sal_Bool success = ::uno_type_sequence_construct(
&_pSequence, rType.getTypeLibType(),
0, len, (uno_AcquireFunc)cpp_acquire );
+#if ! defined EXCEPTIONS_OFF
+ if (! success)
+ throw ::std::bad_alloc();
+#endif
}
-//__________________________________________________________________________________________________
+
+//______________________________________________________________________________
template< class E >
inline Sequence< E >::~Sequence() SAL_THROW( () )
{
@@ -141,7 +157,8 @@ inline Sequence< E >::~Sequence() SAL_THROW( () )
::uno_type_destructData(
this, rType.getTypeLibType(), (uno_ReleaseFunc)cpp_release );
}
-//__________________________________________________________________________________________________
+
+//______________________________________________________________________________
template< class E >
inline Sequence< E > & Sequence< E >::operator = ( const Sequence< E > & rSeq ) SAL_THROW( () )
{
@@ -150,9 +167,11 @@ inline Sequence< E > & Sequence< E >::operator = ( const Sequence< E > & rSeq )
&_pSequence, rSeq._pSequence, rType.getTypeLibType(), (uno_ReleaseFunc)cpp_release );
return *this;
}
-//__________________________________________________________________________________________________
+
+//______________________________________________________________________________
template< class E >
-inline sal_Bool Sequence< E >::operator == ( const Sequence< E > & rSeq ) const SAL_THROW( () )
+inline sal_Bool Sequence< E >::operator == ( const Sequence< E > & rSeq ) const
+ SAL_THROW( () )
{
if (_pSequence == rSeq._pSequence)
return sal_True;
@@ -160,53 +179,69 @@ inline sal_Bool Sequence< E >::operator == ( const Sequence< E > & rSeq ) const
return ::uno_type_equalData(
const_cast< Sequence< E > * >( this ), rType.getTypeLibType(),
const_cast< Sequence< E > * >( &rSeq ), rType.getTypeLibType(),
- (uno_QueryInterfaceFunc)cpp_queryInterface, (uno_ReleaseFunc)cpp_release );
+ (uno_QueryInterfaceFunc)cpp_queryInterface,
+ (uno_ReleaseFunc)cpp_release );
}
-//__________________________________________________________________________________________________
+
+//______________________________________________________________________________
template< class E >
-inline sal_Bool Sequence< E >::operator != ( const Sequence< E > & rSeq ) const SAL_THROW( () )
+inline sal_Bool Sequence< E >::operator != ( const Sequence< E > & rSeq ) const
+ SAL_THROW( () )
{
return (! operator == ( rSeq ));
}
-//__________________________________________________________________________________________________
+
+//______________________________________________________________________________
template< class E >
-inline E * Sequence< E >::getArray() SAL_THROW( () )
+inline E * Sequence< E >::getArray()
{
const Type & rType = ::getCppuType( this );
- ::uno_type_sequence_reference2One(
+ sal_Bool success = ::uno_type_sequence_reference2One(
&_pSequence, rType.getTypeLibType(),
(uno_AcquireFunc)cpp_acquire, (uno_ReleaseFunc)cpp_release );
+#if ! defined EXCEPTIONS_OFF
+ if (! success)
+ throw ::std::bad_alloc();
+#endif
return reinterpret_cast< E * >( _pSequence->elements );
}
-//__________________________________________________________________________________________________
+
+//______________________________________________________________________________
template< class E >
-inline E & Sequence< E >::operator [] ( sal_Int32 nIndex ) SAL_THROW( () )
+inline E & Sequence< E >::operator [] ( sal_Int32 nIndex )
{
- OSL_ENSURE( nIndex >= 0 && nIndex < getLength(), "### illegal index of sequence!" );
- const Type & rType = ::getCppuType( this );
- ::uno_type_sequence_reference2One(
- &_pSequence, rType.getTypeLibType(),
- (uno_AcquireFunc)cpp_acquire, (uno_ReleaseFunc)cpp_release );
- return reinterpret_cast< E * >( _pSequence->elements )[ nIndex ];
+ OSL_ENSURE(
+ nIndex >= 0 && nIndex < getLength(),
+ "### illegal index of sequence!" );
+ return getArray()[ nIndex ];
}
-//__________________________________________________________________________________________________
+
+//______________________________________________________________________________
template< class E >
-inline const E & Sequence< E >::operator [] ( sal_Int32 nIndex ) const SAL_THROW( () )
+inline const E & Sequence< E >::operator [] ( sal_Int32 nIndex ) const
+ SAL_THROW( () )
{
- OSL_ENSURE( nIndex >= 0 && nIndex < getLength(), "### illegal index of sequence!" );
+ OSL_ENSURE(
+ nIndex >= 0 && nIndex < getLength(),
+ "### illegal index of sequence!" );
return reinterpret_cast< const E * >( _pSequence->elements )[ nIndex ];
}
-//__________________________________________________________________________________________________
+
+//______________________________________________________________________________
template< class E >
-inline void Sequence< E >::realloc( sal_Int32 nSize ) SAL_THROW( () )
+inline void Sequence< E >::realloc( sal_Int32 nSize )
{
const Type & rType = ::getCppuType( this );
- ::uno_type_sequence_realloc(
+ sal_Bool success = ::uno_type_sequence_realloc(
&_pSequence, rType.getTypeLibType(), nSize,
(uno_AcquireFunc)cpp_acquire, (uno_ReleaseFunc)cpp_release );
+#if ! defined EXCEPTIONS_OFF
+ if (! success)
+ throw ::std::bad_alloc();
+#endif
}
-//--------------------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
inline ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL toUnoSequence(
const ::rtl::ByteSequence & rByteSequence ) SAL_THROW( () )
{
@@ -222,7 +257,8 @@ inline ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL toUnoSequence(
// generic sequence template
template< class E >
inline const ::com::sun::star::uno::Type &
-SAL_CALL getCppuType( const ::com::sun::star::uno::Sequence< E > * ) SAL_THROW( () )
+SAL_CALL getCppuType( const ::com::sun::star::uno::Sequence< E > * )
+ SAL_THROW( () )
{
if (! ::com::sun::star::uno::Sequence< E >::s_pType)
{
@@ -239,7 +275,8 @@ SAL_CALL getCppuType( const ::com::sun::star::uno::Sequence< E > * ) SAL_THROW(
// generic sequence template for given element type (e.g. C++ arrays)
template< class E >
inline const ::com::sun::star::uno::Type &
-SAL_CALL getCppuSequenceType( const ::com::sun::star::uno::Type & rElementType ) SAL_THROW( () )
+SAL_CALL getCppuSequenceType( const ::com::sun::star::uno::Type & rElementType )
+ SAL_THROW( () )
{
if (! ::com::sun::star::uno::Sequence< E >::s_pType)
{
@@ -251,16 +288,20 @@ SAL_CALL getCppuSequenceType( const ::com::sun::star::uno::Type & rElementType )
& ::com::sun::star::uno::Sequence< E >::s_pType );
}
-#if ((defined(__SUNPRO_CC) && (__SUNPRO_CC == 0x500)) || (defined(__GNUC__) && defined(__APPLE__)))
-static typelib_TypeDescriptionReference * s_pType_com_sun_star_uno_Sequence_Char = 0;
+#if ((defined(__SUNPRO_CC) && (__SUNPRO_CC == 0x500)) || \
+ (defined(__GNUC__) && defined(__APPLE__)))
+static typelib_TypeDescriptionReference * s_pType_com_sun_star_uno_Sequence_Char
+= 0;
#endif
// char sequence
inline const ::com::sun::star::uno::Type &
SAL_CALL getCharSequenceCppuType() SAL_THROW( () )
{
-#if !( (defined(__SUNPRO_CC) && (__SUNPRO_CC == 0x500)) || (defined(__GNUC__) && defined(__APPLE__)) )
- static typelib_TypeDescriptionReference * s_pType_com_sun_star_uno_Sequence_Char = 0;
+#if !( (defined(__SUNPRO_CC) && (__SUNPRO_CC == 0x500)) || \
+ (defined(__GNUC__) && defined(__APPLE__)) )
+ static typelib_TypeDescriptionReference *
+ s_pType_com_sun_star_uno_Sequence_Char = 0;
#endif
if (! s_pType_com_sun_star_uno_Sequence_Char)
{