Salome HOME
Update C++ code consecutive to API modification of ReadField
[tools/medcoupling.git] / src / MEDPartitioner / MEDPARTITIONER_ConnectZone.cxx
old mode 100755 (executable)
new mode 100644 (file)
index eb60723..3a1c9ce
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2014  CEA/DEN, EDF R&D
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 
 #include "MEDPARTITIONER_ConnectZone.hxx"
 
+#include "MEDCouplingSkyLineArray.hxx"
+
 #include <map>
 
+using namespace MEDCoupling;
+
 MEDPARTITIONER::ConnectZone::ConnectZone():
   _name("")
   ,_description("")
@@ -28,16 +32,16 @@ MEDPARTITIONER::ConnectZone::ConnectZone():
   ,_distant_domain_number(0)
   ,_node_corresp(0)
   ,_face_corresp(0)
+  ,_local_mesh(0)
+  ,_distant_mesh(0)
 {
 }
 
 MEDPARTITIONER::ConnectZone::~ConnectZone()
 {
-  delete _node_corresp;
-  delete _face_corresp;
-  for(std::map < std::pair <int, int>,SkyLineArray * >::iterator iter=_entity_corresp.begin(); iter!=_entity_corresp.end();iter++)
+  for(std::map < std::pair <int, int>,MEDCouplingSkyLineArray * >::iterator iter=_entity_corresp.begin(); iter!=_entity_corresp.end();iter++)
     {
-      delete iter->second;
+      iter->second->decrRef();
     }
 }
 
@@ -49,6 +53,8 @@ MEDPARTITIONER::ConnectZone::ConnectZone(const ConnectZone & myConnectZone):
   ,_node_corresp(myConnectZone._node_corresp)
   ,_face_corresp(myConnectZone._face_corresp)
   ,_entity_corresp(myConnectZone._entity_corresp)
+  ,_local_mesh(0)
+  ,_distant_mesh(0)
 {
 }
 
@@ -72,19 +78,19 @@ int MEDPARTITIONER::ConnectZone::getLocalDomainNumber() const
   return _local_domain_number;
 }
 
-ParaMEDMEM::MEDCouplingUMesh *MEDPARTITIONER::ConnectZone::getLocalMesh() const 
+MEDCouplingUMesh *MEDPARTITIONER::ConnectZone::getLocalMesh() const
 {
   return _local_mesh;
 }
 
-ParaMEDMEM::MEDCouplingUMesh *MEDPARTITIONER::ConnectZone::getDistantMesh() const 
+MEDCouplingUMesh *MEDPARTITIONER::ConnectZone::getDistantMesh() const
 {
   return _distant_mesh;
 }
 
 bool MEDPARTITIONER::ConnectZone::isEntityCorrespPresent(int localEntity, int distantEntity) const
 {
-  typedef std::map<std::pair<int,int>, SkyLineArray*>::const_iterator map_iter;
+  typedef std::map<std::pair<int,int>, MEDCouplingSkyLineArray*>::const_iterator map_iter;
   for(map_iter iter=_entity_corresp.begin(); iter != _entity_corresp.end(); iter++)
     {
       if ((iter->first).first==localEntity && (iter->first).second==distantEntity)
@@ -100,7 +106,7 @@ const int *MEDPARTITIONER::ConnectZone::getNodeCorrespIndex() const
 
 const int *MEDPARTITIONER::ConnectZone::getNodeCorrespValue() const
 {
-  return _node_corresp->getValue();
+  return _node_corresp->getValues();
 }
 
 int MEDPARTITIONER::ConnectZone::getNodeNumber() const
@@ -108,6 +114,11 @@ int MEDPARTITIONER::ConnectZone::getNodeNumber() const
   return _node_corresp->getNumberOf();
 }
 
+const MEDCouplingSkyLineArray * MEDPARTITIONER::ConnectZone::getNodeCorresp() const
+{
+  return (const MEDCouplingSkyLineArray *)_node_corresp;
+}
+
 const int *MEDPARTITIONER::ConnectZone::getFaceCorrespIndex() const
 {
   return _face_corresp->getIndex();
@@ -115,7 +126,7 @@ const int *MEDPARTITIONER::ConnectZone::getFaceCorrespIndex() const
 
 const int *MEDPARTITIONER::ConnectZone::getFaceCorrespValue() const
 {
-  return _face_corresp->getValue();
+  return _face_corresp->getValues();
 }
 
 int MEDPARTITIONER::ConnectZone::getFaceNumber() const
@@ -123,56 +134,88 @@ int MEDPARTITIONER::ConnectZone::getFaceNumber() const
   return _face_corresp->getNumberOf();
 }
 
+const MEDCouplingSkyLineArray * MEDPARTITIONER::ConnectZone::getFaceCorresp() const
+{
+  return _face_corresp;
+}
+
 const int *MEDPARTITIONER::ConnectZone::getEntityCorrespIndex(int localEntity,
-                                               int distantEntity) const
+                                                              int distantEntity) const
 {
-  typedef std::map<std::pair<int,int>, SkyLineArray*>::const_iterator map_iter;
+  typedef std::map<std::pair<int,int>, MEDCouplingSkyLineArray*>::const_iterator map_iter;
 
   for(map_iter iter=_entity_corresp.begin();iter!=_entity_corresp.end();iter++)
-    {
-      if ((iter->first).first==localEntity && (iter->first).second==distantEntity)
-        return iter->second->getIndex();
-    }
+  {
+    if ((iter->first).first==localEntity && (iter->first).second==distantEntity)
+      return iter->second->getIndex();
+  }
   return 0;
 }
 
 const int *MEDPARTITIONER::ConnectZone::getEntityCorrespValue(int localEntity,
-                                               int distantEntity) const
+                                                              int distantEntity) const
 {
-  typedef std::map<std::pair<int,int>, SkyLineArray*>::const_iterator map_iter;
+  typedef std::map<std::pair<int,int>, MEDCouplingSkyLineArray*>::const_iterator map_iter;
 
   for (map_iter iter=_entity_corresp.begin();iter!=_entity_corresp.end();iter++)
-    {
-      if ((iter->first).first==localEntity && (iter->first).second==distantEntity)
-        return iter->second->getValue();
-    }
+  {
+    if ((iter->first).first==localEntity && (iter->first).second==distantEntity)
+      return iter->second->getValues();
+  }
   return 0;
 }
 
 int MEDPARTITIONER::ConnectZone::getEntityCorrespNumber(int localEntity,
-                                        int distantEntity) const
+                                                        int distantEntity) const
 {
-  typedef std::map<std::pair<int,int>, SkyLineArray*>::const_iterator map_iter;
+  typedef std::map<std::pair<int,int>, MEDCouplingSkyLineArray*>::const_iterator map_iter;
 
   for(map_iter iter=_entity_corresp.begin();iter!=_entity_corresp.end();iter++)
-    {
-      if((iter->first).first==localEntity && (iter->first).second==distantEntity)
-        return iter->second->getNumberOf();
-    }
+  {
+    if((iter->first).first==localEntity && (iter->first).second==distantEntity)
+      return iter->second->getNumberOf();
+  }
   return 0;
 }
 
 int MEDPARTITIONER::ConnectZone::getEntityCorrespLength(int localEntity,
-                                        int distantEntity) const
+                                                        int distantEntity) const
+{
+  typedef std::map<std::pair<int,int>, MEDCouplingSkyLineArray*>::const_iterator map_iter;
+
+  for (map_iter iter=_entity_corresp.begin(); iter != _entity_corresp.end(); iter++)
+  {
+    if ((iter->first).first==localEntity && (iter->first).second==distantEntity)
+      return iter->second->getLength();
+  }
+  return 0;
+}
+
+const MEDCouplingSkyLineArray *
+MEDPARTITIONER::ConnectZone::getEntityCorresp(int localEntity, int distantEntity) const
 {
-  typedef std::map<std::pair<int,int>, SkyLineArray*>::const_iterator map_iter;
-  
+  typedef std::map<std::pair<int,int>, MEDCouplingSkyLineArray*>::const_iterator map_iter;
+
   for (map_iter iter=_entity_corresp.begin(); iter != _entity_corresp.end(); iter++)
+  {
+    if ((iter->first).first==localEntity && (iter->first).second==distantEntity)
+      return iter->second;
+  }
+  return 0;
+}
+
+std::vector< std::pair< int,int > > MEDPARTITIONER::ConnectZone::getEntities() const
+{
+  std::vector< std::pair< int,int > > types;
+
+  std::map<std::pair<int,int>, MEDCouplingSkyLineArray*>::const_iterator
+    iter = _entity_corresp.begin();
+  for ( ; iter != _entity_corresp.end(); iter++)
     {
-      if ((iter->first).first==localEntity && (iter->first).second==distantEntity)
-        return iter->second->getLength();
+      types.push_back( iter->first );
     }
-  return 0;
+
+  return types;
 }
 
 void MEDPARTITIONER::ConnectZone::setName(const std::string& name) 
@@ -195,45 +238,56 @@ void MEDPARTITIONER::ConnectZone::setLocalDomainNumber(int localDomainNumber)
   _local_domain_number=localDomainNumber;
 }
 
-void MEDPARTITIONER::ConnectZone::setLocalMesh(ParaMEDMEM::MEDCouplingUMesh * localMesh)
+void MEDPARTITIONER::ConnectZone::setLocalMesh(MEDCouplingUMesh * localMesh)
 {
   _local_mesh=localMesh;
 }
 
-void MEDPARTITIONER::ConnectZone::setDistantMesh(ParaMEDMEM::MEDCouplingUMesh * distantMesh)
+void MEDPARTITIONER::ConnectZone::setDistantMesh(MEDCouplingUMesh * distantMesh)
 {
   _distant_mesh=distantMesh;
 }
 
 /*! transforms an int array containing 
  * the node-node connections
- * to a SkyLineArray
+ * to a MEDCouplingSkyLineArray
  */
-void MEDPARTITIONER::ConnectZone::setNodeCorresp(int * nodeCorresp, int nbnode)
+void MEDPARTITIONER::ConnectZone::setNodeCorresp(const int * nodeCorresp, int nbnode)
 {
-  std::vector<int> index(nbnode+1),value(2*nbnode);
+  MCAuto<DataArrayInt> indexArr( DataArrayInt::New() );
+  MCAuto<DataArrayInt> valueArr( DataArrayInt::New() );
+  indexArr->alloc( nbnode+1 );
+  valueArr->alloc( 2*nbnode );
+  int * index = indexArr->getPointer();
+  int * value = valueArr->getPointer();
   for (int i=0; i<nbnode; i++)
     {
       index[i]=2*i;
-      value[2*i]=nodeCorresp[2*i];
+      value[2*i  ]=nodeCorresp[2*i];
       value[2*i+1]=nodeCorresp[2*i+1];
     }
   index[nbnode]=2*nbnode;
-  _node_corresp = new SkyLineArray(index,value);
+  setNodeCorresp( MEDCouplingSkyLineArray::New( indexArr, valueArr ));
 }
 
-void MEDPARTITIONER::ConnectZone::setNodeCorresp(SkyLineArray* array)
+void MEDPARTITIONER::ConnectZone::setNodeCorresp(MEDCouplingSkyLineArray* array)
 {
-  _node_corresp = array;
+  MCAuto<MEDCouplingSkyLineArray> arr(array);
+  _node_corresp = arr;
 }
 
 /*! transforms an int array containing 
  * the face-face connections
- * to a SkyLineArray
+ * to a MEDCouplingSkyLineArray
  */
-void MEDPARTITIONER::ConnectZone::setFaceCorresp(int * faceCorresp, int nbface)
+void MEDPARTITIONER::ConnectZone::setFaceCorresp(const int * faceCorresp, int nbface)
 {
-  std::vector<int> index(nbface+1),value(2*nbface);
+  MCAuto<DataArrayInt> indexArr( DataArrayInt::New() );
+  MCAuto<DataArrayInt> valueArr( DataArrayInt::New() );
+  indexArr->alloc( nbface+1 );
+  valueArr->alloc( 2*nbface );
+  int * index = indexArr->getPointer();
+  int * value = valueArr->getPointer();
   for (int i=0; i<nbface; i++)
     {
       index[i]=2*i;
@@ -241,43 +295,47 @@ void MEDPARTITIONER::ConnectZone::setFaceCorresp(int * faceCorresp, int nbface)
       value[2*i+1]=faceCorresp[2*i+1];
     }
   index[nbface]=2*nbface;
-  _face_corresp = new MEDPARTITIONER::SkyLineArray(index,value);
+  setFaceCorresp( MEDCouplingSkyLineArray::New( indexArr, valueArr ));
 }
 
-void MEDPARTITIONER::ConnectZone::setFaceCorresp(SkyLineArray* array)
+void MEDPARTITIONER::ConnectZone::setFaceCorresp(MEDCouplingSkyLineArray* array)
 {
-  _face_corresp = array;
+  MCAuto<MEDCouplingSkyLineArray> arr (array);
+  _face_corresp = arr;
 }
 
 /*! transforms an int array containing 
  * the entity-entity connections
- * to a SkyLineArray
+ * to a MEDCouplingSkyLineArray
  * 
- * the resulting SkyLineArray is put in the map
+ * the resulting MEDCouplingSkyLineArray is put in the map
  */
 void MEDPARTITIONER::ConnectZone::setEntityCorresp(int localEntity, int distantEntity,
-                                                   int *entityCorresp, int nbentity)
+                                                   const int *entityCorresp, int nbentity)
 { 
-  std::vector<int> index(nbentity+1),value(2*nbentity);
+  MCAuto<DataArrayInt> indexArr( DataArrayInt::New() );
+  MCAuto<DataArrayInt> valueArr( DataArrayInt::New() );
+  indexArr->alloc( nbentity+1 );
+  valueArr->alloc( 2*nbentity );
+  int * index = indexArr->getPointer();
+  int * value = valueArr->getPointer();
   for (int i=0; i<nbentity; i++)
     {
       index[i]=2*i;
-      value[2*i]=entityCorresp[2*i];
+      value[2*i  ]=entityCorresp[2*i];
       value[2*i+1]=entityCorresp[2*i+1];
     }
   index[nbentity]=2*nbentity;
-  _entity_corresp[std::make_pair(localEntity,distantEntity)] = new SkyLineArray(index,value);
+  setEntityCorresp( localEntity, distantEntity, MEDCouplingSkyLineArray::New(indexArr,valueArr));
 }
 
 void MEDPARTITIONER::ConnectZone::setEntityCorresp(int localEntity, int distantEntity,
-                                                   SkyLineArray *array)
+                                                   MEDCouplingSkyLineArray *array)
 {
-  _entity_corresp[std::make_pair(localEntity,distantEntity)]=array;
+  MEDCouplingSkyLineArray * nullArray = 0;
+  std::map < std::pair <int,int>, MEDCouplingSkyLineArray * >::iterator it;
+  it = _entity_corresp.insert
+    ( std::make_pair( std::make_pair(localEntity,distantEntity), nullArray )).first;
+  if ( it->second != nullArray ) it->second->decrRef();
+  it->second = array;
 }
-
-
-
-
-
-
-