X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCoupling%2FMEDCouplingTimeLabel.hxx;h=3da7bef0fab7b225eb14b00ab8f3d2842747e351;hb=b607ffc713080a567fb90595118069ac18181e99;hp=2feefde9cc274a9f12a292a01f8d6f80988c9707;hpb=f1a947b32a36d8dc8e3079b25305bb50e8cb59a0;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling/MEDCouplingTimeLabel.hxx b/src/MEDCoupling/MEDCouplingTimeLabel.hxx index 2feefde9c..3da7bef0f 100644 --- a/src/MEDCoupling/MEDCouplingTimeLabel.hxx +++ b/src/MEDCoupling/MEDCouplingTimeLabel.hxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2013 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,29 +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; - void forceTimeOfThis(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; }; }