Salome HOME
DataArrayInt32.convertToInt64Arr and DataArrayInt64.convertToInt32Arr
authorAnthony Geay <anthony.geay@edf.fr>
Mon, 15 Mar 2021 20:39:55 +0000 (21:39 +0100)
committerAnthony Geay <anthony.geay@edf.fr>
Mon, 15 Mar 2021 20:39:55 +0000 (21:39 +0100)
src/MEDCoupling/MEDCouplingMemArray.cxx
src/MEDCoupling/MEDCouplingMemArray.hxx
src/MEDCoupling_Swig/DataArrayInt.i
src/MEDCoupling_Swig/MEDCouplingBasicsTest7.py
src/MEDCoupling_Swig/MEDCouplingMemArray.i

index 6092bcd2e2476e47b3b6cde9a8fa8d88ce270871..047c52f7916fc780d158dc95ebd4f0dbc7b4b2e4 100755 (executable)
@@ -3625,6 +3625,17 @@ DataArrayInt32 *DataArrayInt32::deepCopy() const
   return new DataArrayInt32(*this);
 }
 
+MCAuto<DataArrayInt64> DataArrayInt32::convertToInt64Arr() const
+{
+  this->checkAllocated();
+  MCAuto<DataArrayInt64> ret(DataArrayInt64::New());
+  ret->alloc(this->getNumberOfTuples(),this->getNumberOfComponents());
+  ret->copyStringInfoFrom(*this);
+  const std::int32_t *pt(this->begin());
+  std::for_each(ret->getPointer(),ret->getPointer()+ret->getNbOfElems(),[&pt](std::int64_t& val) { val = std::int64_t(*pt++); });
+  return ret;
+}
+
 DataArrayInt32Iterator *DataArrayInt32::iterator()
 {
   return new DataArrayInt32Iterator(this);
@@ -3664,6 +3675,17 @@ DataArrayInt32 *DataArrayInt32Tuple::buildDAInt(std::size_t nbOfTuples, std::siz
   return this->buildDA(nbOfTuples,nbOfCompo);
 }
 
+MCAuto<DataArrayInt32> DataArrayInt64::convertToInt32Arr() const
+{
+  this->checkAllocated();
+  MCAuto<DataArrayInt32> ret(DataArrayInt32::New());
+  ret->alloc(this->getNumberOfTuples(),this->getNumberOfComponents());
+  ret->copyStringInfoFrom(*this);
+  const std::int64_t *pt(this->begin());
+  std::for_each(ret->getPointer(),ret->getPointer()+ret->getNbOfElems(),[&pt](std::int32_t& val) { val = std::int32_t(*pt++); });
+  return ret;
+}
+
 DataArrayInt64Iterator *DataArrayInt64::iterator()
 {
   return new DataArrayInt64Iterator(this);
index 8412f384339a4af55f71638fb8d73a41e0c911c3..fc9dbe9c41b955e7e8176ba2ed60199a578c42e7 100755 (executable)
@@ -718,6 +718,7 @@ namespace MEDCoupling
     DataArrayInt32 *deepCopy() const;
     DataArrayInt32 *copySorted(bool asc=true) const override { return this->copySortedImpl(asc); }
     DataArrayInt32 *buildNewEmptyInstance() const { return DataArrayInt32::New(); }
+    MCAuto<DataArrayInt64> convertToInt64Arr() const;
   public:
     DataArrayInt32 *selectByTupleId(const mcIdType *new2OldBg, const mcIdType *new2OldEnd) const { return this->mySelectByTupleId(new2OldBg,new2OldEnd); }
     DataArrayInt32 *selectByTupleId(const DataArrayIdType& di) const { return this->mySelectByTupleId(di); }
@@ -740,6 +741,7 @@ namespace MEDCoupling
     DataArrayInt64 *deepCopy() const;
     DataArrayInt64 *copySorted(bool asc=true) const override { return this->copySortedImpl(asc); }
     DataArrayInt64 *buildNewEmptyInstance() const { return DataArrayInt64::New(); }//ok
+    MCAuto<DataArrayInt32> convertToInt32Arr() const;
   public:
     DataArrayInt64 *selectByTupleId(const mcIdType *new2OldBg, const mcIdType *new2OldEnd) const { return this->mySelectByTupleId(new2OldBg,new2OldEnd); }
     DataArrayInt64 *selectByTupleId(const DataArrayIdType& di) const { return this->mySelectByTupleId(di); }
index e0c0070cd30f7aa548c11fb8438da470e122cc6e..1ec131f368e24a611e77824607c540461eabbbdc 100644 (file)
@@ -2573,6 +2573,11 @@ namespace MEDCoupling
     ARRAYDEF( DataArrayInt32, Int32 )
   };
   %extend DataArrayInt32 {
+    DataArrayInt64 *convertToInt64Arr() const
+    {
+      MCAuto<DataArrayInt64> ret(self->convertToInt64Arr());
+      return ret.retn();
+    }
 #ifdef WITH_NUMPY
     PyObject *toNumPyArray() // not const. It is not a bug !
     {
@@ -2599,6 +2604,11 @@ namespace MEDCoupling
     ARRAYDEF( DataArrayInt64, Int64 )
   };
   %extend DataArrayInt64 {
+    DataArrayInt32 *convertToInt32Arr() const
+    {
+      MCAuto<DataArrayInt32> ret(self->convertToInt32Arr());
+      return ret.retn();
+    }
 #ifdef WITH_NUMPY
     PyObject *toNumPyArray() // not const. It is not a bug !
     {
index bee9d2b3b70d5c6a1781d920ad6ade6803c4e302..961a85717a7afd5450cf52988640f4f76ac0f8e9 100644 (file)
@@ -936,6 +936,26 @@ class MEDCouplingBasicsTest7(unittest.TestCase):
         m.checkConsistency()
         m.checkGeomConsistency() # now m is OK
 
+    def testInt32Int64Arr0(self):
+        n = 30
+        arr = DataArrayInt32(n)
+        arr.iota() ; arr.rearrange(3)
+        comps = ["a","bb","ccc"]
+        name = "aaa"
+        arr.setName(name) ; arr.setInfoOnComponents(comps)
+        self.assertEqual(arr.accumulate(),[135, 145, 155])
+        arr2 = arr.convertToInt64Arr() # test is here
+        self.assertEqual(arr2.accumulate(),[135, 145, 155])
+        self.assertTrue(isinstance(arr2,DataArrayInt64))
+        self.assertEqual(arr2.getName(),name)
+        self.assertEqual(arr2.getInfoOnComponents(),comps)
+        arr3 = arr2.convertToInt32Arr() # test is here
+        self.assertEqual(arr3.accumulate(),[135, 145, 155])
+        self.assertTrue(isinstance(arr3,DataArrayInt32))
+        self.assertEqual(arr3.getName(),name)
+        self.assertEqual(arr3.getInfoOnComponents(),comps)
+        self.assertTrue(arr3.isEqual(arr))
+
     pass
 
 if __name__ == '__main__':
index 5325ef184ac8c3419c8a16b815a5abebbf83ab13..961d62b2e755be262a2b9c0c20502405b92a40c8 100644 (file)
 %newobject MEDCoupling::DataArrayInt32::__rmod__;
 %newobject MEDCoupling::DataArrayInt32::__pow__;
 %newobject MEDCoupling::DataArrayInt32::__rpow__;
+%newobject MEDCoupling::DataArrayInt32::convertToInt64Arr;
 %newobject MEDCoupling::DataArrayInt32Tuple::buildDAInt;
 %newobject MEDCoupling::DataArrayInt64::New;
 %newobject MEDCoupling::DataArrayInt64::__iter__;
 %newobject MEDCoupling::DataArrayInt64::__rmod__;
 %newobject MEDCoupling::DataArrayInt64::__pow__;
 %newobject MEDCoupling::DataArrayInt64::__rpow__;
+%newobject MEDCoupling::DataArrayInt64::convertToInt32Arr;
 %newobject MEDCoupling::DataArrayInt64Tuple::buildDAInt;
 %newobject MEDCoupling::DataArrayChar::convertToIntArr;
 %newobject MEDCoupling::DataArrayChar::renumber;