]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
First IdType abstraction 130 methods remaining in DataArray
authorAnthony Geay <anthony.geay@edf.fr>
Mon, 29 May 2017 20:27:31 +0000 (22:27 +0200)
committerAnthony Geay <anthony.geay@edf.fr>
Mon, 29 May 2017 20:27:31 +0000 (22:27 +0200)
src/MEDCoupling/MCType.hxx
src/MEDCoupling/MEDCouplingMemArray.cxx
src/MEDCoupling/MEDCouplingMemArray.hxx
src/MEDCoupling/MEDCouplingMemArray.txx

index 8b8fe5417fb8e0788e186a67e185bf25c22d5990..01e2dd1f963d2f6aefca18eea7eae8abda05eb1f 100644 (file)
 #ifndef __MEDCOUPLING_MCTYPE_HXX__
 #define __MEDCOUPLING_MCTYPE_HXX__
 
-typedef long Int64;
-
-typedef int Int32;
+namespace MEDCoupling
+{
+  typedef long Int64;
+  typedef int Int32;
+  typedef int mcIdType;
+}
 
 #define DataArrayInt DataArrayInt32
+#define DataArrayIdType DataArrayInt32
 
 #define DataArrayIntIterator DataArrayInt32Iterator
 
index 211e39df79c8e5501b445cb6c54ebf1cb2f0089c..7eb1baf143934d7990dc86bc0097a3a6c2443f1c 100644 (file)
@@ -4481,58 +4481,6 @@ void DataArrayInt::checkStrictlyMonotonic(bool increasing) const
     }
 }
 
-/*!
- * Creates a new one-dimensional DataArrayInt of the same size as \a this and a given
- * one-dimensional arrays that must be of the same length. The result array describes
- * correspondence between \a this and \a other arrays, so that 
- * <em> other.getIJ(i,0) == this->getIJ(ret->getIJ(i),0)</em>. If such a permutation is
- * not possible because some element in \a other is not in \a this, an exception is thrown.
- *  \param [in] other - an array to compute permutation to.
- *  \return DataArrayInt * - a new instance of DataArrayInt, which is a permutation array
- * from \a this to \a other. The caller is to delete this array using decrRef() as it is
- * no more needed.
- *  \throw If \a this->getNumberOfComponents() != 1.
- *  \throw If \a other->getNumberOfComponents() != 1.
- *  \throw If \a this->getNumberOfTuples() != \a other->getNumberOfTuples().
- *  \throw If \a other includes a value which is not in \a this array.
- * 
- *  \if ENABLE_EXAMPLES
- *  \ref cpp_mcdataarrayint_buildpermutationarr "Here is a C++ example".
- *
- *  \ref py_mcdataarrayint_buildpermutationarr "Here is a Python example".
- *  \endif
- */
-DataArrayInt *DataArrayInt::buildPermutationArr(const DataArrayInt& other) const
-{
-  checkAllocated();
-  if(getNumberOfComponents()!=1 || other.getNumberOfComponents()!=1)
-    throw INTERP_KERNEL::Exception("DataArrayInt::buildPermutationArr : 'this' and 'other' have to have exactly ONE component !");
-  int nbTuple=getNumberOfTuples();
-  other.checkAllocated();
-  if(nbTuple!=other.getNumberOfTuples())
-    throw INTERP_KERNEL::Exception("DataArrayInt::buildPermutationArr : 'this' and 'other' must have the same number of tuple !");
-  MCAuto<DataArrayInt> ret=DataArrayInt::New();
-  ret->alloc(nbTuple,1);
-  ret->fillWithValue(-1);
-  const int *pt=getConstPointer();
-  std::map<int,int> mm;
-  for(int i=0;i<nbTuple;i++)
-    mm[pt[i]]=i;
-  pt=other.getConstPointer();
-  int *retToFill=ret->getPointer();
-  for(int i=0;i<nbTuple;i++)
-    {
-      std::map<int,int>::const_iterator it=mm.find(pt[i]);
-      if(it==mm.end())
-        {
-          std::ostringstream oss; oss << "DataArrayInt::buildPermutationArr : Arrays mismatch : element (" << pt[i] << ") in 'other' not findable in 'this' !";
-          throw INTERP_KERNEL::Exception(oss.str().c_str());
-        }
-      retToFill[i]=(*it).second;
-    }
-  return ret.retn();
-}
-
 /*!
  * Elements of \a partOfThis are expected to be included in \a this.
  * The returned array \a ret is so that this[ret]==partOfThis
index 462cd534308c19be3bf6e135f375175914af2378..99fbf6db1e66c98e81ec90bb68bff7f2de8fc9ed 100644 (file)
@@ -218,6 +218,8 @@ namespace MEDCoupling
   template<class T>
   class DataArrayTemplate : public DataArray
   {
+  public:
+    typedef T Type;
   public:
     MEDCOUPLING_EXPORT static MCAuto< typename Traits<T>::ArrayTypeCh > NewFromStdVector(const typename std::vector<T>& v);
     MEDCOUPLING_EXPORT std::vector< MCAuto< typename Traits<T>::ArrayTypeCh > > explodeComponents() const;
@@ -530,6 +532,7 @@ namespace MEDCoupling
     MEDCOUPLING_EXPORT bool isEqualWithoutConsideringStrAndOrder(const typename Traits<T>::ArrayType& other) const;
     MEDCOUPLING_EXPORT void switchOnTupleEqualTo(T val, std::vector<bool>& vec) const;
     MEDCOUPLING_EXPORT void switchOnTupleNotEqualTo(T val, std::vector<bool>& vec) const;
+    MEDCOUPLING_EXPORT DataArrayIdType *buildPermutationArr(const DataArrayDiscrete<T>& other) const;
   protected:
     template<class ALG>
     void switchOnTupleAlg(T val, std::vector<bool>& vec, ALG algo) const;
@@ -556,7 +559,6 @@ namespace MEDCoupling
     MEDCOUPLING_EXPORT int getHashCode() const;
     MEDCOUPLING_EXPORT DataArrayInt32 *deepCopy() const;//ok
     MEDCOUPLING_EXPORT DataArrayInt32 *buildNewEmptyInstance() const { return DataArrayInt32::New(); }//ok
-    MEDCOUPLING_EXPORT DataArrayInt32 *buildPermutationArr(const DataArrayInt32& other) const;
     MEDCOUPLING_EXPORT DataArrayInt32 *indicesOfSubPart(const DataArrayInt32& partOfThis) const;
     MEDCOUPLING_EXPORT DataArrayInt32 *sumPerTuple() const;
     MEDCOUPLING_EXPORT void checkMonotonic(bool increasing) const;
index aaec5ed8eefcaef9320798464e5f4076c8b30dba..2f05e5cbe29fd995d75c60978b81896c70780568 100644 (file)
@@ -3350,6 +3350,59 @@ struct NotInRange
     switchOnTupleAlg(val,vec,std::not_equal_to<T>());
   }
 
+  /*!
+   * Creates a new one-dimensional DataArrayInt of the same size as \a this and a given
+   * one-dimensional arrays that must be of the same length. The result array describes
+   * correspondence between \a this and \a other arrays, so that 
+   * <em> other.getIJ(i,0) == this->getIJ(ret->getIJ(i),0)</em>. If such a permutation is
+   * not possible because some element in \a other is not in \a this, an exception is thrown.
+   *  \param [in] other - an array to compute permutation to.
+   *  \return DataArrayInt * - a new instance of DataArrayInt, which is a permutation array
+   * from \a this to \a other. The caller is to delete this array using decrRef() as it is
+   * no more needed.
+   *  \throw If \a this->getNumberOfComponents() != 1.
+   *  \throw If \a other->getNumberOfComponents() != 1.
+   *  \throw If \a this->getNumberOfTuples() != \a other->getNumberOfTuples().
+   *  \throw If \a other includes a value which is not in \a this array.
+   * 
+   *  \if ENABLE_EXAMPLES
+   *  \ref cpp_mcdataarrayint_buildpermutationarr "Here is a C++ example".
+   *
+   *  \ref py_mcdataarrayint_buildpermutationarr "Here is a Python example".
+   *  \endif
+   */
+  template<class T>
+  DataArrayIdType *DataArrayDiscrete<T>::buildPermutationArr(const DataArrayDiscrete<T>& other) const
+  {
+    this->checkAllocated();
+    if(this->getNumberOfComponents()!=1 || other.getNumberOfComponents()!=1)
+      throw INTERP_KERNEL::Exception("DataArrayInt::buildPermutationArr : 'this' and 'other' have to have exactly ONE component !");
+    int nbTuple(this->getNumberOfTuples());
+    other.checkAllocated();
+    if(nbTuple!=other.getNumberOfTuples())
+      throw INTERP_KERNEL::Exception("DataArrayInt::buildPermutationArr : 'this' and 'other' must have the same number of tuple !");
+    MCAuto<DataArrayIdType> ret(DataArrayIdType::New());
+    ret->alloc(nbTuple,1);
+    ret->fillWithValue(-1);
+    const T *pt(this->begin());
+    std::map<int,int> mm;
+    for(int i=0;i<nbTuple;i++)
+      mm[pt[i]]=i;
+    pt=other.begin();
+    mcIdType *retToFill(ret->getPointer());
+    for(int i=0;i<nbTuple;i++)
+      {
+        std::map<int,int>::const_iterator it=mm.find(pt[i]);
+        if(it==mm.end())
+          {
+            std::ostringstream oss; oss << "DataArrayInt::buildPermutationArr : Arrays mismatch : element (" << pt[i] << ") in 'other' not findable in 'this' !";
+            throw INTERP_KERNEL::Exception(oss.str().c_str());
+          }
+        retToFill[i]=(*it).second;
+      }
+    return ret.retn();
+  }
+
   /*!
    * This method compares content of input vector \a v and \a this.
    * If for each id in \a this v[id]==True and for all other ids id2 not in \a this v[id2]==False, true is returned.