chart2/source/model/main/ChartModel.cxx             |    2 +-
 comphelper/source/container/interfacecontainer2.cxx |   14 ++++++++++++++
 include/comphelper/interfacecontainer2.hxx          |    2 ++
 svx/source/unodraw/unoshcol.cxx                     |    6 ++----
 4 files changed, 19 insertions(+), 5 deletions(-)

New commits:
commit 392f19c957b55de1ce834cb465f51f27c2c7cf60
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Tue Aug 17 18:48:06 2021 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Aug 18 10:41:34 2021 +0200

    improve SvxShapeCollection::getByIndex
    
    Change-Id: I4cca7c0b6344241256d038902069a20ece314358
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120618
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/chart2/source/model/main/ChartModel.cxx 
b/chart2/source/model/main/ChartModel.cxx
index ab846502f29f..9960f84c00b1 100644
--- a/chart2/source/model/main/ChartModel.cxx
+++ b/chart2/source/model/main/ChartModel.cxx
@@ -234,7 +234,7 @@ uno::Reference< frame::XController > 
ChartModel::impl_getCurrentController()
     // get the first controller of this model
     if( m_aControllers.getLength() )
     {
-        uno::Reference<uno::XInterface> xI = m_aControllers.getElements()[0];
+        uno::Reference<uno::XInterface> xI = m_aControllers.getInterface(0);
         return uno::Reference<frame::XController>( xI, uno::UNO_QUERY );
     }
 
diff --git a/comphelper/source/container/interfacecontainer2.cxx 
b/comphelper/source/container/interfacecontainer2.cxx
index 9ad26cc64cea..0881ccbe44cf 100644
--- a/comphelper/source/container/interfacecontainer2.cxx
+++ b/comphelper/source/container/interfacecontainer2.cxx
@@ -240,6 +240,20 @@ sal_Int32 OInterfaceContainerHelper2::removeInterface( 
const Reference<XInterfac
     return aData.pAsInterface ? 1 : 0;
 }
 
+Reference<XInterface> OInterfaceContainerHelper2::getInterface( sal_Int32 
nIndex ) const
+{
+    MutexGuard aGuard( rMutex );
+
+    if( bIsList )
+        return (*aData.pAsVector)[nIndex];
+    else if( aData.pAsInterface )
+    {
+        if (nIndex == 0)
+            return aData.pAsInterface;
+    }
+    throw std::out_of_range("index out of range");
+}
+
 void OInterfaceContainerHelper2::disposeAndClear( const EventObject & rEvt )
 {
     ClearableMutexGuard aGuard( rMutex );
diff --git a/include/comphelper/interfacecontainer2.hxx 
b/include/comphelper/interfacecontainer2.hxx
index e001f56e6245..286a5f2cb876 100644
--- a/include/comphelper/interfacecontainer2.hxx
+++ b/include/comphelper/interfacecontainer2.hxx
@@ -171,6 +171,8 @@ public:
                 the new count of elements in the container
     */
     sal_Int32 removeInterface( const css::uno::Reference< css::uno::XInterface 
> & rxIFace );
+    /** Return an interface by index */
+    css::uno::Reference< css::uno::XInterface > getInterface(sal_Int32 nIndex) 
const;
     /**
       Call disposing on all object in the container that
       support XEventListener. Then clear the container.
diff --git a/svx/source/unodraw/unoshcol.cxx b/svx/source/unodraw/unoshcol.cxx
index 616f05151e8f..450de874753b 100644
--- a/svx/source/unodraw/unoshcol.cxx
+++ b/svx/source/unodraw/unoshcol.cxx
@@ -213,10 +213,8 @@ uno::Any SAL_CALL SvxShapeCollection::getByIndex( 
sal_Int32 Index )
     if( Index < 0 || Index >= getCount() )
         throw lang::IndexOutOfBoundsException();
 
-    std::vector< Reference< uno::XInterface> > aElements( 
maShapeContainer.getElements() );
-
-
-    return uno::makeAny( Reference< drawing::XShape>(static_cast< 
drawing::XShape* >( aElements[Index].get())) );
+    Reference< uno::XInterface> xInterface = 
maShapeContainer.getInterface(Index);
+    return uno::makeAny( Reference< drawing::XShape>(static_cast< 
drawing::XShape* >( xInterface.get())) );
 }
 
 // XElementAccess

Reply via email to