]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
Sort ascending and descending.
authorageay <ageay>
Thu, 7 Jun 2012 13:38:28 +0000 (13:38 +0000)
committerageay <ageay>
Thu, 7 Jun 2012 13:38:28 +0000 (13:38 +0000)
src/MEDCoupling/MEDCouplingMemArray.cxx
src/MEDCoupling/MEDCouplingMemArray.hxx
src/MEDCoupling/MEDCouplingMemArray.txx

index 4ae256debb4dce820cc3cef83649b964e2a74362..ad957320757a45cbcadeb84784c547f47bb147f7 100644 (file)
@@ -495,12 +495,12 @@ bool DataArrayDouble::isUniform(double val, double eps) const throw(INTERP_KERNE
   return true;
 }
 
-void DataArrayDouble::sort() throw(INTERP_KERNEL::Exception)
+void DataArrayDouble::sort(bool asc) throw(INTERP_KERNEL::Exception)
 {
   checkAllocated();
   if(getNumberOfComponents()!=1)
     throw INTERP_KERNEL::Exception("DataArrayDouble::sort : only supported with 'this' array with ONE component !");
-  _mem.sort();
+  _mem.sort(asc);
 }
 
 void DataArrayDouble::reverse() throw(INTERP_KERNEL::Exception)
@@ -3289,12 +3289,12 @@ bool DataArrayInt::isEqualWithoutConsideringStrAndOrder(const DataArrayInt& othe
   return a->isEqualWithoutConsideringStr(*b);
 }
 
-void DataArrayInt::sort() throw(INTERP_KERNEL::Exception)
+void DataArrayInt::sort(bool asc) throw(INTERP_KERNEL::Exception)
 {
   checkAllocated();
   if(getNumberOfComponents()!=1)
     throw INTERP_KERNEL::Exception("DataArrayInt::sort : only supported with 'this' array with ONE component !");
-  _mem.sort();
+  _mem.sort(asc);
 }
 
 void DataArrayInt::reverse() throw(INTERP_KERNEL::Exception)
index 1410582493b73e7cea30f35e145d7a5f3b7b04eb..4ce36c639db4afd089df7dd977dfcb062e619c21 100644 (file)
@@ -68,7 +68,7 @@ namespace ParaMEDMEM
     void fillWithValue(const T& val);
     T *fromNoInterlace(int nbOfComp) const;
     T *toNoInterlace(int nbOfComp) const;
-    void sort();
+    void sort(bool asc);
     void reverse();
     void alloc(int nbOfElements) throw(INTERP_KERNEL::Exception);
     void reAlloc(int newNbOfElements) throw(INTERP_KERNEL::Exception);
@@ -150,7 +150,7 @@ namespace ParaMEDMEM
     MEDCOUPLING_EXPORT void fillWithValue(double val) throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void iota(double init=0.) throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT bool isUniform(double val, double eps) const throw(INTERP_KERNEL::Exception);
-    MEDCOUPLING_EXPORT void sort() throw(INTERP_KERNEL::Exception);
+    MEDCOUPLING_EXPORT void sort(bool asc=true) throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void reverse() throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void checkMonotonic(bool increasing, double eps) const throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT bool isMonotonic(bool increasing, double eps) const throw(INTERP_KERNEL::Exception);
@@ -333,7 +333,7 @@ namespace ParaMEDMEM
     MEDCOUPLING_EXPORT bool isEqualWithoutConsideringStr(const DataArrayInt& other) const;
     MEDCOUPLING_EXPORT bool isEqualWithoutConsideringStrAndOrder(const DataArrayInt& other) const throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT DataArrayInt *buildPermutationArr(const DataArrayInt& other) const throw(INTERP_KERNEL::Exception);
-    MEDCOUPLING_EXPORT void sort() throw(INTERP_KERNEL::Exception);
+    MEDCOUPLING_EXPORT void sort(bool asc=true) throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void reverse() throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void fillWithZero() throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void fillWithValue(int val) throw(INTERP_KERNEL::Exception);
index 90438b3f702353af8f40f5bfadad821228c4fe40..efca549b5ec0b756c543e8403d19a8a2670c9789 100644 (file)
@@ -210,10 +210,17 @@ namespace ParaMEDMEM
   }
 
   template<class T>
-  void MemArray<T>::sort()
+  void MemArray<T>::sort(bool asc)
   {
     T *pt=_pointer.getPointer();
-    std::sort(pt,pt+_nb_of_elem);
+    if(asc)
+      std::sort(pt,pt+_nb_of_elem);
+    else
+      {
+        typename std::reverse_iterator<T *> it1(pt+_nb_of_elem);
+        typename std::reverse_iterator<T *> it2(pt);
+        std::sort(it1,it2);
+      }
   }
 
   template<class T>