File: time_stamp.hpp

package info (click to toggle)
sight 25.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 42,180 kB
  • sloc: cpp: 289,476; xml: 17,257; ansic: 9,878; python: 1,379; sh: 144; makefile: 33
file content (131 lines) | stat: -rw-r--r-- 3,234 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/************************************************************************
 *
 * Copyright (C) 2009-2024 IRCAD France
 * Copyright (C) 2012-2019 IHU Strasbourg
 *
 * This file is part of Sight.
 *
 * Sight 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 3 of the License, or
 * (at your option) any later version.
 *
 * Sight is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with Sight. If not, see <https://www.gnu.org/licenses/>.
 *
 ***********************************************************************/

#pragma once

#include "core/base.hpp"
#include "core/clock.hpp"

namespace sight::core
{

/**
 * @brief Provides a timestamp and an expiry system.
 *
 */
class SIGHT_CORE_CLASS_API time_stamp : public base_object
{
public:

    SIGHT_DECLARE_CLASS(time_stamp, base_object);

    /**
     * @brief Type used in logical typestamp.
     */
    using time_stamp_type = core::clock::type;

    /**
     * @brief Update the timestamp to the current EPOCH time
     */
    SIGHT_CORE_API void modified();

    /**
     * @return TimeStamp's current value
     */
    SIGHT_CORE_API time_stamp_type get_time_stamp() const
    {
        return this->m_modified_time;
    }

    /**
     * @brief Greater than operator for TimeStamp.
     *
     * @param _ts TimeStamp to compare to
     */
    SIGHT_CORE_API bool operator>(const time_stamp& _ts) const
    {
        return this->m_modified_time > _ts.m_modified_time;
    }

    /**
     * @brief Lesser than operator for TimeStamp.
     *
     * @param _ts TimeStamp to compare to
     */
    SIGHT_CORE_API bool operator<(const time_stamp& _ts) const
    {
        return this->m_modified_time < _ts.m_modified_time;
    }

    /**
     * @brief Cast operator for TimeStamp.
     */
    SIGHT_CORE_API operator time_stamp_type() const
    {
        return this->m_modified_time;
    }

    /**
     * @brief Setter for the life period
     *
     * @param _period Period in milliseconds
     */
    SIGHT_CORE_API void set_life_period(time_stamp_type _period)
    {
        m_life_period = _period;
    }

    /**
     * @brief Getter for the life period
     *
     * @return TimeStamp life period
     */
    SIGHT_CORE_API time_stamp_type get_life_period() const
    {
        return m_life_period;
    }

    /**
     * @brief Check TimeStamp expiry status
     *
     * @return True if more than m_lifePeriod milliseconds are elapsed from
     * TimeStamp value
     */
    SIGHT_CORE_API bool period_expired() const
    {
        return (core::clock::get_time_in_milli_sec() - this->m_modified_time) > m_life_period;
    }

private:

    /**
     * @brief TimeStamp value (milliseconds)
     */
    time_stamp_type m_modified_time {0};

    /**
     * @brief life period (milliseconds)
     */
    time_stamp_type m_life_period {0};
};

} //namespace sight::core