include/svx/svdpage.hxx                            |    2 
 svx/source/dialog/connctrl.cxx                     |   11 --
 svx/source/engine3d/scene3d.cxx                    |   29 +++---
 svx/source/engine3d/view3d.cxx                     |   17 +--
 svx/source/engine3d/view3d1.cxx                    |    4 
 svx/source/form/fmview.cxx                         |    5 -
 svx/source/form/navigatortreemodel.cxx             |    5 -
 svx/source/sdr/contact/objectcontactofpageview.cxx |    4 
 svx/source/sdr/properties/e3dsceneproperties.cxx   |   86 ++++++++----------
 svx/source/sdr/properties/groupproperties.cxx      |   88 +++++++------------
 svx/source/svdraw/sdrpagewindow.cxx                |    6 -
 svx/source/svdraw/svdmark.cxx                      |   15 +--
 svx/source/svdraw/svdmrkv.cxx                      |   21 +---
 svx/source/svdraw/svdobj.cxx                       |   12 --
 svx/source/svdraw/svdogrp.cxx                      |   97 +++++----------------
 svx/source/svdraw/svdotext.cxx                     |   11 --
 svx/source/svdraw/svdpage.cxx                      |   56 ++++--------
 svx/source/svdraw/svdpagv.cxx                      |    5 -
 svx/source/svdraw/svdpntv.cxx                      |    6 -
 svx/source/svdraw/svdundo.cxx                      |   11 --
 sw/source/core/access/accmap.cxx                   |   13 +-
 sw/source/core/doc/docdraw.cxx                     |    4 
 sw/source/core/doc/doclay.cxx                      |    6 -
 sw/source/core/doc/textboxhelper.cxx               |   25 ++---
 sw/source/core/draw/dcontact.cxx                   |    8 -
 sw/source/core/draw/drawdoc.cxx                    |    4 
 sw/source/core/frmedt/fefly1.cxx                   |    8 -
 sw/source/core/frmedt/feshview.cxx                 |    9 +
 sw/source/core/model/ModelTraverser.cxx            |   10 --
 sw/source/core/model/SearchResultLocator.cxx       |   18 +--
 sw/source/core/undo/undraw.cxx                     |   19 +---
 sw/source/core/view/vdraw.cxx                      |    8 -
 sw/source/uibase/uiview/viewdraw.cxx               |    6 -
 sw/source/uibase/uno/unotxdoc.cxx                  |   15 +--
 sw/source/uibase/utlui/content.cxx                 |   25 +----
 sw/source/uibase/wrtsh/move.cxx                    |    6 -
 36 files changed, 255 insertions(+), 420 deletions(-)

New commits:
commit 6dc53be7d2eabc23e3d96bae94d38e56d37b2bb5
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Oct 18 12:28:37 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Oct 18 20:08:31 2023 +0200

    use more SdrObjList::begin/end in sw
    
    Change-Id: If882c1c7863618a313b2e06abacdbfa756dfff3e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158114
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx
index 3babe9e879d0..9b3ac84876eb 100644
--- a/sw/source/core/access/accmap.cxx
+++ b/sw/source/core/access/accmap.cxx
@@ -1998,13 +1998,12 @@ void SwAccessibleMap::RemoveGroupContext(const 
SdrObject *pParentObj)
     // but also by visibility checks in svx, then it doesn't return children.
     if (mpShapeMap && pParentObj && pParentObj->IsGroupObject())
     {
-        SdrObjList *const pChildren(pParentObj->GetSubList());
-        for (size_t i = 0; pChildren && i < pChildren->GetObjCount(); ++i)
-        {
-            SdrObject *const pChild(pChildren->GetObj(i));
-            assert(pChild);
-            RemoveContext(pChild);
-        }
+        if (SdrObjList *const pChildren = pParentObj->GetSubList())
+            for (const rtl::Reference<SdrObject>& pChild : *pChildren)
+            {
+                assert(pChild);
+                RemoveContext(pChild.get());
+            }
     }
 }
 //End
diff --git a/sw/source/core/doc/docdraw.cxx b/sw/source/core/doc/docdraw.cxx
index cd1883ee346b..aecbe2ac824f 100644
--- a/sw/source/core/doc/docdraw.cxx
+++ b/sw/source/core/doc/docdraw.cxx
@@ -307,8 +307,8 @@ static void 
lcl_CollectTextBoxesForSubGroupObj(SwFrameFormat* pTargetFormat, std
                                                SdrObject* pSourceObjs)
 {
     if (auto pChildrenObjs = pSourceObjs->getChildrenOfSdrObject())
-        for (size_t i = 0; i < pChildrenObjs->GetObjCount(); ++i)
-            lcl_CollectTextBoxesForSubGroupObj(pTargetFormat, pTextBoxNode, 
pChildrenObjs->GetObj(i));
+        for (const rtl::Reference<SdrObject>& pSubObj : *pChildrenObjs)
+            lcl_CollectTextBoxesForSubGroupObj(pTargetFormat, pTextBoxNode, 
pSubObj.get());
     else
     {
         if (auto pTextBox = pTextBoxNode->GetTextBox(pSourceObjs))
diff --git a/sw/source/core/doc/doclay.cxx b/sw/source/core/doc/doclay.cxx
index c9881b848d29..ea643f042fe4 100644
--- a/sw/source/core/doc/doclay.cxx
+++ b/sw/source/core/doc/doclay.cxx
@@ -1303,12 +1303,8 @@ static void lcl_collectUsedNums(std::vector<unsigned 
int>& rSetFlags, sal_Int32
 
     const SdrObjList* pSub(rObj.GetSubList());
     assert(pSub && "IsGroupObject is implemented as GetSubList != nullptr");
-    const size_t nCount = pSub->GetObjCount();
-    for (size_t i = 0; i < nCount; ++i)
+    for (const rtl::Reference<SdrObject>& pObj : *pSub)
     {
-        SdrObject* pObj = pSub->GetObj(i);
-        if (!pObj)
-            continue;
         lcl_collectUsedNums(rSetFlags, nNmLen, *pObj, rCmpName);
     }
 }
diff --git a/sw/source/core/doc/textboxhelper.cxx 
b/sw/source/core/doc/textboxhelper.cxx
index 1bb09d55b753..98c77db26d4e 100644
--- a/sw/source/core/doc/textboxhelper.cxx
+++ b/sw/source/core/doc/textboxhelper.cxx
@@ -336,9 +336,8 @@ bool SwTextBoxHelper::hasTextFrame(const SdrObject* pObj)
 sal_Int32 SwTextBoxHelper::getCount(SdrPage const* pPage)
 {
     sal_Int32 nRet = 0;
-    for (std::size_t i = 0; i < pPage->GetObjCount(); ++i)
+    for (const rtl::Reference<SdrObject>& p : *pPage)
     {
-        SdrObject* p = pPage->GetObj(i);
         if (p && p->IsTextBox())
             continue;
         ++nRet;
@@ -364,14 +363,13 @@ uno::Any SwTextBoxHelper::getByIndex(SdrPage const* 
pPage, sal_Int32 nIndex)
 
     SdrObject* pRet = nullptr;
     sal_Int32 nCount = 0; // Current logical index.
-    for (std::size_t i = 0; i < pPage->GetObjCount(); ++i)
+    for (const rtl::Reference<SdrObject>& p : *pPage)
     {
-        SdrObject* p = pPage->GetObj(i);
         if (p && p->IsTextBox())
             continue;
         if (nCount == nIndex)
         {
-            pRet = p;
+            pRet = p.get();
             break;
         }
         ++nCount;
@@ -388,9 +386,8 @@ sal_Int32 SwTextBoxHelper::getOrdNum(const SdrObject* 
pObject)
     if (const SdrPage* pPage = pObject->getSdrPageFromSdrObject())
     {
         sal_Int32 nOrder = 0; // Current logical order.
-        for (std::size_t i = 0; i < pPage->GetObjCount(); ++i)
+        for (const rtl::Reference<SdrObject>& p : *pPage)
         {
-            SdrObject* p = pPage->GetObj(i);
             if (p && p->IsTextBox())
                 continue;
             if (p == pObject)
@@ -1579,8 +1576,8 @@ void 
SwTextBoxHelper::synchronizeGroupTextBoxProperty(bool pFunc(SwFrameFormat*,
 {
     if (auto pChildren = pObj->getChildrenOfSdrObject())
     {
-        for (size_t i = 0; i < pChildren->GetObjCount(); ++i)
-            synchronizeGroupTextBoxProperty(pFunc, pFormat, 
pChildren->GetObj(i));
+        for (const rtl::Reference<SdrObject>& pChildObj : *pChildren)
+            synchronizeGroupTextBoxProperty(pFunc, pFormat, pChildObj.get());
     }
     else
     {
@@ -1594,9 +1591,9 @@ std::vector<SwFrameFormat*> 
SwTextBoxHelper::CollectTextBoxes(const SdrObject* p
     std::vector<SwFrameFormat*> vRet;
     if (auto pChildren = pGroupObject->getChildrenOfSdrObject())
     {
-        for (size_t i = 0; i < pChildren->GetObjCount(); ++i)
+        for (const rtl::Reference<SdrObject>& pObj : *pChildren)
         {
-            auto pChildTextBoxes = CollectTextBoxes(pChildren->GetObj(i), 
pFormat);
+            auto pChildTextBoxes = CollectTextBoxes(pObj.get(), pFormat);
             for (auto& rChildTextBox : pChildTextBoxes)
                 vRet.push_back(rChildTextBox);
         }
@@ -1919,10 +1916,10 @@ void SwTextBoxNode::Clone_Impl(SwDoc* pDoc, const 
SwFormatAnchor& rNewAnc, SwFra
             return;
         }
 
-        for (size_t i = 0; i < pSrcList->GetObjCount(); ++i)
+        for (auto itSrc = pSrcList->begin(), itDest = pDestList->begin(); 
itSrc != pSrcList->end();
+             ++itSrc, ++itDest)
         {
-            Clone_Impl(pDoc, rNewAnc, o_pTarget, pSrcList->GetObj(i), 
pDestList->GetObj(i),
-                       bSetAttr, bMakeFrame);
+            Clone_Impl(pDoc, rNewAnc, o_pTarget, itSrc->get(), itDest->get(), 
bSetAttr, bMakeFrame);
         }
         return;
     }
diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx
index da79a66b6739..5c2147ed91a9 100644
--- a/sw/source/core/draw/dcontact.cxx
+++ b/sw/source/core/draw/dcontact.cxx
@@ -320,9 +320,9 @@ void SwContact::MoveObjToLayer( const bool _bToVisible,
                 static_cast<SdrObjGroup*>(_pDrawObj)->GetSubList();
         if ( pLst )
         {
-            for ( size_t i = 0; i < pLst->GetObjCount(); ++i )
+            for (const rtl::Reference<SdrObject>& pObj : *pLst)
             {
-                MoveObjToLayer( _bToVisible, pLst->GetObj( i ) );
+                MoveObjToLayer( _bToVisible, pObj.get() );
             }
         }
     }
@@ -686,9 +686,9 @@ bool CheckControlLayer( const SdrObject *pObj )
     if (const SdrObjGroup *pObjGroup = dynamic_cast<const SdrObjGroup*>(pObj))
     {
         const SdrObjList *pLst = pObjGroup->GetSubList();
-        for ( size_t i = 0; i < pLst->GetObjCount(); ++i )
+        for (const rtl::Reference<SdrObject>& pChildObj : *pLst)
         {
-            if ( ::CheckControlLayer( pLst->GetObj( i ) ) )
+            if ( ::CheckControlLayer( pChildObj.get() ) )
             {
                 // #i18447# - return correct value ;-)
                 return true;
diff --git a/sw/source/core/draw/drawdoc.cxx b/sw/source/core/draw/drawdoc.cxx
index 4470168feb95..4d53c76344f3 100644
--- a/sw/source/core/draw/drawdoc.cxx
+++ b/sw/source/core/draw/drawdoc.cxx
@@ -97,10 +97,8 @@ SwDrawModel::~SwDrawModel()
     for (sal_uInt16 i=0; i < nPageCount; ++i)
     {
         SdrPage* pPage = GetPage(i);
-        const size_t nObjCount = pPage->GetObjCount();
-        for (size_t j=0; j < nObjCount; ++j)
+        for (const rtl::Reference<SdrObject>& pSdrObj : *pPage)
         {
-            SdrObject* pSdrObj = pPage->GetObj(j);
             SwDrawContact* pContact = 
dynamic_cast<SwDrawContact*>(pSdrObj->GetUserCall());
             if (pContact)
                 pContact->RemoveAllVirtObjs();
diff --git a/sw/source/core/frmedt/fefly1.cxx b/sw/source/core/frmedt/fefly1.cxx
index 2fb646150d0e..425db6ed1b27 100644
--- a/sw/source/core/frmedt/fefly1.cxx
+++ b/sw/source/core/frmedt/fefly1.cxx
@@ -617,12 +617,10 @@ Point SwFEShell::FindAnchorPos( const Point& rAbsPos, 
bool bMoveIt )
                         if (SwTextBoxHelper::getOtherTextBoxFormat(&rFormat, 
RES_DRAWFRMFMT,
                             pObj))
                         {
-                            if (pObj->getChildrenOfSdrObject())
+                            if (SdrObjList* pObjList = 
pObj->getChildrenOfSdrObject())
                             {
-                                for (size_t i = 0;
-                                     i < 
pObj->getChildrenOfSdrObject()->GetObjCount(); ++i)
-                                    SwTextBoxHelper::changeAnchor(
-                                        &rFormat, 
pObj->getChildrenOfSdrObject()->GetObj(i));
+                                for (const rtl::Reference<SdrObject>& pChild : 
*pObjList)
+                                    SwTextBoxHelper::changeAnchor(&rFormat, 
pChild.get());
                             }
                             else
                                 SwTextBoxHelper::syncFlyFrameAttr(
diff --git a/sw/source/core/frmedt/feshview.cxx 
b/sw/source/core/frmedt/feshview.cxx
index 7b1da09c118f..17923c83d255 100644
--- a/sw/source/core/frmedt/feshview.cxx
+++ b/sw/source/core/frmedt/feshview.cxx
@@ -1380,14 +1380,15 @@ bool SwFEShell::ShouldObjectBeSelected(const Point& rPt)
             if ( bRet )
             {
                 const SdrPage* pPage = rIDDMA.GetDrawModel()->GetPage(0);
-                for(size_t a = pObj->GetOrdNum()+1; bRet && a < 
pPage->GetObjCount(); ++a)
+                for(auto it = pPage->begin() + pObj->GetOrdNum() + 1; it != 
pPage->end(); ++it)
                 {
-                    SdrObject *pCandidate = pPage->GetObj(a);
+                    SdrObject *pCandidate = it->get();
 
                     SwVirtFlyDrawObj* pDrawObj = 
dynamic_cast<SwVirtFlyDrawObj*>(pCandidate);
                     if (pDrawObj && 
pDrawObj->GetCurrentBoundRect().Contains(rPt))
                     {
                         bRet = false;
+                        break;
                     }
                 }
             }
@@ -1412,8 +1413,8 @@ static bool lcl_IsControlGroup( const SdrObject *pObj )
     {
         bRet = true;
         const SdrObjList *pLst = pObjGroup->GetSubList();
-        for ( size_t i = 0; i < pLst->GetObjCount(); ++i )
-            if( !::lcl_IsControlGroup( pLst->GetObj( i ) ) )
+        for (const rtl::Reference<SdrObject>& pChildObj : *pLst)
+            if( !::lcl_IsControlGroup( pChildObj.get() ) )
                 return false;
     }
     return bRet;
diff --git a/sw/source/core/model/ModelTraverser.cxx 
b/sw/source/core/model/ModelTraverser.cxx
index b7d2b2200dd6..6ab8e39c42cf 100644
--- a/sw/source/core/model/ModelTraverser.cxx
+++ b/sw/source/core/model/ModelTraverser.cxx
@@ -42,15 +42,11 @@ void ModelTraverser::traverse()
     for (sal_uInt16 nPage = 0; nPage < pModel->GetPageCount(); ++nPage)
     {
         SdrPage* pPage = pModel->GetPage(nPage);
-        for (size_t nObject = 0; nObject < pPage->GetObjCount(); ++nObject)
+        for (const rtl::Reference<SdrObject>& pObject : *pPage)
         {
-            SdrObject* pObject = pPage->GetObj(nObject);
-            if (pObject)
+            for (auto& pNodeHandler : mpNodeHandler)
             {
-                for (auto& pNodeHandler : mpNodeHandler)
-                {
-                    pNodeHandler->handleSdrObject(pObject);
-                }
+                pNodeHandler->handleSdrObject(pObject.get());
             }
         }
     }
diff --git a/sw/source/core/model/SearchResultLocator.cxx 
b/sw/source/core/model/SearchResultLocator.cxx
index c1b92c47a7cc..c3c4a83460b5 100644
--- a/sw/source/core/model/SearchResultLocator.cxx
+++ b/sw/source/core/model/SearchResultLocator.cxx
@@ -58,19 +58,15 @@ void SearchResultLocator::findOne(LocationResult& rResult, 
SearchIndexData const
         for (sal_uInt16 nPage = 0; nPage < pModel->GetPageCount(); ++nPage)
         {
             SdrPage* pPage = pModel->GetPage(nPage);
-            for (size_t nObject = 0; nObject < pPage->GetObjCount(); ++nObject)
+            for (const rtl::Reference<SdrObject>& pObject : *pPage)
             {
-                SdrObject* pObject = pPage->GetObj(nObject);
-                if (pObject)
+                if (pObject->GetName() == rSearchIndexData.maObjectName)
                 {
-                    if (pObject->GetName() == rSearchIndexData.maObjectName)
-                    {
-                        auto aRect = pObject->GetLogicRect();
-                        rResult.mbFound = true;
-                        rResult.maRectangles.emplace_back(aRect.Left(), 
aRect.Top(),
-                                                          aRect.Left() + 
aRect.GetWidth(),
-                                                          aRect.Top() + 
aRect.GetHeight());
-                    }
+                    auto aRect = pObject->GetLogicRect();
+                    rResult.mbFound = true;
+                    rResult.maRectangles.emplace_back(aRect.Left(), 
aRect.Top(),
+                                                      aRect.Left() + 
aRect.GetWidth(),
+                                                      aRect.Top() + 
aRect.GetHeight());
                 }
             }
         }
diff --git a/sw/source/core/undo/undraw.cxx b/sw/source/core/undo/undraw.cxx
index 3fd7fa8ce244..134c6862971e 100644
--- a/sw/source/core/undo/undraw.cxx
+++ b/sw/source/core/undo/undraw.cxx
@@ -203,12 +203,10 @@ void SwUndoDrawGroup::UndoImpl(::sw::UndoRedoContext &)
     {
         if (auto pChildren = pObj->getChildrenOfSdrObject())
         {
-            for (size_t idx = 0; idx < pChildren->GetObjCount(); idx++)
+            for (const rtl::Reference<SdrObject>& pChild : *pChildren)
             {
-                auto pChild = pChildren->GetObj(idx);
-
-                if (auto pTextBox = pOldTextBoxNode->GetTextBox(pChild))
-                    vTextBoxes.push_back(std::pair(pChild, pTextBox));
+                if (auto pTextBox = pOldTextBoxNode->GetTextBox(pChild.get()))
+                    vTextBoxes.push_back(std::pair(pChild.get(), pTextBox));
             }
         }
     }
@@ -407,11 +405,10 @@ void SwUndoDrawUnGroup::UndoImpl(::sw::UndoRedoContext & 
rContext)
             {
                 if (auto pChildren = pGroupObj->getChildrenOfSdrObject())
                 {
-                    for (size_t idx = 0; idx < pChildren->GetObjCount(); idx++)
+                    for (const rtl::Reference<SdrObject>& pChild : *pChildren)
                     {
-                        auto pChild = pChildren->GetObj(idx);
-                        if (auto pTextBox = pTxBxNd->GetTextBox(pChild))
-                            vTextBoxes.push_back(std::pair(pChild, pTextBox));
+                        if (auto pTextBox = pTxBxNd->GetTextBox(pChild.get()))
+                            vTextBoxes.push_back(std::pair(pChild.get(), 
pTextBox));
                     }
                 }
             }
@@ -471,9 +468,9 @@ void SwUndoDrawUnGroup::RedoImpl(::sw::UndoRedoContext &)
         auto pMasterObj = m_pObjArray[0].pObj;
 
         if (auto pObjList = pMasterObj->getChildrenOfSdrObject())
-            for (size_t idx = 0; idx < pObjList->GetObjCount(); idx++)
+            for (const rtl::Reference<SdrObject>& pObj : *pObjList)
             {
-                vTextBoxes.push_back(std::pair(pObjList->GetObj(idx), 
pTextBoxNode->GetTextBox(pObjList->GetObj(idx))));
+                vTextBoxes.push_back(std::pair(pObj.get(), 
pTextBoxNode->GetTextBox(pObj.get())));
             }
     }
 
diff --git a/sw/source/core/view/vdraw.cxx b/sw/source/core/view/vdraw.cxx
index 55b7420c26c3..5a95053cd7b9 100644
--- a/sw/source/core/view/vdraw.cxx
+++ b/sw/source/core/view/vdraw.cxx
@@ -212,14 +212,12 @@ void SwViewShellImp::NotifySizeChg( const Size &rNewSz )
 
     OSL_ENSURE( m_pShell->getIDocumentDrawModelAccess().GetDrawModel(), 
"NotifySizeChg without DrawModel" );
     SdrPage* pPage = 
m_pShell->getIDocumentDrawModelAccess().GetDrawModel()->GetPage( 0 );
-    const size_t nObjs = pPage->GetObjCount();
-    for( size_t nObj = 0; nObj < nObjs; ++nObj )
+    for (const rtl::Reference<SdrObject>& pObj : *pPage)
     {
-        SdrObject *pObj = pPage->GetObj( nObj );
-        if( dynamic_cast<const SwVirtFlyDrawObj*>( pObj) ==  nullptr )
+        if( dynamic_cast<const SwVirtFlyDrawObj*>( pObj.get()) ==  nullptr )
         {
             // Objects not anchored to the frame, do not need to be adjusted
-            const SwContact *pCont = GetUserCall(pObj);
+            const SwContact *pCont = GetUserCall(pObj.get());
             // this function might be called by the InsertDocument, when
             // a PageDesc-Attribute is set on a node. Then the SdrObject
             // must not have an UserCall.
diff --git a/sw/source/uibase/uiview/viewdraw.cxx 
b/sw/source/uibase/uiview/viewdraw.cxx
index 9e718ee379ea..ffa61e6a61d8 100644
--- a/sw/source/uibase/uiview/viewdraw.cxx
+++ b/sw/source/uibase/uiview/viewdraw.cxx
@@ -690,11 +690,9 @@ bool SwView::HasOnlyObj(SdrObject const *pSdrObj, 
SdrInventor eObjInventor) cons
     if (pSdrObj->IsGroupObject())
     {
         SdrObjList* pList = pSdrObj->GetSubList();
-        const size_t nCnt = pList->GetObjCount();
-
-        for (size_t i = 0; i < nCnt; ++i)
+        for (const rtl::Reference<SdrObject>& pObj : *pList)
         {
-            bRet = HasOnlyObj(pList->GetObj(i), eObjInventor);
+            bRet = HasOnlyObj(pObj.get(), eObjInventor);
             if (!bRet)
                 break;
         }
diff --git a/sw/source/uibase/uno/unotxdoc.cxx 
b/sw/source/uibase/uno/unotxdoc.cxx
index 6aa26957bba0..b84bad1531c9 100644
--- a/sw/source/uibase/uno/unotxdoc.cxx
+++ b/sw/source/uibase/uno/unotxdoc.cxx
@@ -4268,14 +4268,14 @@ Any SwXLinkNameAccessWrapper::getByName(const OUString& 
rName)
                     if (pModel)
                     {
                         SdrPage* pPage = pModel->GetPage(0);
-                        for (size_t i = 0; i < pPage->GetObjCount() && 
!bFound; ++i)
+                        for (const rtl::Reference<SdrObject>& pObj : *pPage)
                         {
-                            SdrObject* pObj = pPage->GetObj(i);
                             if (sParam == pObj->GetName())
                             {
                                 Reference<XPropertySet> xDrawingObject = new 
SwXDrawingObjectTarget(sParam);
                                 aRet <<= xDrawingObject;
                                 bFound = true;
+                                break;
                             }
                         }
                     }
@@ -4328,9 +4328,8 @@ Sequence< OUString > 
SwXLinkNameAccessWrapper::getElementNames()
                 aRet.realloc(nObjCount);
                 OUString* pResArr = aRet.getArray();
                 auto j = 0;
-                for (size_t i = 0; i < nObjCount; ++i)
+                for (const rtl::Reference<SdrObject>& pObj : *pPage)
                 {
-                    SdrObject* pObj = pPage->GetObj(i);
                     if (!pObj->GetName().isEmpty())
                         pResArr[j++] = pObj->GetName() + "|drawingobject";
                 }
@@ -4381,11 +4380,13 @@ sal_Bool SwXLinkNameAccessWrapper::hasByName(const 
OUString& rName)
                     if (pModel)
                     {
                         SdrPage* pPage = pModel->GetPage(0);
-                        const size_t nObjCount = pPage->GetObjCount();
-                        for (size_t i = 0; i < nObjCount && !bRet; ++i)
+                        for (const rtl::Reference<SdrObject>& pObj : *pPage)
                         {
-                            if (sParam == pPage->GetObj(i)->GetName())
+                            if (sParam == pObj->GetName())
+                            {
                                 bRet = true;
+                                break;
+                            }
                         }
                     }
                 }
diff --git a/sw/source/uibase/utlui/content.cxx 
b/sw/source/uibase/utlui/content.cxx
index 02d3a661e4d1..5d56eada213b 100644
--- a/sw/source/uibase/utlui/content.cxx
+++ b/sw/source/uibase/utlui/content.cxx
@@ -984,10 +984,8 @@ void SwContentType::FillMemberList(bool* pbContentChanged)
             if(pModel)
             {
                 SdrPage* pPage = pModel->GetPage(0);
-                const size_t nCount = pPage->GetObjCount();
-                for( size_t i=0; i<nCount; ++i )
+                for (const rtl::Reference<SdrObject>& pTemp : *pPage)
                 {
-                    SdrObject* pTemp = pPage->GetObj(i);
                     // #i51726# - all drawing objects can be named now
                     if (!pTemp->GetName().isEmpty())
                     {
@@ -2258,14 +2256,12 @@ SdrObject* 
SwContentTree::GetDrawingObjectsByContent(const SwContent *pCnt)
             {
                 SwDrawModel* pDrawModel = 
m_pActiveShell->GetDoc()->getIDocumentDrawModelAccess().GetDrawModel();
                 SdrPage* pPage = pDrawModel->GetPage(0);
-                const size_t nCount = pPage->GetObjCount();
 
-                for( size_t i=0; i<nCount; ++i )
+                for (const rtl::Reference<SdrObject>& pTemp : *pPage)
                 {
-                    SdrObject* pTemp = pPage->GetObj(i);
                     if( pTemp->GetName() == pCnt->GetName())
                     {
-                        pRetObj = pTemp;
+                        pRetObj = pTemp.get();
                         break;
                     }
                 }
@@ -4443,7 +4439,6 @@ IMPL_LINK(SwContentTree, KeyInputHdl, const KeyEvent&, 
rEvent, bool)
 
                         SwDrawModel* pDrawModel = 
m_pActiveShell->GetDoc()->getIDocumentDrawModelAccess().GetDrawModel();
                         SdrPage* pPage = pDrawModel->GetPage(0);
-                        const size_t nCount = pPage->GetObjCount();
                         bool hasObjectMarked = false;
 
                         if (SdrObject* pObject = 
GetDrawingObjectsByContent(pCnt))
@@ -4456,10 +4451,9 @@ IMPL_LINK(SwContentTree, KeyInputHdl, const KeyEvent&, 
rEvent, bool)
 
                             }
                         }
-                        for( size_t i=0; i<nCount; ++i )
+                        for (const rtl::Reference<SdrObject>& pTemp : *pPage)
                         {
-                            SdrObject* pTemp = pPage->GetObj(i);
-                            bool bMark = pDrawView->IsObjMarked(pTemp);
+                            bool bMark = pDrawView->IsObjMarked(pTemp.get());
                             switch( pTemp->GetObjIdentifier() )
                             {
                                 case SdrObjKind::Group:
@@ -4489,7 +4483,7 @@ IMPL_LINK(SwContentTree, KeyInputHdl, const KeyEvent&, 
rEvent, bool)
                                         SdrPageView* pPV = 
pDrawView->GetSdrPageView/*GetPageViewPvNum*/(/*0*/);
                                         if (pPV)
                                         {
-                                            pDrawView->MarkObj(pTemp, pPV, 
true);
+                                            pDrawView->MarkObj(pTemp.get(), 
pPV, true);
                                         }
                                     }
                             }
@@ -5975,15 +5969,14 @@ void SwContentTree::BringEntryToAttention(const 
weld::TreeIter& rEntry)
                 {
                     if (const SdrPage* pPage = pModel->GetPage(0))
                     {
-                        if (const size_t nCount = pPage->GetObjCount())
+                        if (pPage->GetObjCount())
                         {
                             std::vector<const SdrObject*> aSdrObjectArr;
-                            for (size_t i = 0; i < nCount; ++i)
+                            for (const rtl::Reference<SdrObject>& pObject : 
*pPage)
                             {
-                                const SdrObject* pObject = pPage->GetObj(i);
                                 if (pObject && !pObject->GetName().isEmpty() &&
                                         
rIDDMA.IsVisibleLayerId(pObject->GetLayer()))
-                                    aSdrObjectArr.push_back(pObject);
+                                    aSdrObjectArr.push_back(pObject.get());
                             }
                             BringDrawingObjectsToAttention(aSdrObjectArr);
                         }
diff --git a/sw/source/uibase/wrtsh/move.cxx b/sw/source/uibase/wrtsh/move.cxx
index c29752db4392..c50740354928 100644
--- a/sw/source/uibase/wrtsh/move.cxx
+++ b/sw/source/uibase/wrtsh/move.cxx
@@ -677,16 +677,14 @@ bool SwWrtShell::GotoDrawingObject(std::u16string_view 
rName)
         pDrawView->SdrEndTextEdit();
         pDrawView->UnmarkAll();
         SdrPage* pPage = 
getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
-        const size_t nCount = pPage->GetObjCount();
-        for (size_t i = 0; i < nCount; ++i)
+        for (const rtl::Reference<SdrObject>& pObj : *pPage)
         {
-            SdrObject* pObj = pPage->GetObj(i);
             if (pObj->GetName() == rName)
             {
                 SdrPageView* pPageView = pDrawView->GetSdrPageView();
                 if(pPageView)
                 {
-                    pDrawView->MarkObj(pObj, pPageView);
+                    pDrawView->MarkObj(pObj.get(), pPageView);
                     m_aNavigationMgr.addEntry(aPos);
                     EnterStdMode();
                     HideCursor();
commit baa67b2d7037bc5e289a144a81014f1fb42e68ed
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Oct 18 12:28:12 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Oct 18 20:08:21 2023 +0200

    use more SdrObjList::begin/end in svx
    
    Change-Id: I362a2e12492391338b63708e4b329fc77ac363c4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158113
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/include/svx/svdpage.hxx b/include/svx/svdpage.hxx
index 7ab37532c046..b197e4d2eb77 100644
--- a/include/svx/svdpage.hxx
+++ b/include/svx/svdpage.hxx
@@ -229,6 +229,8 @@ public:
 
     SdrObjectDeque::const_iterator begin() const { return maList.begin(); }
     SdrObjectDeque::const_iterator end() const { return maList.end(); }
+    SdrObjectDeque::const_reverse_iterator rbegin() const { return 
maList.rbegin(); }
+    SdrObjectDeque::const_reverse_iterator rend() const { return 
maList.rend(); }
 
 private:
     tools::Rectangle    maSdrObjListOutRect;
diff --git a/svx/source/dialog/connctrl.cxx b/svx/source/dialog/connctrl.cxx
index ebf0c44c27f9..13677849fa44 100644
--- a/svx/source/dialog/connctrl.cxx
+++ b/svx/source/dialog/connctrl.cxx
@@ -211,14 +211,9 @@ void SvxXConnectionPreview::Paint(vcl::RenderContext& 
rRenderContext, const tool
 
         // New stuff: Use an ObjectContactOfObjListPainter.
         sdr::contact::SdrObjectVector aObjectVector;
-
-        for (size_t a = 0; a < mxSdrPage->GetObjCount(); ++a)
-        {
-            SdrObject* pObject = mxSdrPage->GetObj(a);
-            DBG_ASSERT(pObject,
-                "SvxXConnectionPreview::Paint: Corrupt ObjectList (!)");
-            aObjectVector.push_back(pObject);
-        }
+        aObjectVector.reserve(mxSdrPage->GetObjCount());
+        for (const rtl::Reference<SdrObject>& pObject : *mxSdrPage)
+            aObjectVector.push_back(pObject.get());
 
         sdr::contact::ObjectContactOfObjListPainter aPainter(rRenderContext, 
std::move(aObjectVector), nullptr);
         sdr::contact::DisplayInfo aDisplayInfo;
diff --git a/svx/source/engine3d/scene3d.cxx b/svx/source/engine3d/scene3d.cxx
index afd73e744780..5e55fa7c81c8 100644
--- a/svx/source/engine3d/scene3d.cxx
+++ b/svx/source/engine3d/scene3d.cxx
@@ -645,9 +645,9 @@ void E3dScene::RecalcSnapRect()
         // call parent
         E3dObject::RecalcSnapRect();
 
-        for(size_t a = 0; a < GetObjCount(); ++a)
+        for (const rtl::Reference<SdrObject>& pObj : *this)
         {
-            E3dObject* pCandidate(DynCastE3dObject(GetObj(a)));
+            E3dObject* pCandidate(DynCastE3dObject(pObj.get()));
 
             if(pCandidate)
             {
@@ -723,9 +723,9 @@ void E3dScene::SetSelected(bool bNew)
     // call parent
     E3dObject::SetSelected(bNew);
 
-    for(size_t a(0); a < GetObjCount(); a++)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        E3dObject* pCandidate(DynCastE3dObject(GetObj(a)));
+        E3dObject* pCandidate(DynCastE3dObject(pObj.get()));
 
         if(pCandidate)
         {
@@ -799,9 +799,9 @@ void E3dScene::SetBoundAndSnapRectsDirty(bool bNotMyself, 
bool bRecursive)
     // call parent
     E3dObject::SetBoundAndSnapRectsDirty(bNotMyself, bRecursive);
 
-    for(size_t a = 0; a < GetObjCount(); ++a)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        E3dObject* pCandidate = DynCastE3dObject(GetObj(a));
+        E3dObject* pCandidate = DynCastE3dObject(pObj.get());
 
         if(pCandidate)
         {
@@ -815,9 +815,9 @@ void E3dScene::NbcSetLayer(SdrLayerID nLayer)
     // call parent
     E3dObject::NbcSetLayer(nLayer);
 
-    for(size_t a = 0; a < GetObjCount(); ++a)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        E3dObject* pCandidate = DynCastE3dObject(GetObj(a));
+        E3dObject* pCandidate = DynCastE3dObject(pObj.get());
 
         if(pCandidate)
         {
@@ -834,9 +834,9 @@ void E3dScene::handlePageChange(SdrPage* pOldPage, SdrPage* 
pNewPage)
     // call parent
     E3dObject::handlePageChange(pOldPage, pNewPage);
 
-    for(size_t a(0); a < GetObjCount(); a++)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        E3dObject* pCandidate = DynCastE3dObject(GetObj(a));
+        E3dObject* pCandidate = DynCastE3dObject(pObj.get());
 
         if(pCandidate)
         {
@@ -857,11 +857,10 @@ SdrObjList* E3dScene::GetSubList() const
 basegfx::B3DRange E3dScene::RecalcBoundVolume() const
 {
     basegfx::B3DRange aRetval;
-    const size_t nObjCnt(GetObjCount());
 
-    for(size_t a = 0; a < nObjCnt; ++a)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        const E3dObject* p3DObject = DynCastE3dObject(GetObj(a));
+        const E3dObject* p3DObject = DynCastE3dObject(pObj.get());
 
         if(p3DObject)
         {
@@ -879,9 +878,9 @@ void E3dScene::SetTransformChanged()
     // call parent
     E3dObject::SetTransformChanged();
 
-    for(size_t a = 0; a < GetObjCount(); ++a)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        E3dObject* pCandidate = DynCastE3dObject(GetObj(a));
+        E3dObject* pCandidate = DynCastE3dObject(pObj.get());
 
         if(pCandidate)
         {
diff --git a/svx/source/engine3d/view3d.cxx b/svx/source/engine3d/view3d.cxx
index 29a048e3f055..844d96b48727 100644
--- a/svx/source/engine3d/view3d.cxx
+++ b/svx/source/engine3d/view3d.cxx
@@ -397,13 +397,10 @@ std::unique_ptr<SdrModel> E3dView::CreateMarkedObjModel() 
const
         for(sal_uInt16 nPg(0); nPg < pNewModel->GetPageCount(); nPg++)
         {
             const SdrPage* pSrcPg=pNewModel->GetPage(nPg);
-            const size_t nObjCount(pSrcPg->GetObjCount());
 
-            for(size_t nOb = 0; nOb < nObjCount; ++nOb)
+            for (const rtl::Reference<SdrObject>& pSrcOb : *pSrcPg)
             {
-                const SdrObject* pSrcOb=pSrcPg->GetObj(nOb);
-
-                if(const E3dScene* p3dscene = DynCastE3dScene( pSrcOb))
+                if(const E3dScene* p3dscene = DynCastE3dScene( pSrcOb.get()))
                 {
                     pScene = const_cast<E3dScene*>(p3dscene);
 
@@ -451,17 +448,15 @@ bool E3dView::Paste(
         for(sal_uInt16 nPg(0); nPg < rMod.GetPageCount(); nPg++)
         {
             const SdrPage* pSrcPg=rMod.GetPage(nPg);
-            const size_t nObjCount(pSrcPg->GetObjCount());
 
             // calculate offset for paste
             tools::Rectangle aR = pSrcPg->GetAllObjBoundRect();
             Point aDist(aPos - aR.Center());
 
             // Insert sub-objects for scenes
-            for(size_t nOb = 0; nOb < nObjCount; ++nOb)
+            for (const rtl::Reference<SdrObject>& pSrcOb : *pSrcPg)
             {
-                const SdrObject* pSrcOb = pSrcPg->GetObj(nOb);
-                if(const E3dScene* p3dscene = DynCastE3dScene(pSrcOb))
+                if(const E3dScene* p3dscene = DynCastE3dScene(pSrcOb.get()))
                 {
                     E3dScene* pSrcScene = const_cast<E3dScene*>(p3dscene);
                     ImpCloneAll3DObjectsToDestScene(pSrcScene, pDstScene, 
aDist);
@@ -486,9 +481,9 @@ bool E3dView::ImpCloneAll3DObjectsToDestScene(E3dScene 
const * pSrcScene, E3dSce
 
     if(pSrcScene && pDstScene)
     {
-        for(size_t i = 0; i < pSrcScene->GetSubList()->GetObjCount(); ++i)
+        for (const rtl::Reference<SdrObject>& pObj : *pSrcScene->GetSubList())
         {
-            E3dCompoundObject* pCompoundObj = dynamic_cast< E3dCompoundObject* 
>(pSrcScene->GetSubList()->GetObj(i));
+            E3dCompoundObject* pCompoundObj = dynamic_cast< E3dCompoundObject* 
>(pObj.get());
 
             if(pCompoundObj)
             {
diff --git a/svx/source/engine3d/view3d1.cxx b/svx/source/engine3d/view3d1.cxx
index bc5cfbaf5116..47de321f581e 100644
--- a/svx/source/engine3d/view3d1.cxx
+++ b/svx/source/engine3d/view3d1.cxx
@@ -83,8 +83,8 @@ static void Imp_E3dView_InorderRun3DObjects(const SdrObject* 
pObj, sal_uInt32& r
     else if(pObj->IsGroupObject())
     {
         SdrObjList* pList = pObj->GetSubList();
-        for(size_t a = 0; a < pList->GetObjCount(); ++a)
-            Imp_E3dView_InorderRun3DObjects(pList->GetObj(a), rMask);
+        for (const rtl::Reference<SdrObject>& pChildObj : *pList)
+            Imp_E3dView_InorderRun3DObjects(pChildObj.get(), rMask);
     }
 }
 
diff --git a/svx/source/form/fmview.cxx b/svx/source/form/fmview.cxx
index ffb0e85e2c96..8267c334bd6f 100644
--- a/svx/source/form/fmview.cxx
+++ b/svx/source/form/fmview.cxx
@@ -497,10 +497,9 @@ bool FmFormView::KeyInput(const KeyEvent& rKEvt, 
vcl::Window* pWin)
     {
         if (FmFormPage* pCurPage = GetCurPage())
         {
-            for (size_t a = 0; a < pCurPage->GetObjCount(); ++a)
+            for (const rtl::Reference<SdrObject>& pObj : *pCurPage)
             {
-                SdrObject* pObj = pCurPage->GetObj(a);
-                FmFormObj* pFormObject = FmFormObj::GetFormObject(pObj);
+                FmFormObj* pFormObject = FmFormObj::GetFormObject(pObj.get());
                 if (!pFormObject)
                     continue;
 
diff --git a/svx/source/form/navigatortreemodel.cxx 
b/svx/source/form/navigatortreemodel.cxx
index 64f4494bc445..5fae42901de2 100644
--- a/svx/source/form/navigatortreemodel.cxx
+++ b/svx/source/form/navigatortreemodel.cxx
@@ -741,10 +741,9 @@ namespace svxform
         if ( auto pObjGroup = dynamic_cast<const SdrObjGroup*>( pObject) )
         {   // descend recursively
             const SdrObjList *pChildren = pObjGroup->GetSubList();
-            for ( size_t i=0; i<pChildren->GetObjCount(); ++i )
+            for (const rtl::Reference<SdrObject>& pCurrent : *pChildren)
             {
-                SdrObject* pCurrent = pChildren->GetObj(i);
-                if (!InsertFormComponent(rHint, pCurrent))
+                if (!InsertFormComponent(rHint, pCurrent.get()))
                     return false;
             }
         }
diff --git a/svx/source/sdr/contact/objectcontactofpageview.cxx 
b/svx/source/sdr/contact/objectcontactofpageview.cxx
index 4bc227bffd11..c777d069eaf2 100644
--- a/svx/source/sdr/contact/objectcontactofpageview.cxx
+++ b/svx/source/sdr/contact/objectcontactofpageview.cxx
@@ -244,10 +244,8 @@ namespace sdr::contact
             {
                 // Not empty? Then not doing a full redraw, check if
                 // getPrimitive2DSequenceHierarchy() is still needed.
-                sal_Int32 nObjCount = GetSdrPage()->GetObjCount();
-                for (sal_Int32 i = 0; i < nObjCount; ++i)
+                for (const rtl::Reference<SdrObject>& pObject : *GetSdrPage())
                 {
-                    SdrObject* pObject = GetSdrPage()->GetObj(i);
                     if (rRedrawArea.Overlaps(pObject->GetCurrentBoundRect()))
                     {
                         bGetHierarchy = true;
diff --git a/svx/source/sdr/properties/e3dsceneproperties.cxx 
b/svx/source/sdr/properties/e3dsceneproperties.cxx
index b2380468c671..789472d5087a 100644
--- a/svx/source/sdr/properties/e3dsceneproperties.cxx
+++ b/svx/source/sdr/properties/e3dsceneproperties.cxx
@@ -67,38 +67,36 @@ namespace sdr::properties
             // collect all ItemSets of contained 3d objects
             const SdrObjList* pSub(static_cast<const 
E3dScene&>(GetSdrObject()).GetSubList());
             OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
-            const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
-
-            for(size_t a = 0; a < nCount; ++a)
-            {
-                SdrObject* pObj = pSub->GetObj(a);
 
-                if(dynamic_cast<const E3dCompoundObject* >(pObj))
+            if (pSub)
+                for (const rtl::Reference<SdrObject>& pObj : *pSub)
                 {
-                    const SfxItemSet& rSet = pObj->GetMergedItemSet();
-                    SfxWhichIter aIter(rSet);
-                    sal_uInt16 nWhich(aIter.FirstWhich());
-
-                    while(nWhich)
+                    if(dynamic_cast<const E3dCompoundObject* >(pObj.get()))
                     {
-                        // Leave out the SDRATTR_3DSCENE_ range, this would 
only be double
-                        // and always equal.
-                        if(nWhich <= SDRATTR_3DSCENE_FIRST || nWhich >= 
SDRATTR_3DSCENE_LAST)
+                        const SfxItemSet& rSet = pObj->GetMergedItemSet();
+                        SfxWhichIter aIter(rSet);
+                        sal_uInt16 nWhich(aIter.FirstWhich());
+
+                        while(nWhich)
                         {
-                            if(SfxItemState::DONTCARE == 
aIter.GetItemState(false))
-                            {
-                                mxItemSet->InvalidateItem(nWhich);
-                            }
-                            else
+                            // Leave out the SDRATTR_3DSCENE_ range, this 
would only be double
+                            // and always equal.
+                            if(nWhich <= SDRATTR_3DSCENE_FIRST || nWhich >= 
SDRATTR_3DSCENE_LAST)
                             {
-                                mxItemSet->MergeValue(rSet.Get(nWhich), true);
+                                if(SfxItemState::DONTCARE == 
aIter.GetItemState(false))
+                                {
+                                    mxItemSet->InvalidateItem(nWhich);
+                                }
+                                else
+                                {
+                                    mxItemSet->MergeValue(rSet.Get(nWhich), 
true);
+                                }
                             }
-                        }
 
-                        nWhich = aIter.NextWhich();
+                            nWhich = aIter.NextWhich();
+                        }
                     }
                 }
-            }
 
             // call parent
             return E3dProperties::GetMergedItemSet();
@@ -124,11 +122,9 @@ namespace sdr::properties
 
                 if(xNewSet->Count())
                 {
-                    for(size_t a = 0; a < nCount; ++a)
+                    for (const rtl::Reference<SdrObject>& pObj : *pSub)
                     {
-                        SdrObject* pObj = pSub->GetObj(a);
-
-                        if(dynamic_cast<const E3dCompoundObject* >(pObj))
+                        if(dynamic_cast<const E3dCompoundObject* >(pObj.get()))
                         {
                             // set merged ItemSet at contained 3d object.
                             pObj->SetMergedItemSet(*xNewSet, bClearAllItems);
@@ -145,12 +141,9 @@ namespace sdr::properties
         {
             const SdrObjList* pSub(static_cast<const 
E3dScene&>(GetSdrObject()).GetSubList());
             OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
-            const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
-
-            for(size_t a = 0; a < nCount; ++a)
-            {
-                pSub->GetObj(a)->SetMergedItem(rItem);
-            }
+            if (pSub)
+                for (const rtl::Reference<SdrObject>& pObj : *pSub)
+                    pObj->SetMergedItem(rItem);
 
             // #i43809# call parent. This will set items on local object, too.
             E3dProperties::SetMergedItem(rItem);
@@ -160,12 +153,9 @@ namespace sdr::properties
         {
             const SdrObjList* pSub(static_cast<const 
E3dScene&>(GetSdrObject()).GetSubList());
             OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
-            const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
-
-            for(size_t a = 0; a < nCount; ++a)
-            {
-                pSub->GetObj(a)->ClearMergedItem(nWhich);
-            }
+            if (pSub)
+                for (const rtl::Reference<SdrObject>& pObj : *pSub)
+                    pObj->ClearMergedItem(nWhich);
 
             // #i43809# call parent. This will clear items on local object, 
too.
             E3dProperties::ClearMergedItem(nWhich);
@@ -234,14 +224,14 @@ namespace sdr::properties
         {
             const SdrObjList* pSub(static_cast<const 
E3dScene&>(GetSdrObject()).GetSubList());
             OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
-            const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
-
-            for(size_t a = 0; a < nCount; ++a)
+            if (!pSub)
+                return;
+            for (const rtl::Reference<SdrObject>& pObj : *pSub)
             {
                 if(bBroadcast)
-                    pSub->GetObj(a)->SetStyleSheet(pNewStyleSheet, 
bDontRemoveHardAttr);
+                    pObj->SetStyleSheet(pNewStyleSheet, bDontRemoveHardAttr);
                 else
-                    pSub->GetObj(a)->NbcSetStyleSheet(pNewStyleSheet, 
bDontRemoveHardAttr);
+                    pObj->NbcSetStyleSheet(pNewStyleSheet, 
bDontRemoveHardAttr);
             }
         }
 
@@ -251,11 +241,11 @@ namespace sdr::properties
 
             const SdrObjList* pSub(static_cast<const 
E3dScene&>(GetSdrObject()).GetSubList());
             OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
-            const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
-
-            for(size_t a = 0; a < nCount; ++a)
+            if (!pSub)
+                return pRetval;
+            for (const rtl::Reference<SdrObject>& pObj : *pSub)
             {
-                SfxStyleSheet* pCandidate = pSub->GetObj(a)->GetStyleSheet();
+                SfxStyleSheet* pCandidate = pObj->GetStyleSheet();
 
                 if(pRetval)
                 {
diff --git a/svx/source/sdr/properties/groupproperties.cxx 
b/svx/source/sdr/properties/groupproperties.cxx
index 6bb3485689b4..e6a83d329d3c 100644
--- a/svx/source/sdr/properties/groupproperties.cxx
+++ b/svx/source/sdr/properties/groupproperties.cxx
@@ -67,11 +67,11 @@ namespace sdr::properties
             // collect all ItemSets in mpItemSet
             const SdrObjList* pSub(static_cast<const 
SdrObjGroup&>(GetSdrObject()).GetSubList());
             OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
-            const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
-
-            for(size_t a = 0; a < nCount; ++a)
+            if (!pSub)
+                return *moMergedItemSet;
+            for (const rtl::Reference<SdrObject>& pObj : *pSub)
             {
-                const SfxItemSet& rSet = pSub->GetObj(a)->GetMergedItemSet();
+                const SfxItemSet& rSet = pObj->GetMergedItemSet();
                 SfxWhichIter aIter(rSet);
                 sal_uInt16 nWhich(aIter.FirstWhich());
 
@@ -100,18 +100,11 @@ namespace sdr::properties
             // iterate over contained SdrObjects
             const SdrObjList* pSub(static_cast<const 
SdrObjGroup&>(GetSdrObject()).GetSubList());
             OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
-            const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
-
-            for(size_t a = 0; a < nCount; ++a)
-            {
-                SdrObject* pObj = pSub->GetObj(a);
-
-                if(pObj)
-                {
-                    // Set merged ItemSet at contained object
-                    pObj->SetMergedItemSet(rSet, bClearAllItems);
-                }
-            }
+            if (!pSub)
+                return;
+            for (const rtl::Reference<SdrObject>& pObj : *pSub)
+                // Set merged ItemSet at contained object
+                pObj->SetMergedItemSet(rSet, bClearAllItems);
 
             // Do not call parent here. Group objects do not have local 
ItemSets
             // where items need to be set.
@@ -132,17 +125,10 @@ namespace sdr::properties
             // iterate over contained SdrObjects
             const SdrObjList* pSub(static_cast<const 
SdrObjGroup&>(GetSdrObject()).GetSubList());
             OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
-            const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
-
-            for(size_t a = 0; a < nCount; ++a)
-            {
-                SdrObject* pObj = pSub->GetObj(a);
-
-                if(pObj)
-                {
-                    pObj->GetProperties().ClearObjectItem(nWhich);
-                }
-            }
+            if (!pSub)
+                return;
+            for (const rtl::Reference<SdrObject>& pObj : *pSub)
+                pObj->GetProperties().ClearObjectItem(nWhich);
         }
 
         void GroupProperties::ClearObjectItemDirect(const sal_uInt16 
/*nWhich*/)
@@ -154,24 +140,20 @@ namespace sdr::properties
         {
             const SdrObjList* pSub(static_cast<const 
SdrObjGroup&>(GetSdrObject()).GetSubList());
             OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
-            const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
-
-            for(size_t a = 0; a < nCount; ++a)
-            {
-                pSub->GetObj(a)->GetProperties().SetMergedItem(rItem);
-            }
+            if (!pSub)
+                return;
+            for (const rtl::Reference<SdrObject>& pObj : *pSub)
+                pObj->GetProperties().SetMergedItem(rItem);
         }
 
         void GroupProperties::ClearMergedItem(const sal_uInt16 nWhich)
         {
             const SdrObjList* pSub(static_cast<const 
SdrObjGroup&>(GetSdrObject()).GetSubList());
             OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
-            const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
-
-            for(size_t a = 0; a < nCount; ++a)
-            {
-                pSub->GetObj(a)->GetProperties().ClearMergedItem(nWhich);
-            }
+            if (!pSub)
+                return;
+            for (const rtl::Reference<SdrObject>& pObj : *pSub)
+                pObj->GetProperties().ClearMergedItem(nWhich);
         }
 
         void GroupProperties::SetObjectItemSet(const SfxItemSet& /*rSet*/)
@@ -185,17 +167,18 @@ namespace sdr::properties
 
             const SdrObjList* pSub(static_cast<const 
SdrObjGroup&>(GetSdrObject()).GetSubList());
             OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
-            const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
+            if (!pSub)
+                return pRetval;
 
-            for(size_t a = 0; a < nCount; ++a)
+            for (const rtl::Reference<SdrObject>& pObj : *pSub)
             {
-                SfxStyleSheet* pCandidate = pSub->GetObj(a)->GetStyleSheet();
+                SfxStyleSheet* pCandidate = pObj->GetStyleSheet();
 
                 if(pRetval)
                 {
                     if(pCandidate != pRetval)
                     {
-                        // different StyleSheelts, return none
+                        // different StyleSheets, return none
                         return nullptr;
                     }
                 }
@@ -213,14 +196,15 @@ namespace sdr::properties
         {
             const SdrObjList* pSub(static_cast<const 
SdrObjGroup&>(GetSdrObject()).GetSubList());
             OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
-            const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
+            if (!pSub)
+                return;
 
-            for(size_t a = 0; a < nCount; ++a)
+            for (const rtl::Reference<SdrObject>& pObj : *pSub)
             {
                 if(bBroadcast)
-                    pSub->GetObj(a)->SetStyleSheet(pNewStyleSheet, 
bDontRemoveHardAttr);
+                    pObj->SetStyleSheet(pNewStyleSheet, bDontRemoveHardAttr);
                 else
-                    pSub->GetObj(a)->NbcSetStyleSheet(pNewStyleSheet, 
bDontRemoveHardAttr);
+                    pObj->NbcSetStyleSheet(pNewStyleSheet, 
bDontRemoveHardAttr);
             }
         }
 
@@ -228,12 +212,10 @@ namespace sdr::properties
         {
             const SdrObjList* pSub(static_cast<const 
SdrObjGroup&>(GetSdrObject()).GetSubList());
             OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
-            const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
-
-            for(size_t a = 0; a < nCount; ++a)
-            {
-                pSub->GetObj(a)->GetProperties().ForceStyleToHardAttributes();
-            }
+            if (!pSub)
+                return;
+            for (const rtl::Reference<SdrObject>& pObj : *pSub)
+                pObj->GetProperties().ForceStyleToHardAttributes();
         }
 } // end of namespace
 
diff --git a/svx/source/svdraw/sdrpagewindow.cxx 
b/svx/source/svdraw/sdrpagewindow.cxx
index e975b20ebb3f..fa8e5f4d7f84 100644
--- a/svx/source/svdraw/sdrpagewindow.cxx
+++ b/svx/source/svdraw/sdrpagewindow.cxx
@@ -283,11 +283,9 @@ namespace
 
                 basegfx::B2DPolyPolygon aPolyB;
 
-                for(sal_uInt32 a(1); a < rPageView.GetPage()->GetObjCount(); 
a++)
+                for (const rtl::Reference<SdrObject>& pObjB : 
*rPageView.GetPage())
                 {
-                    SdrObject* pObjB = pPage->GetObj(a);
-
-                    if(dynamic_cast<const SdrPathObj*>( pObjB))
+                    if(dynamic_cast<const SdrPathObj*>( pObjB.get()))
                     {
                         basegfx::B2DPolyPolygon 
aCandidate(pObjB->GetPathPoly());
                         aCandidate = 
basegfx::utils::correctOrientations(aCandidate);
diff --git a/svx/source/svdraw/svdmark.cxx b/svx/source/svdraw/svdmark.cxx
index c92fbebef7a1..c811a4d20aa5 100644
--- a/svx/source/svdraw/svdmark.cxx
+++ b/svx/source/svdraw/svdmark.cxx
@@ -395,16 +395,14 @@ bool SdrMarkList::InsertPageView(const SdrPageView& rPV)
     bool bChgd(false);
     DeletePageView(rPV); // delete all of them, then append the entire page
     const SdrObjList* pOL = rPV.GetObjList();
-    const size_t nObjCount(pOL->GetObjCount());
 
-    for(size_t nO = 0; nO < nObjCount; ++nO)
+    for (const rtl::Reference<SdrObject>& pObj : *pOL)
     {
-        SdrObject* pObj = pOL->GetObj(nO);
-        bool bDoIt(rPV.IsObjMarkable(pObj));
+        bool bDoIt(rPV.IsObjMarkable(pObj.get()));
 
         if(bDoIt)
         {
-            maList.emplace_back(new SdrMark(pObj, 
const_cast<SdrPageView*>(&rPV)));
+            maList.emplace_back(new SdrMark(pObj.get(), 
const_cast<SdrPageView*>(&rPV)));
             SetNameDirty();
             bChgd = true;
         }
@@ -709,11 +707,8 @@ namespace sdr
         {
             SdrObjList* pList = pObj->GetSubList();
 
-            for(size_t a = 0; a < pList->GetObjCount(); ++a)
-            {
-                SdrObject* pObj2 = pList->GetObj(a);
-                ImplCollectCompleteSelection(pObj2);
-            }
+            for (const rtl::Reference<SdrObject>& pObj2 : *pList)
+                ImplCollectCompleteSelection(pObj2.get());
         }
 
         maAllMarkedObjects.push_back(pObj);
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index 5b8a86a9526d..841cac87bb31 100644
--- a/svx/source/svdraw/svdmrkv.cxx
+++ b/svx/source/svdraw/svdmrkv.cxx
@@ -571,12 +571,9 @@ bool SdrMarkView::MarkableObjectsExceed( int n ) const
         return false;
 
     SdrObjList* pOL=pPV->GetObjList();
-    const size_t nObjCount = pOL->GetObjCount();
-    for (size_t nObjNum=0; nObjNum<nObjCount; ++nObjNum) {
-        SdrObject* pObj=pOL->GetObj(nObjNum);
-        if (IsObjMarkable(pObj,pPV) && --n<0)
+    for (const rtl::Reference<SdrObject>& pObj : *pOL)
+        if (IsObjMarkable(pObj.get(),pPV) && --n<0)
             return true;
-    }
 
     return false;
 }
@@ -711,11 +708,9 @@ bool 
SdrMarkView::dumpGluePointsToJSON(boost::property_tree::ptree& rTree)
         const SdrObjList* pOL = mpMarkedPV->GetObjList();
         if (!pOL)
             return false;
-        const size_t nObjCount = pOL->GetObjCount();
         boost::property_tree::ptree elements;
-        for (size_t nObjNum = 0; nObjNum < nObjCount; ++nObjNum)
+        for (const rtl::Reference<SdrObject>& pObj : *pOL)
         {
-            SdrObject* pObj = pOL->GetObj(nObjNum);
             if (!pObj)
                 continue;
             if (pObj == GetMarkedObjectByIndex(0))
@@ -2128,19 +2123,17 @@ void SdrMarkView::MarkObj(const tools::Rectangle& 
rRect, bool bUnmark)
     {
         pObjList=pPV->GetObjList();
         tools::Rectangle aFrm1(aR);
-        const size_t nObjCount = pObjList->GetObjCount();
-        for (size_t nO=0; nO<nObjCount; ++nO) {
-            SdrObject* pObj=pObjList->GetObj(nO);
+        for (const rtl::Reference<SdrObject>& pObj : *pObjList) {
             tools::Rectangle aRect(pObj->GetCurrentBoundRect());
             if (aFrm1.Contains(aRect)) {
                 if (!bUnmark) {
-                    if (IsObjMarkable(pObj,pPV))
+                    if (IsObjMarkable(pObj.get(),pPV))
                     {
-                        
GetMarkedObjectListWriteAccess().InsertEntry(SdrMark(pObj,pPV));
+                        
GetMarkedObjectListWriteAccess().InsertEntry(SdrMark(pObj.get(),pPV));
                         bFnd=true;
                     }
                 } else {
-                    const size_t nPos=TryToFindMarkedObject(pObj);
+                    const size_t nPos=TryToFindMarkedObject(pObj.get());
                     if (nPos!=SAL_MAX_SIZE)
                     {
                         GetMarkedObjectListWriteAccess().DeleteMark(nPos);
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index b6f40386faab..c5741f5007c1 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -653,9 +653,8 @@ bool SdrObject::isVisibleOnAnyOfTheseLayers(const 
SdrLayerIDSet& rSet) const
     SdrObjList* pOL=GetSubList();
     if (!pOL)
         return false;
-    const size_t nObjCount = pOL->GetObjCount();
-    for (size_t nObjNum = 0; nObjNum<nObjCount; ++nObjNum)
-        if (pOL->GetObj(nObjNum)->isVisibleOnAnyOfTheseLayers(rSet))
+    for (const rtl::Reference<SdrObject>& pObject : *pOL)
+        if (pObject->isVisibleOnAnyOfTheseLayers(rSet))
             return true;
     return false;
 }
@@ -2585,11 +2584,8 @@ rtl::Reference<SdrObject> 
SdrObject::ConvertToContourObj(SdrObject* pRet1, bool
         SdrObjList* pObjList2 = pRet->GetSubList();
         rtl::Reference<SdrObject> pGroup = new 
SdrObjGroup(getSdrModelFromSdrObject());
 
-        for(size_t a=0; a<pObjList2->GetObjCount(); ++a)
-        {
-            SdrObject* pIterObj = pObjList2->GetObj(a);
-            
pGroup->GetSubList()->NbcInsertObject(ConvertToContourObj(pIterObj, 
bForceLineDash).get());
-        }
+        for (const rtl::Reference<SdrObject>& pIterObj : *pObjList2)
+            
pGroup->GetSubList()->NbcInsertObject(ConvertToContourObj(pIterObj.get(), 
bForceLineDash).get());
 
         pRet = pGroup;
     }
diff --git a/svx/source/svdraw/svdogrp.cxx b/svx/source/svdraw/svdogrp.cxx
index 8a518554827a..5878c8cd9915 100644
--- a/svx/source/svdraw/svdogrp.cxx
+++ b/svx/source/svdraw/svdogrp.cxx
@@ -118,8 +118,7 @@ void SdrObjGroup::TakeObjInfo(SdrObjTransformInfoRec& 
rInfo) const
 {
     rInfo.bNoContortion=false;
     const size_t nObjCount(GetObjCount());
-    for (size_t i=0; i<nObjCount; ++i) {
-        SdrObject* pObj(GetObj(i));
+    for (const rtl::Reference<SdrObject>& pObj : *this) {
         SdrObjTransformInfoRec aInfo;
         pObj->TakeObjInfo(aInfo);
         if (!aInfo.bMoveAllowed            ) rInfo.bMoveAllowed            
=false;
@@ -188,10 +187,8 @@ SdrLayerID SdrObjGroup::GetLayer() const
 void SdrObjGroup::NbcSetLayer(SdrLayerID nLayer)
 {
     SdrObject::NbcSetLayer(nLayer);
-    const size_t nObjCount(GetObjCount());
-    for (size_t i=0; i<nObjCount; ++i) {
-        GetObj(i)->NbcSetLayer(nLayer);
-    }
+    for (const rtl::Reference<SdrObject>& pObj : *this)
+        pObj->NbcSetLayer(nLayer);
 }
 
 void SdrObjGroup::handlePageChange(SdrPage* pOldPage, SdrPage* pNewPage)
@@ -199,10 +196,8 @@ void SdrObjGroup::handlePageChange(SdrPage* pOldPage, 
SdrPage* pNewPage)
     // call parent
     SdrObject::handlePageChange(pOldPage, pNewPage);
 
-    for(size_t i(0); i < GetObjCount(); i++)
-    {
-        GetObj(i)->handlePageChange(pOldPage, pNewPage);
-    }
+    for (const rtl::Reference<SdrObject>& pObj : *this)
+        pObj->handlePageChange(pOldPage, pNewPage);
 }
 
 SdrObjList* SdrObjGroup::GetSubList() const
@@ -314,13 +309,9 @@ void SdrObjGroup::RecalcSnapRect()
 basegfx::B2DPolyPolygon SdrObjGroup::TakeXorPoly() const
 {
     basegfx::B2DPolyPolygon aRetval;
-    const size_t nObjCount(GetObjCount());
 
-    for(size_t a = 0; a < nObjCount; ++a)
-    {
-        SdrObject* pObj(GetObj(a));
+    for (const rtl::Reference<SdrObject>& pObj : *this)
         aRetval.append(pObj->TakeXorPoly());
-    }
 
     if(!aRetval.count())
     {
@@ -406,11 +397,8 @@ void SdrObjGroup::NbcMove(const Size& rSize)
 
     if(0 != nObjCount)
     {
-        for (size_t i=0; i<nObjCount; ++i)
-        {
-            SdrObject* pObj(GetObj(i));
+        for (const rtl::Reference<SdrObject>& pObj : *this)
             pObj->NbcMove(rSize);
-        }
     }
     else
     {
@@ -443,11 +431,8 @@ void SdrObjGroup::NbcResize(const Point& rRef, const 
Fraction& xFact, const Frac
     const size_t nObjCount(GetObjCount());
     if(0 != nObjCount)
     {
-        for (size_t i=0; i<nObjCount; ++i)
-        {
-            SdrObject* pObj(GetObj(i));
+        for (const rtl::Reference<SdrObject>& pObj : *this)
             pObj->NbcResize(rRef,xFact,yFact);
-        }
     }
     else
     {
@@ -464,13 +449,9 @@ void SdrObjGroup::NbcRotate(const Point& rRef, Degree100 
nAngle, double sn, doub
 {
     SetGlueReallyAbsolute(true);
     RotatePoint(maRefPoint, rRef, sn, cs);
-    const size_t nObjCount(GetObjCount());
 
-    for (size_t i=0; i<nObjCount; ++i)
-    {
-        SdrObject* pObj(GetObj(i));
+    for (const rtl::Reference<SdrObject>& pObj : *this)
         pObj->NbcRotate(rRef,nAngle,sn,cs);
-    }
 
     NbcRotateGluePoints(rRef,nAngle,sn,cs);
     SetGlueReallyAbsolute(false);
@@ -481,13 +462,9 @@ void SdrObjGroup::NbcMirror(const Point& rRef1, const 
Point& rRef2)
 {
     SetGlueReallyAbsolute(true);
     MirrorPoint(maRefPoint, rRef1, rRef2); // implementation missing in SvdEtc!
-    const size_t nObjCount(GetObjCount());
 
-    for (size_t i=0; i<nObjCount; ++i)
-    {
-        SdrObject* pObj(GetObj(i));
+    for (const rtl::Reference<SdrObject>& pObj : *this)
         pObj->NbcMirror(rRef1,rRef2);
-    }
 
     NbcMirrorGluePoints(rRef1,rRef2);
     SetGlueReallyAbsolute(false);
@@ -498,11 +475,9 @@ void SdrObjGroup::NbcShear(const Point& rRef, Degree100 
nAngle, double tn, bool
 {
     SetGlueReallyAbsolute(true);
     ShearPoint(maRefPoint, rRef, tn);
-    const size_t nObjCount(GetObjCount());
 
-    for (size_t i=0; i<nObjCount; ++i)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        SdrObject* pObj(GetObj(i));
         pObj->NbcShear(rRef,nAngle,tn,bVShear);
     }
 
@@ -516,13 +491,9 @@ void SdrObjGroup::NbcSetAnchorPos(const Point& rPnt)
     m_aAnchor=rPnt;
     Size aSiz(rPnt.X()-m_aAnchor.X(),rPnt.Y()-m_aAnchor.Y());
     maRefPoint.Move(aSiz);
-    const size_t nObjCount(GetObjCount());
 
-    for (size_t i=0; i<nObjCount; ++i)
-    {
-        SdrObject* pObj(GetObj(i));
+    for (const rtl::Reference<SdrObject>& pObj : *this)
         pObj->NbcSetAnchorPos(rPnt);
-    }
 }
 
 
@@ -578,16 +549,14 @@ void SdrObjGroup::Move(const Size& rSiz)
     if(0 != nObjCount)
     {
         // first move the connectors, then everything else
-        for (size_t i=0; i<nObjCount; ++i)
+        for (const rtl::Reference<SdrObject>& pObj : *this)
         {
-            SdrObject* pObj(GetObj(i));
             if (pObj->IsEdgeObj())
                 pObj->Move(rSiz);
         }
 
-        for (size_t i=0; i<nObjCount; ++i)
+        for (const rtl::Reference<SdrObject>& pObj : *this)
         {
-            SdrObject* pObj(GetObj(i));
             if (!pObj->IsEdgeObj())
                 pObj->Move(rSiz);
         }
@@ -631,16 +600,14 @@ void SdrObjGroup::Resize(const Point& rRef, const 
Fraction& xFact, const Fractio
     if(0 != nObjCount)
     {
         // move the connectors first, everything else afterwards
-        for (size_t i=0; i<nObjCount; ++i)
+        for (const rtl::Reference<SdrObject>& pObj : *this)
         {
-            SdrObject* pObj(GetObj(i));
             if (pObj->IsEdgeObj())
                 pObj->Resize(rRef,xFact,yFact,bUnsetRelative);
         }
 
-        for (size_t i=0; i<nObjCount; ++i)
+        for (const rtl::Reference<SdrObject>& pObj : *this)
         {
-            SdrObject* pObj(GetObj(i));
             if (!pObj->IsEdgeObj())
                 pObj->Resize(rRef,xFact,yFact,bUnsetRelative);
         }
@@ -669,18 +636,15 @@ void SdrObjGroup::Rotate(const Point& rRef, Degree100 
nAngle, double sn, double
     tools::Rectangle aBoundRect0; if (m_pUserCall!=nullptr) 
aBoundRect0=GetLastBoundRect();
     RotatePoint(maRefPoint, rRef, sn, cs);
     // move the connectors first, everything else afterwards
-    const size_t nObjCount(GetObjCount());
 
-    for (size_t i=0; i<nObjCount; ++i)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        SdrObject* pObj(GetObj(i));
         if (pObj->IsEdgeObj())
             pObj->Rotate(rRef,nAngle,sn,cs);
     }
 
-    for (size_t i=0; i<nObjCount; ++i)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        SdrObject* pObj(GetObj(i));
         if (!pObj->IsEdgeObj())
             pObj->Rotate(rRef,nAngle,sn,cs);
     }
@@ -699,18 +663,15 @@ void SdrObjGroup::Mirror(const Point& rRef1, const Point& 
rRef2)
     tools::Rectangle aBoundRect0; if (m_pUserCall!=nullptr) 
aBoundRect0=GetLastBoundRect();
     MirrorPoint(maRefPoint, rRef1, rRef2); // implementation missing in SvdEtc!
     // move the connectors first, everything else afterwards
-    const size_t nObjCount(GetObjCount());
 
-    for (size_t i=0; i<nObjCount; ++i)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        SdrObject* pObj(GetObj(i));
         if (pObj->IsEdgeObj())
             pObj->Mirror(rRef1,rRef2);
     }
 
-    for (size_t i=0; i<nObjCount; ++i)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        SdrObject* pObj(GetObj(i));
         if (!pObj->IsEdgeObj())
             pObj->Mirror(rRef1,rRef2);
     }
@@ -732,18 +693,15 @@ void SdrObjGroup::Shear(const Point& rRef, Degree100 
nAngle, double tn, bool bVS
     tools::Rectangle aBoundRect0; if (m_pUserCall!=nullptr) 
aBoundRect0=GetLastBoundRect();
     ShearPoint(maRefPoint, rRef, tn);
     // move the connectors first, everything else afterwards
-    const size_t nObjCount(GetObjCount());
 
-    for (size_t i=0; i<nObjCount; ++i)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        SdrObject* pObj(GetObj(i));
         if (pObj->IsEdgeObj())
             pObj->Shear(rRef,nAngle,tn,bVShear);
     }
 
-    for (size_t i=0; i<nObjCount; ++i)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        SdrObject* pObj(GetObj(i));
         if (!pObj->IsEdgeObj())
             pObj->Shear(rRef,nAngle,tn,bVShear);
     }
@@ -765,18 +723,15 @@ void SdrObjGroup::SetAnchorPos(const Point& rPnt)
     Size aSiz(rPnt.X()-m_aAnchor.X(),rPnt.Y()-m_aAnchor.Y());
     maRefPoint.Move(aSiz);
     // move the connectors first, everything else afterwards
-    const size_t nObjCount(GetObjCount());
 
-    for (size_t i=0; i<nObjCount; ++i)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        SdrObject* pObj(GetObj(i));
         if (pObj->IsEdgeObj())
             pObj->SetAnchorPos(rPnt);
     }
 
-    for (size_t i=0; i<nObjCount; ++i)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        SdrObject* pObj(GetObj(i));
         if (!pObj->IsEdgeObj())
             pObj->SetAnchorPos(rPnt);
     }
@@ -812,11 +767,9 @@ void SdrObjGroup::NbcReformatText()
 rtl::Reference<SdrObject> SdrObjGroup::DoConvertToPolyObj(bool bBezier, bool 
bAddText) const
 {
     rtl::Reference<SdrObject> pGroup( new 
SdrObjGroup(getSdrModelFromSdrObject()) );
-    const size_t nObjCount(GetObjCount());
 
-    for(size_t a=0; a < nObjCount; ++a)
+    for (const rtl::Reference<SdrObject>& pIterObj : *this)
     {
-        SdrObject* pIterObj(GetObj(a));
         rtl::Reference<SdrObject> 
pResult(pIterObj->DoConvertToPolyObj(bBezier, bAddText));
 
         // pResult can be NULL e.g. for empty objects
diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx
index 123f264c7f81..e88e127e4fa0 100644
--- a/svx/source/svdraw/svdotext.cxx
+++ b/svx/source/svdraw/svdotext.cxx
@@ -1985,14 +1985,9 @@ void SdrTextObj::onEditOutlinerStatusEvent( EditStatus* 
pEditStatus )
 static SdrObject *ImpGetObjByName(SdrObjList const *pObjList, 
std::u16string_view aObjName)
 {
     // scan the whole list
-    size_t nObjCount = pObjList->GetObjCount();
-    for (size_t i = 0; i < nObjCount; i++) {
-        SdrObject *pCurObj = pObjList->GetObj(i);
-
-        if (pCurObj->GetName() == aObjName) {
-            return pCurObj;
-        }
-    }
+    for (const rtl::Reference<SdrObject>& pCurObj : *pObjList)
+        if (pCurObj->GetName() == aObjName)
+            return pCurObj.get();
     // not found
     return nullptr;
 }
diff --git a/svx/source/svdraw/svdpage.cxx b/svx/source/svdraw/svdpage.cxx
index 8570a2157295..bbe169e08b66 100644
--- a/svx/source/svdraw/svdpage.cxx
+++ b/svx/source/svdraw/svdpage.cxx
@@ -142,7 +142,6 @@ void SdrObjList::CopyObjects(const SdrObjList& rSrcList)
 #ifdef DBG_UTIL
     size_t nCloneErrCnt(0);
 #endif
-    const size_t nCount(rSrcList.GetObjCount());
 
     if(nullptr == getSdrObjectFromSdrObjList() && nullptr == 
getSdrPageFromSdrObjList())
     {
@@ -154,15 +153,14 @@ void SdrObjList::CopyObjects(const SdrObjList& rSrcList)
         ? getSdrPageFromSdrObjList()->getSdrModelFromSdrPage()
         : getSdrObjectFromSdrObjList()->getSdrModelFromSdrObject());
 
-    for (size_t no(0); no < nCount; ++no)
+    for (const rtl::Reference<SdrObject>& pSO : rSrcList)
     {
-        SdrObject* pSO(rSrcList.GetObj(no));
         rtl::Reference<SdrObject> pDO(pSO->CloneSdrObject(rTargetSdrModel));
 
         if(pDO)
         {
             NbcInsertObject(pDO.get(), SAL_MAX_SIZE);
-            aCloneList.AddPair(pSO, pDO.get());
+            aCloneList.AddPair(pSO.get(), pDO.get());
         }
 #ifdef DBG_UTIL
         else
@@ -206,10 +204,9 @@ void SdrObjList::RecalcRects()
 {
     maSdrObjListOutRect=tools::Rectangle();
     maSdrObjListSnapRect=maSdrObjListOutRect;
-    const size_t nCount = GetObjCount();
-    for (size_t i=0; i<nCount; ++i) {
-        SdrObject* pObj=GetObj(i);
-        if (i==0) {
+    for (auto it = begin(), itEnd = end(); it != itEnd; ++it) {
+        SdrObject* pObj = it->get();
+        if (it == begin()) {
             maSdrObjListOutRect=pObj->GetCurrentBoundRect();
             maSdrObjListSnapRect=pObj->GetSnapRect();
         } else {
@@ -771,10 +768,8 @@ void SdrObjList::ImplReformatAllEdgeObjects(const 
SdrObjList& rObjList)
 
 void SdrObjList::BurnInStyleSheetAttributes()
 {
-    for(size_t a = 0; a < GetObjCount(); ++a)
-    {
-        GetObj(a)->BurnInStyleSheetAttributes();
-    }
+    for (const rtl::Reference<SdrObject>& pObj : *this)
+        pObj->BurnInStyleSheetAttributes();
 }
 
 size_t SdrObjList::GetObjCount() const
@@ -793,11 +788,10 @@ SdrObject* SdrObjList::GetObj(size_t nNum) const
 
 SdrObject* SdrObjList::GetObjByName(std::u16string_view sName) const
 {
-    for (size_t i = 0; i < GetObjCount(); ++i)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        SdrObject* pObj = GetObj(i);
         if (pObj->GetName() == sName)
-            return pObj;
+            return pObj.get();
     }
     return nullptr;
 }
@@ -1092,12 +1086,8 @@ void SdrObjList::dumpAsXml(xmlTextWriterPtr pWriter) 
const
     (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("ptr"), "%p", 
this);
     (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("symbol"), "%s", 
BAD_CAST(typeid(*this).name()));
 
-    size_t nObjCount = GetObjCount();
-    for (size_t i = 0; i < nObjCount; ++i)
-    {
-        if (const SdrObject* pObject = GetObj(i))
-            pObject->dumpAsXml(pWriter);
-    }
+    for (const rtl::Reference<SdrObject>& pObject : *this)
+        pObject->dumpAsXml(pWriter);
 
     (void)xmlTextWriterEndElement(pWriter);
 }
@@ -1684,24 +1674,20 @@ void SdrPage::TRG_ImpMasterPageRemoved(const SdrPage& 
rRemovedPage)
 void SdrPage::MakePageObjectsNamesUnique()
 {
     std::unordered_set<OUString> aNameSet;
-    for (size_t no(0); no < GetObjCount(); ++no)
+    for (const rtl::Reference<SdrObject>& pObj : *this)
     {
-        SdrObject* pObj(GetObj(no));
-        if(nullptr != pObj)
+        if (!pObj->GetName().isEmpty())
         {
-            if (!pObj->GetName().isEmpty())
+            pObj->MakeNameUnique(aNameSet);
+            SdrObjList* pSdrObjList = pObj->GetSubList(); // group
+            if (pSdrObjList)
             {
-                pObj->MakeNameUnique(aNameSet);
-                SdrObjList* pSdrObjList = pObj->GetSubList(); // group
-                if (pSdrObjList)
+                SdrObject* pListObj;
+                SdrObjListIter aIter(pSdrObjList, SdrIterMode::DeepWithGroups);
+                while (aIter.IsMore())
                 {
-                    SdrObject* pListObj;
-                    SdrObjListIter aIter(pSdrObjList, 
SdrIterMode::DeepWithGroups);
-                    while (aIter.IsMore())
-                    {
-                        pListObj = aIter.Next();
-                        pListObj->MakeNameUnique(aNameSet);
-                    }
+                    pListObj = aIter.Next();
+                    pListObj->MakeNameUnique(aNameSet);
                 }
             }
         }
diff --git a/svx/source/svdraw/svdpagv.cxx b/svx/source/svdraw/svdpagv.cxx
index ab82cf2e3301..86210865e72c 100644
--- a/svx/source/svdraw/svdpagv.cxx
+++ b/svx/source/svdraw/svdpagv.cxx
@@ -606,11 +606,10 @@ bool SdrPageView::IsObjMarkable(SdrObject const * pObj) 
const
 
         if (pObjList && pObjList->GetObjCount())
         {
-            for (size_t a = 0; a < pObjList->GetObjCount(); ++a)
+            for (const rtl::Reference<SdrObject>& pCandidate : *pObjList)
             {
-                SdrObject* pCandidate = pObjList->GetObj(a);
                 // call recursively
-                if (IsObjMarkable(pCandidate))
+                if (IsObjMarkable(pCandidate.get()))
                     return true;
             }
             return false;
diff --git a/svx/source/svdraw/svdpntv.cxx b/svx/source/svdraw/svdpntv.cxx
index da468968ee81..436b2998e810 100644
--- a/svx/source/svdraw/svdpntv.cxx
+++ b/svx/source/svdraw/svdpntv.cxx
@@ -808,12 +808,10 @@ void SdrPaintView::GlueInvalidate() const
             if(mpPageView)
             {
                 const SdrObjList* pOL=mpPageView->GetObjList();
-                const size_t nObjCount = pOL->GetObjCount();
-                for (size_t nObjNum=0; nObjNum<nObjCount; ++nObjNum) {
-                    const SdrObject* pObj=pOL->GetObj(nObjNum);
+                for (const rtl::Reference<SdrObject>& pObj : *pOL) {
                     const SdrGluePointList* pGPL=pObj->GetGluePointList();
                     if (pGPL!=nullptr && pGPL->GetCount()!=0) {
-                        pGPL->Invalidate(*rOutDev.GetOwnerWindow(), pObj);
+                        pGPL->Invalidate(*rOutDev.GetOwnerWindow(), 
pObj.get());
                     }
                 }
             }
diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx
index 3788f8d7154c..51e6268d9fbc 100644
--- a/svx/source/svdraw/svdundo.cxx
+++ b/svx/source/svdraw/svdundo.cxx
@@ -263,12 +263,11 @@ SdrUndoAttrObj::SdrUndoAttrObj(SdrObject& rNewObj, bool 
bStyleSheet1, bool bSave
     {
         // it's a group object!
         pUndoGroup.reset(new SdrUndoGroup(mxObj->getSdrModelFromSdrObject()));
-        const size_t nObjCount(pOL->GetObjCount());
 
-        for(size_t nObjNum = 0; nObjNum < nObjCount; ++nObjNum)
+        for (const rtl::Reference<SdrObject>& pObj : *pOL)
         {
             pUndoGroup->AddAction(
-                std::make_unique<SdrUndoAttrObj>(*pOL->GetObj(nObjNum), 
bStyleSheet1));
+                std::make_unique<SdrUndoAttrObj>(*pObj, bStyleSheet1));
         }
     }
 
@@ -566,10 +565,8 @@ SdrUndoGeoObj::SdrUndoGeoObj(SdrObject& rNewObj)
         // If this were 3D scene, we'd only add an Undo for the scene itself
         // (which we do elsewhere).
         pUndoGroup.reset(new SdrUndoGroup(mxObj->getSdrModelFromSdrObject()));
-        const size_t nObjCount = pOL->GetObjCount();
-        for (size_t nObjNum = 0; nObjNum<nObjCount; ++nObjNum) {
-            
pUndoGroup->AddAction(std::make_unique<SdrUndoGeoObj>(*pOL->GetObj(nObjNum)));
-        }
+        for (const rtl::Reference<SdrObject>& pObj : *pOL)
+            pUndoGroup->AddAction(std::make_unique<SdrUndoGeoObj>(*pObj));
     }
     else
     {

Reply via email to