X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCoupling%2FMEDCouplingTimeLabel.hxx;h=3da7bef0fab7b225eb14b00ab8f3d2842747e351;hb=b607ffc713080a567fb90595118069ac18181e99;hp=4755d2edd88d3432c8f898554b538082f54ec81d;hpb=293a6104470482e450701aa8061d9b244f2057d5;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling/MEDCouplingTimeLabel.hxx b/src/MEDCoupling/MEDCouplingTimeLabel.hxx index 4755d2edd..3da7bef0f 100644 --- a/src/MEDCoupling/MEDCouplingTimeLabel.hxx +++ b/src/MEDCoupling/MEDCouplingTimeLabel.hxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D +// Copyright (C) 2007-2020 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 // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -23,28 +23,45 @@ #include "MEDCoupling.hxx" -namespace ParaMEDMEM +#include +#include + +namespace MEDCoupling { /*! * Class representing a label of time of the lastely modified part of this. * More _time is high more the object has been modified recently. */ - class MEDCOUPLING_EXPORT TimeLabel + class TimeLabel { public: - TimeLabel& operator=(const TimeLabel& other); + MEDCOUPLING_EXPORT TimeLabel(const TimeLabel& other) = default; + MEDCOUPLING_EXPORT TimeLabel& operator=(const TimeLabel& other); //! This method should be called when write access has been done on this. - void declareAsNew() const; - //! This method should be called on high level classes as Field or Mesh to take into acount modifications done in aggregates objects. - virtual void updateTime() const = 0; - unsigned int getTimeOfThis() const { return _time; } + MEDCOUPLING_EXPORT void declareAsNew() const; + //! This method should be called on high level classes as Field or Mesh to take into account modifications done in aggregates objects. + MEDCOUPLING_EXPORT virtual void updateTime() const = 0; + MEDCOUPLING_EXPORT std::size_t getTimeOfThis() const { return _time; } protected: - TimeLabel(); - virtual ~TimeLabel(); - void updateTimeWith(const TimeLabel& other) const; + MEDCOUPLING_EXPORT TimeLabel(); + MEDCOUPLING_EXPORT virtual ~TimeLabel(); + MEDCOUPLING_EXPORT void updateTimeWith(const TimeLabel& other) const; + MEDCOUPLING_EXPORT void forceTimeOfThis(const TimeLabel& other) const; + private: + static std::atomic GLOBAL_TIME; + mutable std::size_t _time; + }; + + class TimeLabelConstOverseer + { + public: + MEDCOUPLING_EXPORT TimeLabelConstOverseer(const TimeLabel *tl); + MEDCOUPLING_EXPORT void checkConst() const; + MEDCOUPLING_EXPORT bool resetState(); + MEDCOUPLING_EXPORT bool keepTrackOfNewTL(const TimeLabel *tl); private: - static unsigned int GLOBAL_TIME; - mutable unsigned int _time; + const TimeLabel *_tl; + std::size_t _ref_time; }; }