Salome HOME
Copyright update 2022
[modules/smesh.git] / src / DriverCGNS / DriverCGNS_Read.cxx
index 86aae7294094c0446d6912ef726e0c4c214edd89..2b28c9f6ba2afc6e97f191e57131263f65d5da3f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2021  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2022  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -217,7 +217,8 @@ namespace
    */
   //================================================================================
 
-  bool isEqualNodes( const int* nIds1, const int* nIds2, int nbNodes, SMESHDS_Mesh* mesh )
+  bool isEqualNodes( const cgsize_t* nIds1, const cgsize_t* nIds2, size_t nbNodes,
+                     SMESHDS_Mesh* mesh )
   {
     if ( nbNodes > 0 )
     {
@@ -317,7 +318,7 @@ namespace
             }
             // check if range and donorRange describe the same nodes
             {
-              int ids1[2], ids2[2], nbN = 0;
+              cgsize_t ids1[2], ids2[2], nbN = 0;
               TPointRangeIterator rangeIt1bis( range, _meshDim );
               index1 = rangeIt1bis.Next();
               index2 = T * ( index1 - begin1 ) + begin2;
@@ -552,9 +553,9 @@ namespace
     nbNodes = ids[0];
     ++ids;
 #endif
-    vector<smIdType> idVec( ids[0] );
-    for ( int i = 0; i < ids[0]; ++i )
-      idVec[ i ] = ToSmIdType( ids[ i + 1]);
+    vector<smIdType> idVec( nbNodes );
+    for ( int i = 0; i < nbNodes; ++i )
+      idVec[ i ] = ToSmIdType( ids[ i ]);
     return mesh->AddPolygonalFaceWithID( idVec, ToSmIdType(ID) );
   }
 
@@ -892,6 +893,8 @@ Driver_Mesh::Status DriverCGNS_Read::Perform()
         curAddElemFun = addElemFuns[ elemType ];
         SMDS_MeshElement* newElem = 0;
         const SMDS_MeshElement* face;
+        vector<int> quantities;
+        vector<const SMDS_MeshNode*> nodes, faceNodes;
 
         while ( pos < eDataSize )
         {
@@ -923,9 +926,8 @@ Driver_Mesh::Status DriverCGNS_Read::Perform()
                 //                       Face1M, Face2M, ... FaceNM
                 nbFaces = polyOffset[ iElem + 1 ] - polyOffset[ iElem ];
 
-              vector<int> quantities( nbFaces );
-              vector<const SMDS_MeshNode*> nodes, faceNodes;
-              nodes.reserve( nbFaces * 4 );
+              quantities.resize( nbFaces ); quantities.back() = 0;
+              nodes.clear();                nodes.reserve( nbFaces * 4 );
               for ( int iF = 0; iF < nbFaces; ++iF )
               {
                 const int faceID = std::abs( elemData[ pos++ ]) + zone._elemIdShift;
@@ -947,6 +949,7 @@ Driver_Mesh::Status DriverCGNS_Read::Perform()
                 }
                 else {
                   polyhedError = true;
+                  pos += nbFaces - iF - 1;
                   break;
                 }
               }