Salome HOME
[EDF27988] : Implementation of MEDCouplingUMesh.explodeMeshTo for MEDFileUMesh.reduce...
[tools/medcoupling.git] / src / MEDCoupling / MEDCouplingFieldFloat.cxx
index 7fbbce57f7f5379e5c0eb3307e6b0ba0ce0a870c..4add2423a145bc52edc84740e1e9cd3b45b14261 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2019  CEA/DEN, EDF R&D
+// Copyright (C) 2007-2023  CEA, EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -21,6 +21,8 @@
 #include "MEDCouplingFieldFloat.hxx"
 #include "MEDCouplingFieldT.txx"
 #include "MEDCouplingFieldDouble.hxx"
+#include "MEDCouplingFieldInt.hxx"
+#include "MEDCouplingFieldInt64.hxx"
 #include "MEDCouplingFieldTemplate.hxx"
 #include "MEDCouplingMesh.hxx"
 #include "MEDCouplingMemArray.txx"
@@ -68,17 +70,33 @@ MEDCouplingFieldFloat *MEDCouplingFieldFloat::clone(bool recDeepCpy) const
   return new MEDCouplingFieldFloat(*this,recDeepCpy);
 }
 
-MEDCouplingFieldDouble *MEDCouplingFieldFloat::convertToDblField() const
+template<class U>
+typename Traits<U>::FieldType *ConvertToUField(const MEDCouplingFieldFloat *self)
 {
-  MCAuto<MEDCouplingFieldTemplate> tmp(MEDCouplingFieldTemplate::New(*this));
+  MCAuto<MEDCouplingFieldTemplate> tmp(MEDCouplingFieldTemplate::New(*self));
   int t1,t2;
-  double t0(getTime(t1,t2));
-  MCAuto<MEDCouplingFieldDouble> ret(MEDCouplingFieldDouble::New(*tmp,getTimeDiscretization()));
+  double t0(self->getTime(t1,t2));
+  MCAuto<typename Traits<U>::FieldType> ret(Traits<U>::FieldType::New(*tmp,self->getTimeDiscretization()));
   ret->setTime(t0,t1,t2);
-  if(getArray())
+  if(self->getArray())
     {
-      MCAuto<DataArrayDouble> arr(getArray()->convertToDblArr());
+      MCAuto<typename Traits<U>::ArrayType> arr(self->getArray()->convertToOtherTypeOfArr<U>());
       ret->setArray(arr);
     }
   return ret.retn();
 }
+
+MEDCouplingFieldDouble * MEDCouplingFieldFloat::convertToDblField() const
+{
+  return ConvertToUField<double>(this);
+}
+
+MEDCouplingFieldInt32 * MEDCouplingFieldFloat::convertToIntField() const
+{
+  return ConvertToUField<int>(this);
+}
+
+MEDCouplingFieldInt64 * MEDCouplingFieldFloat::convertToInt64Field() const
+{
+  return ConvertToUField<Int64>(this);
+}