0024911: Avoid using virtual functions in NCollection classes
[occt.git] / src / BOPDS / BOPDS_IteratorSI.cxx
index 6310364..c3ab3c1 100644 (file)
@@ -1,21 +1,16 @@
 // Created by: Peter KURNEV
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
 //
-// The content of this file is subject to the Open CASCADE Technology Public
-// License Version 6.5 (the "License"). You may not use the content of this file
-// except in compliance with the License. Please obtain a copy of the License
-// at http://www.opencascade.org and read it completely before using this file.
+// This file is part of Open CASCADE Technology software library.
 //
-// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
 //
-// The Original Code and all software distributed under the License is
-// distributed on an "AS IS" basis, without warranty of any kind, and the
-// Initial Developer hereby disclaims all such warranties, including without
-// limitation, any warranties of merchantability, fitness for a particular
-// purpose or non-infringement. Please see the License for the specific terms
-// and conditions governing the rights and limitations under the License.
-
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
 
 #include <BOPDS_IteratorSI.ixx>
 
@@ -29,7 +24,9 @@
 #include <BRep_Tool.hxx>
 
 #include <NCollection_UBTreeFiller.hxx>
-#include <BOPDS_BoxBndTree.hxx>
+#include <NCollection_IncAllocator.hxx>
+
+#include <BOPCol_BoxBndTree.hxx>
 #include <BOPDS_IndexRange.hxx>
 #include <BOPDS_PassKeyBoolean.hxx>
 #include <BOPDS_MapOfPassKeyBoolean.hxx>
@@ -49,7 +46,7 @@
 //function : 
 //purpose  : 
 //=======================================================================
-  BOPDS_IteratorSI::BOPDS_IteratorSI()
+BOPDS_IteratorSI::BOPDS_IteratorSI()
 :
   BOPDS_Iterator()
 {
@@ -58,7 +55,8 @@
 //function : 
 //purpose  : 
 //=======================================================================
-  BOPDS_IteratorSI::BOPDS_IteratorSI(const Handle(NCollection_BaseAllocator)& theAllocator)
+BOPDS_IteratorSI::BOPDS_IteratorSI
+  (const Handle(NCollection_BaseAllocator)& theAllocator)
 :
   BOPDS_Iterator(theAllocator)
 {
 //function : ~
 //purpose  : 
 //=======================================================================
-  BOPDS_IteratorSI::~BOPDS_IteratorSI()
+BOPDS_IteratorSI::~BOPDS_IteratorSI()
 {
 }
 //=======================================================================
+// function: UpdateByLevelOfCheck
+// purpose: 
+//=======================================================================
+void BOPDS_IteratorSI::UpdateByLevelOfCheck(const Standard_Integer theLevel)
+{
+  Standard_Integer i, aNbInterfTypes;
+  //
+  aNbInterfTypes=BOPDS_DS::NbInterfTypes();
+  for (i=theLevel+1; i<aNbInterfTypes; ++i) {
+    myLists(i).Clear();
+  }
+}
+//=======================================================================
 // function: Intersect
 // purpose: 
 //=======================================================================
-  void BOPDS_IteratorSI::Intersect()
+void BOPDS_IteratorSI::Intersect()
 {
   Standard_Boolean bFlag;
-  Standard_Integer aNbS, i, aNbB;//, iFlag, aNbLV, aNbA
-  Standard_Integer aNbSD, iX, j, iDS, jB, k;;
+  Standard_Integer aNbS, i, aNbB;
+  Standard_Integer aNbSD, iX, j, iDS, jB;
   TopAbs_ShapeEnum aTi, aTj;
   Handle(NCollection_IncAllocator) aAllocator;
   BOPCol_ListIteratorOfListOfInteger aIt;
   BOPCol_IndexedDataMapOfShapeBox aMSB(100, aAllocator);
   BOPDS_PassKeyBoolean aPKXB; 
   //
-  BOPDS_BoxBndTreeSelector aSelector;
-  BOPDS_BoxBndTree aBBTree;
+  BOPCol_BoxBndTreeSelector aSelector;
+  BOPCol_BoxBndTree aBBTree;
   NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree);
   //
   // myPairsAvoid, aMSI, aMSB
   for (i=0; i<aNbS; ++i) {
     const BOPDS_ShapeInfo& aSI=myDS->ShapeInfo(i);
     //
-    if (aSI.HasBRep()) {
-      const TopoDS_Shape& aSi=aSI.Shape();
-      aTi=aSI.ShapeType();
-      if (aTi!=TopAbs_VERTEX) {
-        const BOPCol_ListOfInteger& aLA=aSI.SubShapes();
-        aIt.Initialize(aLA);
-        for (; aIt.More(); aIt.Next()) {
-          iX=aIt.Value();
-          aPKXB.Clear();
-          aPKXB.SetIds(i, iX);
-          aMPA.Add(aPKXB);
-        }
+    if (!aSI.IsInterfering()) { 
+      continue;
+    }
+    //
+    const TopoDS_Shape& aSi=aSI.Shape();
+    aTi=aSI.ShapeType();
+    if (aTi!=TopAbs_VERTEX) {
+      const BOPCol_ListOfInteger& aLA=aSI.SubShapes();
+      aIt.Initialize(aLA);
+      for (; aIt.More(); aIt.Next()) {
+       iX=aIt.Value();
+       aPKXB.Clear();
+       aPKXB.SetIds(i, iX);
+       aMPA.Add(aPKXB);
       }
-      //
-      aPKXB.Clear();
-      aPKXB.SetIds(i, i);
-      aMPA.Add(aPKXB);
-      //
-      const Bnd_Box& aBoxEx=aSI.Box();
-      //
-      aMSI.Bind(aSi, i);
-      aMSB.Add(aSi, aBoxEx);
     }
+    //
+    aPKXB.Clear();
+    aPKXB.SetIds(i, i);
+    aMPA.Add(aPKXB);
+    //
+    const Bnd_Box& aBoxEx=aSI.Box();
+    //
+    aMSI.Bind(aSi, i);
+    aMSB.Add(aSi, aBoxEx);
   } // for (i=0; i<aNbS; ++i) {
   // 
   // aMII
   for (i=0; i<aNbS; ++i) {
     const BOPDS_ShapeInfo& aSI=myDS->ShapeInfo(i);
     aTi=aSI.ShapeType();
-    if (!aSI.HasBRep()){
+    if (!aSI.IsInterfering()){
       continue;
     }
     //
     //
     const BOPCol_ListOfInteger& aLI=aSelector.Indices();
     //
-    k=0;
-    //
     aIt.Initialize(aLI);
     for (; aIt.More(); aIt.Next()) {
       jB=aIt.Value();  // box index in MII
   aAllocator.Nullify();
   //-----------------------------------------------------scope_1 t
 }
-
-//=======================================================================
-// function: UpdateByLevelOfCheck
-// purpose: 
-//=======================================================================
-  void BOPDS_IteratorSI::UpdateByLevelOfCheck(const Standard_Integer theLevel)
-{
-  Standard_Integer i;
-  //
-  for (i=theLevel+1; i<6; ++i) {
-    myLists(i).Clear();
-  }
-}