X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCoupling%2FMEDCouplingTimeLabel.hxx;h=3da7bef0fab7b225eb14b00ab8f3d2842747e351;hb=b607ffc713080a567fb90595118069ac18181e99;hp=c334ffdbdd1c3375537ed51c42bd504a0c9bcbc4;hpb=10f37bf6f33a762626d7f1093b2f5450c1688667;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling/MEDCouplingTimeLabel.hxx b/src/MEDCoupling/MEDCouplingTimeLabel.hxx index c334ffdbd..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 @@ -16,34 +16,52 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_TIMELABEL_HXX__ #define __PARAMEDMEM_TIMELABEL_HXX__ #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; }; }