Salome HOME
add mpi part
[tools/medcoupling.git] / src / MEDCoupling / MEDCouplingTimeLabel.cxx
index a827585315fc5807508bf7a1f89a9846b5139db8..4bb3671f788a79bf01e14145eea221ee64056d9d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2014  CEA/DEN, EDF R&D
+// Copyright (C) 2007-2015  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 
 #include "MEDCouplingTimeLabel.hxx"
 
+#include "InterpKernelException.hxx"
+
+#include <limits>
+
 using namespace ParaMEDMEM;
 
 std::size_t TimeLabel::GLOBAL_TIME=0;
@@ -57,3 +61,52 @@ void TimeLabel::forceTimeOfThis(const TimeLabel& other) const
 {
   _time=other._time;
 }
+
+TimeLabelConstOverseer::TimeLabelConstOverseer(const TimeLabel *tl):_tl(tl),_ref_time(std::numeric_limits<std::size_t>::max())
+{
+  if(!_tl)
+    throw INTERP_KERNEL::Exception("TimeLabelConstOverseer constructor : input instance must be not NULL !");
+  _tl->updateTime();
+  _ref_time=tl->getTimeOfThis();
+}
+
+/*!
+ * This method checks that the tracked instance is not NULL and if not NULL that its internal state has not changed.
+ */
+void TimeLabelConstOverseer::checkConst() const
+{
+  if(!_tl)
+    throw INTERP_KERNEL::Exception("TimeLabelConstOverseer::checkConst : NULL tracked instance !");
+  _tl->updateTime();
+  if(_ref_time!=_tl->getTimeOfThis())
+    throw INTERP_KERNEL::Exception("TimeLabelConstOverseer::checkConst : the state of the controlled instance of TimeLable has changed !");
+}
+
+bool TimeLabelConstOverseer::resetState()
+{
+  if(_tl)
+    {
+      _tl->updateTime();
+      _ref_time=_tl->getTimeOfThis();
+      return true;
+    }
+  else
+    return false;
+}
+
+bool TimeLabelConstOverseer::keepTrackOfNewTL(const TimeLabel *tl)
+{
+  if(_tl==tl)
+    return false;
+  _tl=tl;
+  if(_tl)
+    {
+      _tl->updateTime();
+      _ref_time=_tl->getTimeOfThis();
+    }
+  else
+    {
+      _ref_time=std::numeric_limits<std::size_t>::max();
+    }
+  return true;
+}