]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
Addition of a boolean (deepCopy) in copy constructor of MEDCouplingField. const MEDCo...
authorageay <ageay>
Fri, 8 Mar 2013 15:04:26 +0000 (15:04 +0000)
committerageay <ageay>
Fri, 8 Mar 2013 15:04:26 +0000 (15:04 +0000)
src/MEDCoupling/MEDCouplingField.cxx
src/MEDCoupling/MEDCouplingField.hxx
src/MEDCoupling/MEDCouplingFieldDouble.cxx
src/MEDCoupling/MEDCouplingFieldDouble.hxx
src/MEDCoupling/MEDCouplingFieldTemplate.cxx
src/MEDCoupling/MEDCouplingFieldTemplate.hxx
src/MEDCoupling/MEDCouplingMultiFields.cxx
src/MEDCoupling/MEDCouplingTimeLabel.cxx
src/MEDCoupling/MEDCouplingTimeLabel.hxx

index 7a11d759def74c3c7a530d7ad37a5a0c42e8656b..f1f259e7ed28e9fe1bc62b727f164507a9dc395b 100644 (file)
@@ -344,14 +344,21 @@ MEDCouplingField::MEDCouplingField(TypeOfField type):_nature(NoNature),_mesh(0),
 {
 }
 
-MEDCouplingField::MEDCouplingField(const MEDCouplingField& other):RefCountObject(other),_name(other._name),_desc(other._desc),_nature(other._nature),
-                                                                  _mesh(0),_type(other._type->clone())
+MEDCouplingField::MEDCouplingField(const MEDCouplingField& other, bool deepCopy):RefCountObject(other),_name(other._name),_desc(other._desc),_nature(other._nature),
+                                                                                 _mesh(0),_type(0)
 {
   if(other._mesh)
     {
       _mesh=other._mesh;
       _mesh->incrRef();
     }
+  if(deepCopy)
+    _type=other._type->clone();
+  else
+    {
+      _type=other._type;
+      _type->incrRef();
+    }
 }
 
 /*!
index 06f5f59697db32edc929bc7f092ef4609700f466..22b9345ef43d92bf26bd4a586f9ca99b626749a7 100644 (file)
@@ -86,7 +86,7 @@ namespace ParaMEDMEM
     std::size_t getHeapMemorySize() const;
   protected:
     MEDCouplingField(TypeOfField type);
-    MEDCouplingField(const MEDCouplingField& other);
+    MEDCouplingField(const MEDCouplingField& other, bool deepCopy=true);
     MEDCouplingField(MEDCouplingFieldDiscretization *type, NatureOfField nature=NoNature);
     virtual ~MEDCouplingField();
   protected:
index f2875bf542a755f888f704abfe86073bd094fb41..473f69698a850fda91bc3cd73a259f836dc93e6e 100644 (file)
@@ -56,7 +56,7 @@ MEDCouplingFieldDouble *MEDCouplingFieldDouble::New(TypeOfField type, TypeOfTime
  
  * \return a newly allocated field the caller should deal with.
  */
-MEDCouplingFieldDouble *MEDCouplingFieldDouble::New(const MEDCouplingFieldTemplate *ft, TypeOfTimeDiscretization td)
+MEDCouplingFieldDouble *MEDCouplingFieldDouble::New(const MEDCouplingFieldTemplateft, TypeOfTimeDiscretization td)
 {
   return new MEDCouplingFieldDouble(ft,td);
 }
@@ -546,12 +546,12 @@ MEDCouplingFieldDouble::MEDCouplingFieldDouble(TypeOfField type, TypeOfTimeDiscr
 {
 }
 
-MEDCouplingFieldDouble::MEDCouplingFieldDouble(const MEDCouplingFieldTemplate *ft, TypeOfTimeDiscretization td):MEDCouplingField(*ft),
+MEDCouplingFieldDouble::MEDCouplingFieldDouble(const MEDCouplingFieldTemplate& ft, TypeOfTimeDiscretization td):MEDCouplingField(ft),
                                                                                                                 _time_discr(MEDCouplingTimeDiscretization::New(td))
 {
 }
 
-MEDCouplingFieldDouble::MEDCouplingFieldDouble(const MEDCouplingFieldDouble& other, bool deepCopy):MEDCouplingField(other),
+MEDCouplingFieldDouble::MEDCouplingFieldDouble(const MEDCouplingFieldDouble& other, bool deepCopy):MEDCouplingField(other,deepCopy),
                                                                                                    _time_discr(other._time_discr->performCpy(deepCopy))
 {
 }
index 493bb4ccaee8f1bb937b588ba4029ec032049ee5..76fb40f41baa38fb5f548bed6ce080c62ab0a9f6 100644 (file)
@@ -34,7 +34,7 @@ namespace ParaMEDMEM
   {
   public:
     static MEDCouplingFieldDouble *New(TypeOfField type, TypeOfTimeDiscretization td=ONE_TIME);
-    static MEDCouplingFieldDouble *New(const MEDCouplingFieldTemplate *ft, TypeOfTimeDiscretization td=ONE_TIME);
+    static MEDCouplingFieldDouble *New(const MEDCouplingFieldTemplateft, TypeOfTimeDiscretization td=ONE_TIME);
     void setTimeUnit(const char *unit);
     const char *getTimeUnit() const;
     void synchronizeTimeWithSupport() throw(INTERP_KERNEL::Exception);
@@ -189,7 +189,7 @@ namespace ParaMEDMEM
     MEDCouplingTimeDiscretization *getTimeDiscretizationUnderGround() { return _time_discr; }
   private:
     MEDCouplingFieldDouble(TypeOfField type, TypeOfTimeDiscretization td);
-    MEDCouplingFieldDouble(const MEDCouplingFieldTemplate *ft, TypeOfTimeDiscretization td);
+    MEDCouplingFieldDouble(const MEDCouplingFieldTemplateft, TypeOfTimeDiscretization td);
     MEDCouplingFieldDouble(const MEDCouplingFieldDouble& other, bool deepCopy);
     MEDCouplingFieldDouble(NatureOfField n, MEDCouplingTimeDiscretization *td, MEDCouplingFieldDiscretization *type);
     ~MEDCouplingFieldDouble();
index 628ee6b7290715451833c32d6525def90b2f456b..a94b6700a8157c53d17d61ea379395f81bec5c75 100644 (file)
@@ -27,7 +27,7 @@
 
 using namespace ParaMEDMEM;
 
-MEDCouplingFieldTemplate *MEDCouplingFieldTemplate::New(const MEDCouplingFieldDouble *f) throw(INTERP_KERNEL::Exception)
+MEDCouplingFieldTemplate *MEDCouplingFieldTemplate::New(const MEDCouplingFieldDoublef) throw(INTERP_KERNEL::Exception)
 {
   return new MEDCouplingFieldTemplate(f);
 }
@@ -40,8 +40,9 @@ MEDCouplingFieldTemplate *MEDCouplingFieldTemplate::New(TypeOfField type)
   return new MEDCouplingFieldTemplate(type);
 }
 
-MEDCouplingFieldTemplate::MEDCouplingFieldTemplate(const MEDCouplingFieldDouble *f) throw(INTERP_KERNEL::Exception):MEDCouplingField(*f
+MEDCouplingFieldTemplate::MEDCouplingFieldTemplate(const MEDCouplingFieldDouble& f) throw(INTERP_KERNEL::Exception):MEDCouplingField(f,false
 {
+  forceTimeOfThis(f);
   checkCoherency();
 }
 
index d93411ecb0bff8a53a3c26fd7873ac7ad5bfdc5b..562fdc7edb89487d9dd0784093a1ff7f97f6ac08 100644 (file)
@@ -30,7 +30,7 @@ namespace ParaMEDMEM
   class MEDCOUPLING_EXPORT MEDCouplingFieldTemplate : public MEDCouplingField
   {
   public:
-    static MEDCouplingFieldTemplate *New(const MEDCouplingFieldDouble *f) throw(INTERP_KERNEL::Exception);
+    static MEDCouplingFieldTemplate *New(const MEDCouplingFieldDoublef) throw(INTERP_KERNEL::Exception);
     static MEDCouplingFieldTemplate *New(TypeOfField type);
     std::string simpleRepr() const;
     std::string advancedRepr() const;
@@ -44,7 +44,7 @@ namespace ParaMEDMEM
     void serialize(DataArrayInt *&dataInt) const;
     //
   private:
-    MEDCouplingFieldTemplate(const MEDCouplingFieldDouble *f) throw(INTERP_KERNEL::Exception);
+    MEDCouplingFieldTemplate(const MEDCouplingFieldDoublef) throw(INTERP_KERNEL::Exception);
     MEDCouplingFieldTemplate(TypeOfField type);
   };
 }
index d261867686ec8fbb85741bc74a69fe90e443b66c..5aab55dd399e3fadd375cdcf11649b5f68e80fde 100644 (file)
@@ -342,8 +342,8 @@ MEDCouplingMultiFields::MEDCouplingMultiFields(const MEDCouplingMultiFields& oth
     {
       if((const MEDCouplingFieldDouble *)other._fs[i])
         {
-          MEDCouplingFieldTemplate *tmp=MEDCouplingFieldTemplate::New(other._fs[i]);
-          _fs[i]=MEDCouplingFieldDouble::New(tmp,other._fs[i]->getTimeDiscretization());
+          MEDCouplingFieldTemplate *tmp=MEDCouplingFieldTemplate::New(*other._fs[i]);
+          _fs[i]=MEDCouplingFieldDouble::New(*tmp,other._fs[i]->getTimeDiscretization());
           tmp->decrRef();
           if(refs[i]!=-1)
             _fs[i]->setMesh(ms2[refs[i]]);
@@ -437,7 +437,7 @@ void MEDCouplingMultiFields::finishUnserialization(const std::vector<int>& tinyI
   int offD=0;
   for(int i=0;i<sz;i++)
     {
-      _fs[i]=MEDCouplingFieldDouble::New(ft[i],(TypeOfTimeDiscretization)tinyInfoI[2*sz+3+i]);
+      _fs[i]=MEDCouplingFieldDouble::New(*ft[i],(TypeOfTimeDiscretization)tinyInfoI[2*sz+3+i]);
       int sz3=tinyInfoI[sz+i+3];
       std::vector<DataArrayDouble *> tmp(sz3);
       for(int j=0;j<sz3;j++,k++)
index 9c2716c1e70ad62d83900490e8ec9ddcc4d121c3..166ca8fd9d37caf753bd9108ebfb9f46ec00fa45 100644 (file)
@@ -48,3 +48,12 @@ void TimeLabel::updateTimeWith(const TimeLabel& other) const
   if(_time<other._time)
     _time=other._time;
 }
+
+/*!
+ * This method has to be called with a lot of care. It set agressively the time in this with the
+ * time in \a other.
+ */
+void TimeLabel::forceTimeOfThis(const TimeLabel& other) const
+{
+  _time=other._time;
+}
index 4755d2edd88d3432c8f898554b538082f54ec81d..a6498f5c779b3b1df59750395f5fe681710098f1 100644 (file)
@@ -42,6 +42,7 @@ namespace ParaMEDMEM
     TimeLabel();
     virtual ~TimeLabel();
     void updateTimeWith(const TimeLabel& other) const;
+    void forceTimeOfThis(const TimeLabel& other) const;
   private:
     static unsigned int GLOBAL_TIME;
     mutable unsigned int _time;