0028259: Method MakeBlocksCnx is duplicated in two different places in BOPAlgo
[occt.git] / src / BOPAlgo / BOPAlgo_Tools.cxx
index 952b655..6b9ec2f 100644 (file)
@@ -94,143 +94,6 @@ static
   Standard_Boolean FindEdgeTangent(const BRepAdaptor_Curve& theCurve,
                                    gp_Vec& theTangent);
 
-//=======================================================================
-//function : MakeBlocksCnx
-//purpose  : 
-//=======================================================================
-void BOPAlgo_Tools::MakeBlocksCnx(const BOPCol_IndexedDataMapOfIntegerListOfInteger& aMILI,
-                                  BOPCol_DataMapOfIntegerListOfInteger& aMBlocks,
-                                  const Handle(NCollection_BaseAllocator)& aAllocator)
-{
-  Standard_Integer aNbV, nV, aNbVS, nVP, nVx, aNbVP, aNbEC, k, i, j;
-  BOPCol_ListIteratorOfListOfInteger aItLI;
-  //
-  BOPCol_MapOfInteger aMVS(100, aAllocator);
-  BOPCol_IndexedMapOfInteger aMEC(100, aAllocator);
-  BOPCol_IndexedMapOfInteger aMVP(100, aAllocator);
-  BOPCol_IndexedMapOfInteger aMVAdd(100, aAllocator);
-  //
-  aNbV=aMILI.Extent();
-  //
-  for (k=0,i=1; i<=aNbV; ++i) {
-    aNbVS=aMVS.Extent();
-    if (aNbVS==aNbV) {
-      break;
-    }
-    //
-    nV = aMILI.FindKey(i);
-    if (aMVS.Contains(nV)){
-      continue;
-    }
-    aMVS.Add(nV);
-    //
-    aMEC.Clear();
-    aMVP.Clear();
-    aMVAdd.Clear();
-    //
-    aMVP.Add(nV);
-    for(;;) {
-      aNbVP=aMVP.Extent();
-      for (j=1; j<=aNbVP; ++j) {
-        nVP=aMVP(j);
-        const BOPCol_ListOfInteger& aLV=aMILI.FindFromKey(nVP);
-        aItLI.Initialize(aLV);
-        for (; aItLI.More(); aItLI.Next()) {
-          nVx=aItLI.Value();
-          if (aMEC.Contains(nVx)) {
-            continue;
-          }
-          //
-          aMVS.Add(nVx);
-          aMEC.Add(nVx);
-          aMVAdd.Add(nVx);
-        }
-      }
-      //
-      aNbVP=aMVAdd.Extent();
-      if (!aNbVP) {
-        break; // from while(1)
-      }
-      //
-      aMVP.Clear();
-      for (j=1; j<=aNbVP; ++j) {
-        aMVP.Add(aMVAdd(j));
-      }
-      aMVAdd.Clear();
-    }//while(1) {
-    //
-    BOPCol_ListOfInteger aLIx(aAllocator);
-    //
-    aNbEC = aMEC.Extent();
-    for (j=1; j<=aNbEC; ++j) {
-      nVx=aMEC(j);
-      aLIx.Append(nVx);
-    }
-    //
-    aMBlocks.Bind(k, aLIx);
-    ++k;
-  }//for (k=0,i=1; i<=aNbV; ++i)
-  aMVAdd.Clear();
-  aMVP.Clear();
-  aMEC.Clear();
-  aMVS.Clear();
-}
-//=======================================================================
-//function : FillMap
-//purpose  : 
-//=======================================================================
-void BOPAlgo_Tools::FillMap(const Standard_Integer n1,
-                            const Standard_Integer n2,
-                            BOPCol_IndexedDataMapOfIntegerListOfInteger& aMILI,
-                            const Handle(NCollection_BaseAllocator)& aAllocator)
-{
-  if (aMILI.Contains(n1)) {
-    BOPCol_ListOfInteger& aLI=aMILI.ChangeFromKey(n1);
-    aLI.Append(n2);
-  }
-  else {
-    BOPCol_ListOfInteger aLI(aAllocator);
-    aLI.Append(n2);
-    aMILI.Add(n1, aLI);
-  }
-  if (aMILI.Contains(n2)) {
-    BOPCol_ListOfInteger& aLI=aMILI.ChangeFromKey(n2);
-    aLI.Append(n1);
-  }
-  else {
-    BOPCol_ListOfInteger aLI(aAllocator);
-    aLI.Append(n1);
-    aMILI.Add(n2, aLI);
-  }
-}
-//=======================================================================
-//function : FillMap
-//purpose  : 
-//=======================================================================
-void BOPAlgo_Tools::FillMap(const Handle(BOPDS_PaveBlock)& aPB1,
-                            const Handle(BOPDS_PaveBlock)& aPB2,
-                            BOPDS_IndexedDataMapOfPaveBlockListOfPaveBlock& aMPBLPB,
-                            const Handle(NCollection_BaseAllocator)& aAllocator)
-{
-  if (aMPBLPB.Contains(aPB1)) {
-    BOPDS_ListOfPaveBlock& aLPB=aMPBLPB.ChangeFromKey(aPB1);
-    aLPB.Append(aPB2);
-  }
-  else {
-    BOPDS_ListOfPaveBlock aLPB(aAllocator);
-    aLPB.Append(aPB2);
-    aMPBLPB.Add(aPB1, aLPB);
-  }
-  if (aMPBLPB.Contains(aPB2)) {
-    BOPDS_ListOfPaveBlock& aLPB=aMPBLPB.ChangeFromKey(aPB2);
-    aLPB.Append(aPB1);
-  }
-  else {
-    BOPDS_ListOfPaveBlock aLPB(aAllocator);
-    aLPB.Append(aPB1);
-    aMPBLPB.Add(aPB2, aLPB);
-  }
-}
 //=======================================================================
 //function : FillMap
 //purpose  : 
@@ -240,96 +103,11 @@ void BOPAlgo_Tools::FillMap(const Handle(BOPDS_PaveBlock)& aPB,
                             BOPDS_IndexedDataMapOfPaveBlockListOfInteger& aMPBLI,
                             const Handle(NCollection_BaseAllocator)& aAllocator)
 {
-  if (aMPBLI.Contains(aPB)) {
-    BOPCol_ListOfInteger& aLI=aMPBLI.ChangeFromKey(aPB);
-    aLI.Append(nF);
+  BOPCol_ListOfInteger *pLI = aMPBLI.ChangeSeek(aPB);
+  if (!pLI) {
+    pLI = &aMPBLI(aMPBLI.Add(aPB, BOPCol_ListOfInteger(aAllocator)));
   }
-  else {
-    BOPCol_ListOfInteger aLI(aAllocator);
-    aLI.Append(nF);
-    aMPBLI.Add(aPB, aLI);
-  }
-}
-//=======================================================================
-//function : MakeBlocks
-//purpose  : 
-//=======================================================================
-void BOPAlgo_Tools::MakeBlocks(const BOPDS_IndexedDataMapOfPaveBlockListOfPaveBlock& aMILI,
-                               BOPDS_DataMapOfIntegerListOfPaveBlock& aMBlocks,
-                               const Handle(NCollection_BaseAllocator)& aAllocator)
-{
-  Standard_Integer aNbV,  aNbVS, aNbVP, aNbEC, k, i, j;
-  BOPDS_ListIteratorOfListOfPaveBlock aItLI;
-  //
-  BOPDS_MapOfPaveBlock aMVS(100, aAllocator);
-  BOPDS_IndexedMapOfPaveBlock aMEC(100, aAllocator);
-  BOPDS_IndexedMapOfPaveBlock aMVP(100, aAllocator);
-  BOPDS_IndexedMapOfPaveBlock aMVAdd(100, aAllocator);
-  //
-  aNbV=aMILI.Extent();
-  //
-  for (k=0, i=1; i<=aNbV; ++i) {
-    aNbVS=aMVS.Extent();
-    if (aNbVS==aNbV) {
-      break;
-    }
-    //
-    const Handle(BOPDS_PaveBlock)& nV=aMILI.FindKey(i);
-    if (aMVS.Contains(nV)){
-      continue;
-    }
-    aMVS.Add(nV);
-    //
-    aMEC.Clear();
-    aMVP.Clear();
-    aMVAdd.Clear();
-    //
-    aMVP.Add(nV);
-    for(;;) {
-      aNbVP=aMVP.Extent();
-      for (j=1; j<=aNbVP; ++j) {
-        const Handle(BOPDS_PaveBlock)& nVP=aMVP(j);
-        const BOPDS_ListOfPaveBlock& aLV=aMILI.FindFromKey(nVP);
-        aItLI.Initialize(aLV);
-        for (; aItLI.More(); aItLI.Next()) {
-          const Handle(BOPDS_PaveBlock)& nVx=aItLI.Value();
-          if (aMEC.Contains(nVx)) {
-            continue;
-          }
-          //
-          aMVS.Add(nVx);
-          aMEC.Add(nVx);
-          aMVAdd.Add(nVx);
-        }
-      }
-      //
-      aNbVP=aMVAdd.Extent();
-      if (!aNbVP) {
-        break; // from while(1)
-      }
-      //
-      aMVP.Clear();
-      for (j=1; j<=aNbVP; ++j) {
-        aMVP.Add(aMVAdd(j));
-      }
-      aMVAdd.Clear();
-    }//while(1) {
-    //
-    BOPDS_ListOfPaveBlock aLIx(aAllocator);
-    //
-    aNbEC = aMEC.Extent();
-    for (j=1; j<=aNbEC; ++j) {
-      const Handle(BOPDS_PaveBlock)& nVx=aMEC(j);
-      aLIx.Append(nVx);
-    }
-    //
-    aMBlocks.Bind(k, aLIx);
-    ++k;
-  }//for (k=0, i=1; i<=aNbV; ++i)
-  aMVAdd.Clear();
-  aMVP.Clear();
-  aMEC.Clear();
-  aMVS.Clear();
+  pLI->Append(nF);
 }
 //=======================================================================
 //function : PerformCommonBlocks
@@ -346,30 +124,22 @@ void BOPAlgo_Tools::PerformCommonBlocks(BOPDS_IndexedDataMapOfPaveBlockListOfPav
     return;
   }
   //
-  Standard_Integer aNbPB, aNbBlocks, k;
-  BOPDS_ListIteratorOfListOfPaveBlock aItLPB;
   Handle(BOPDS_CommonBlock) aCB;
-  BOPDS_DataMapOfIntegerListOfPaveBlock aMBlocks(100, aAllocator);
+  NCollection_List<BOPDS_ListOfPaveBlock> aMBlocks(aAllocator);
   //
-  BOPAlgo_Tools::MakeBlocks(aMPBLPB, aMBlocks, aAllocator);
+  BOPAlgo_Tools::MakeBlocks<Handle(BOPDS_PaveBlock), TColStd_MapTransientHasher>(aMPBLPB, aMBlocks, aAllocator);
   //
-  aNbBlocks = aMBlocks.Extent();
-  for (k=0; k<aNbBlocks; ++k) {
-    const BOPDS_ListOfPaveBlock& aLPB=aMBlocks.Find(k);
-    aNbPB=aLPB.Extent();
+  NCollection_List<BOPDS_ListOfPaveBlock>::Iterator aItB(aMBlocks);
+  for (; aItB.More(); aItB.Next()) {
+    const BOPDS_ListOfPaveBlock& aLPB = aItB.Value();
+    Standard_Integer aNbPB = aLPB.Extent();
     if (aNbPB>1) {
       aCB=new BOPDS_CommonBlock;
+      aCB->SetPaveBlocks(aLPB);
       //
-      aItLPB.Initialize(aLPB);
-      for (; aItLPB.More(); aItLPB.Next()) {
-        const Handle(BOPDS_PaveBlock)& aPBx=aItLPB.Value();
-        aCB->AddPaveBlock(aPBx);
-      }
-      //
-      aItLPB.Initialize(aLPB);
+      BOPDS_ListIteratorOfListOfPaveBlock aItLPB(aLPB);
       for (; aItLPB.More(); aItLPB.Next()) {
-        const Handle(BOPDS_PaveBlock)& aPBx=aItLPB.Value();
-        pDS->SetCommonBlock(aPBx, aCB);
+        pDS->SetCommonBlock(aItLPB.Value(), aCB);
       }
     }//if (aNbPB>1) {
   }