Salome HOME
Little refactoring of progeny mechanism to avoid if.
[tools/medcoupling.git] / src / MEDCoupling / MEDCouplingTimeLabel.cxx
index a827585315fc5807508bf7a1f89a9846b5139db8..66b495b8c32f050269dd0fe925514e42fe85a9bd 100644 (file)
 
 #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;
+}