summaryrefslogtreecommitdiff
path: root/basic/source/sbx/sbxarray.cxx
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2019-12-09 13:06:03 +0300
committerMike Kaganski <mike.kaganski@collabora.com>2019-12-09 14:18:25 +0100
commit62f3f3d92aa204eaaa063b30d7ade44df501b997 (patch)
treeb241ad744abad62cf898947757e88617811b309c /basic/source/sbx/sbxarray.cxx
parent6303f8ac291233b1f6888a8d71e769debe0f9fb0 (diff)
SbxArray: drop 16-bit indices
Change-Id: I43b478187636b9bb53fdf7ab938436ae364bd7a7 Reviewed-on: https://gerrit.libreoffice.org/84733 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'basic/source/sbx/sbxarray.cxx')
-rw-r--r--basic/source/sbx/sbxarray.cxx157
1 files changed, 16 insertions, 141 deletions
diff --git a/basic/source/sbx/sbxarray.cxx b/basic/source/sbx/sbxarray.cxx
index 6a3cc720c91d..152ab5a671f4 100644
--- a/basic/source/sbx/sbxarray.cxx
+++ b/basic/source/sbx/sbxarray.cxx
@@ -89,13 +89,6 @@ sal_uInt32 SbxArray::Count32() const
return mVarEntries.size();
}
-sal_uInt16 SbxArray::Count() const
-{
- sal_uInt32 nCount = mVarEntries.size();
- DBG_ASSERT( nCount <= SBX_MAXINDEX, "SBX: Array-Index > SBX_MAXINDEX" );
- return static_cast<sal_uInt16>(nCount);
-}
-
SbxVariableRef& SbxArray::GetRef32( sal_uInt32 nIdx )
{
// If necessary extend the array
@@ -112,22 +105,6 @@ SbxVariableRef& SbxArray::GetRef32( sal_uInt32 nIdx )
return mVarEntries[nIdx].mpVar;
}
-SbxVariableRef& SbxArray::GetRef( sal_uInt16 nIdx )
-{
- // If necessary extend the array
- DBG_ASSERT( nIdx <= SBX_MAXINDEX, "SBX: Array-Index > SBX_MAXINDEX" );
- // Very Hot Fix
- if( nIdx > SBX_MAXINDEX )
- {
- SetError( ERRCODE_BASIC_OUT_OF_RANGE );
- nIdx = 0;
- }
- if ( mVarEntries.size() <= nIdx )
- mVarEntries.resize(nIdx+1);
-
- return mVarEntries[nIdx].mpVar;
-}
-
SbxVariable* SbxArray::Get32( sal_uInt32 nIdx )
{
if( !CanRead() )
@@ -143,21 +120,6 @@ SbxVariable* SbxArray::Get32( sal_uInt32 nIdx )
return rRef.get();
}
-SbxVariable* SbxArray::Get( sal_uInt16 nIdx )
-{
- if( !CanRead() )
- {
- SetError( ERRCODE_BASIC_PROP_WRITEONLY );
- return nullptr;
- }
- SbxVariableRef& rRef = GetRef( nIdx );
-
- if ( !rRef.is() )
- rRef = new SbxVariable( eType );
-
- return rRef.get();
-}
-
void SbxArray::Put32( SbxVariable* pVar, sal_uInt32 nIdx )
{
if( !CanWrite() )
@@ -170,30 +132,10 @@ void SbxArray::Put32( SbxVariable* pVar, sal_uInt32 nIdx )
if( eType != SbxOBJECT || pVar->GetClass() != SbxClassType::Object )
pVar->Convert( eType );
SbxVariableRef& rRef = GetRef32( nIdx );
- if( rRef.get() != pVar )
- {
- rRef = pVar;
- SetFlag( SbxFlagBits::Modified );
- }
- }
-}
-
-void SbxArray::Put( SbxVariable* pVar, sal_uInt16 nIdx )
-{
- if( !CanWrite() )
- SetError( ERRCODE_BASIC_PROP_READONLY );
- else
- {
- if( pVar )
- if( eType != SbxVARIANT )
- // Convert no objects
- if( eType != SbxOBJECT || pVar->GetClass() != SbxClassType::Object )
- pVar->Convert( eType );
- SbxVariableRef& rRef = GetRef( nIdx );
// tdf#122250. It is possible that I hold the last reference to myself, so check, otherwise I might
// call SetFlag on myself after I have died.
bool removingMyself = rRef.get() && rRef->GetParameters() == this && GetRefCount() == 1;
- if(rRef.get() != pVar )
+ if( rRef.get() != pVar )
{
rRef = pVar;
if (!removingMyself)
@@ -202,14 +144,14 @@ void SbxArray::Put( SbxVariable* pVar, sal_uInt16 nIdx )
}
}
-OUString SbxArray::GetAlias( sal_uInt16 nIdx )
+OUString SbxArray::GetAlias32( sal_uInt32 nIdx )
{
if( !CanRead() )
{
SetError( ERRCODE_BASIC_PROP_WRITEONLY );
return OUString();
}
- SbxVarEntry& rRef = reinterpret_cast<SbxVarEntry&>(GetRef( nIdx ));
+ SbxVarEntry& rRef = reinterpret_cast<SbxVarEntry&>(GetRef32( nIdx ));
if (!rRef.maAlias)
return OUString();
@@ -217,7 +159,7 @@ OUString SbxArray::GetAlias( sal_uInt16 nIdx )
return *rRef.maAlias;
}
-void SbxArray::PutAlias( const OUString& rAlias, sal_uInt16 nIdx )
+void SbxArray::PutAlias32( const OUString& rAlias, sal_uInt32 nIdx )
{
if( !CanWrite() )
{
@@ -225,7 +167,7 @@ void SbxArray::PutAlias( const OUString& rAlias, sal_uInt16 nIdx )
}
else
{
- SbxVarEntry& rRef = reinterpret_cast<SbxVarEntry&>( GetRef( nIdx ) );
+ SbxVarEntry& rRef = reinterpret_cast<SbxVarEntry&>( GetRef32( nIdx ) );
rRef.maAlias = rAlias;
}
}
@@ -259,16 +201,6 @@ void SbxArray::Insert32( SbxVariable* pVar, sal_uInt32 nIdx )
SetFlag( SbxFlagBits::Modified );
}
-void SbxArray::Insert( SbxVariable* pVar, sal_uInt16 nIdx )
-{
- DBG_ASSERT( mVarEntries.size() <= 0x3FF0, "SBX: Array gets too big" );
- if( mVarEntries.size() > 0x3FF0 )
- {
- return;
- }
- Insert32( pVar, nIdx );
-}
-
void SbxArray::Remove( sal_uInt32 nIdx )
{
if( nIdx < mVarEntries.size() )
@@ -411,7 +343,7 @@ bool SbxArray::LoadData( SvStream& rStrm, sal_uInt16 /*nVer*/ )
SbxVariable* pVar = static_cast<SbxVariable*>(Load( rStrm ));
if( pVar )
{
- SbxVariableRef& rRef = GetRef( nIdx );
+ SbxVariableRef& rRef = GetRef32( nIdx );
rRef = pVar;
}
else
@@ -501,17 +433,6 @@ void SbxDimArray::AddDimImpl32( sal_Int32 lb, sal_Int32 ub, bool bAllowSize0 )
SetError( eRes );
}
-
-void SbxDimArray::AddDim( short lb, short ub )
-{
- AddDimImpl32( lb, ub, false );
-}
-
-void SbxDimArray::unoAddDim( short lb, short ub )
-{
- AddDimImpl32( lb, ub, true );
-}
-
void SbxDimArray::AddDim32( sal_Int32 lb, sal_Int32 ub )
{
AddDimImpl32( lb, ub, false );
@@ -539,23 +460,6 @@ bool SbxDimArray::GetDim32( sal_Int32 n, sal_Int32& rlb, sal_Int32& rub ) const
return true;
}
-bool SbxDimArray::GetDim( short n, short& rlb, short& rub ) const
-{
- sal_Int32 rlb32, rub32;
- bool bRet = GetDim32( n, rlb32, rub32 );
- rub = static_cast<short>(rub32);
- rlb = static_cast<short>(rlb32);
- if( bRet )
- {
- if( rlb32 < -SBX_MAXINDEX || rub32 > SBX_MAXINDEX )
- {
- SetError( ERRCODE_BASIC_OUT_OF_RANGE );
- return false;
- }
- }
- return bRet;
-}
-
// Element-Ptr with the help of an index list
sal_uInt32 SbxDimArray::Offset32( const sal_Int32* pIdx )
@@ -578,37 +482,6 @@ sal_uInt32 SbxDimArray::Offset32( const sal_Int32* pIdx )
return nPos;
}
-sal_uInt16 SbxDimArray::Offset( const short* pIdx )
-{
- long nPos = 0;
- for (auto const& vDimension : m_vDimensions)
- {
- short nIdx = *pIdx++;
- if( nIdx < vDimension.nLbound || nIdx > vDimension.nUbound )
- {
- nPos = SBX_MAXINDEX + 1;
- break;
- }
- nPos = nPos * vDimension.nSize + nIdx - vDimension.nLbound;
- }
- if( m_vDimensions.empty() || nPos > SBX_MAXINDEX )
- {
- SetError( ERRCODE_BASIC_OUT_OF_RANGE );
- nPos = 0;
- }
- return static_cast<sal_uInt16>(nPos);
-}
-
-SbxVariable* SbxDimArray::Get( const short* pIdx )
-{
- return SbxArray::Get( Offset( pIdx ) );
-}
-
-void SbxDimArray::Put( SbxVariable* p, const short* pIdx )
-{
- SbxArray::Put( p, Offset( pIdx ) );
-}
-
SbxVariable* SbxDimArray::Get32( const sal_Int32* pIdx )
{
return SbxArray::Get32( Offset32( pIdx ) );
@@ -624,7 +497,7 @@ sal_uInt32 SbxDimArray::Offset32( SbxArray* pPar )
{
#if HAVE_FEATURE_SCRIPTING
if (m_vDimensions.empty() || !pPar ||
- ((m_vDimensions.size() != sal::static_int_cast<size_t>(pPar->Count() - 1))
+ ((m_vDimensions.size() != sal::static_int_cast<size_t>(pPar->Count32() - 1))
&& SbiRuntime::isVBAEnabled()))
{
SetError( ERRCODE_BASIC_OUT_OF_RANGE );
@@ -632,10 +505,10 @@ sal_uInt32 SbxDimArray::Offset32( SbxArray* pPar )
}
#endif
sal_uInt32 nPos = 0;
- sal_uInt16 nOff = 1; // Non element 0!
+ sal_uInt32 nOff = 1; // Non element 0!
for (auto const& vDimension : m_vDimensions)
{
- sal_Int32 nIdx = pPar->Get( nOff++ )->GetLong();
+ sal_Int32 nIdx = pPar->Get32( nOff++ )->GetLong();
if( nIdx < vDimension.nLbound || nIdx > vDimension.nUbound )
{
nPos = sal_uInt32(SBX_MAXINDEX32)+1;
@@ -666,19 +539,21 @@ bool SbxDimArray::LoadData( SvStream& rStrm, sal_uInt16 nVer )
{
sal_Int16 lb(0), ub(0);
rStrm.ReadInt16( lb ).ReadInt16( ub );
- AddDim( lb, ub );
+ AddDim32( lb, ub );
}
return SbxArray::LoadData( rStrm, nVer );
}
bool SbxDimArray::StoreData( SvStream& rStrm ) const
{
+ assert(m_vDimensions.size() <= sal::static_int_cast<size_t>(std::numeric_limits<sal_Int16>::max()));
rStrm.WriteInt16( m_vDimensions.size() );
- for( short i = 0; i < static_cast<short>(m_vDimensions.size()); i++ )
+ for( sal_Int32 i = 1; i <= static_cast<sal_Int32>(m_vDimensions.size()); i++ )
{
- short lb, ub;
- GetDim( i, lb, ub );
- rStrm.WriteInt16( lb ).WriteInt16( ub );
+ sal_Int32 lb32, ub32;
+ GetDim32(i, lb32, ub32);
+ assert(lb32 >= -SBX_MAXINDEX && ub32 <= SBX_MAXINDEX);
+ rStrm.WriteInt16(lb32).WriteInt16(ub32);
}
return SbxArray::StoreData( rStrm );
}