25#ifndef TGUI_DURATION_HPP
26#define TGUI_DURATION_HPP
28#include <TGUI/Config.hpp>
33#if TGUI_HAS_WINDOW_BACKEND_SFML
34 #include <SFML/System/Time.hpp>
65 template <
typename Rep,
typename Period>
66 constexpr Duration(std::chrono::duration<Rep, Period> duration) :
67 m_duration{std::chrono::duration_cast<std::chrono::
nanoseconds>(duration)}
76 Duration{std::chrono::milliseconds(milliseconds)}
80#if TGUI_HAS_WINDOW_BACKEND_SFML
85 m_duration{std::chrono::duration_cast<std::chrono::
nanoseconds>(std::chrono::microseconds(duration.asMicroseconds()))}
95 return static_cast<float>(
static_cast<double>(m_duration.count()) / 1000000000.0);
101 constexpr operator std::chrono::nanoseconds()
const
109 template <
typename Rep,
typename Period>
110 constexpr operator std::chrono::duration<Rep, Period>()
const
112 return std::chrono::duration_cast<std::chrono::duration<Rep, Period>>(m_duration);
115#if TGUI_HAS_WINDOW_BACKEND_SFML
119 operator sf::Time()
const
121 return sf::microseconds(m_duration.count() / 1000);
128 std::chrono::nanoseconds m_duration;
133 [[nodiscard]]
constexpr bool operator==(
const Duration& lhs,
const Duration& rhs)
135 return std::chrono::nanoseconds(lhs) == std::chrono::nanoseconds(rhs);
138 [[nodiscard]]
constexpr bool operator!=(
const Duration& lhs,
const Duration& rhs)
140 return std::chrono::nanoseconds(lhs) != std::chrono::nanoseconds(rhs);
143 [[nodiscard]]
constexpr bool operator>(
const Duration& lhs,
const Duration& rhs)
145 return std::chrono::nanoseconds(lhs) > std::chrono::nanoseconds(rhs);
148 [[nodiscard]]
constexpr bool operator>=(
const Duration& lhs,
const Duration& rhs)
150 return std::chrono::nanoseconds(lhs) >= std::chrono::nanoseconds(rhs);
153 [[nodiscard]]
constexpr bool operator<(
const Duration& lhs,
const Duration& rhs)
155 return std::chrono::nanoseconds(lhs) < std::chrono::nanoseconds(rhs);
158 [[nodiscard]]
constexpr bool operator<=(
const Duration& lhs,
const Duration& rhs)
160 return std::chrono::nanoseconds(lhs) <= std::chrono::nanoseconds(rhs);
167 return {std::chrono::nanoseconds(lhs) + std::chrono::nanoseconds(rhs)};
172 return {std::chrono::nanoseconds(lhs) - std::chrono::nanoseconds(rhs)};
175 template <
typename T,
typename =
typename std::enable_if_t<std::is_arithmetic_v<T>, T>>
178 return {std::chrono::nanoseconds(lhs) * rhs};
181 template <
typename T,
typename =
typename std::enable_if_t<std::is_arithmetic_v<T>, T>>
184 return {lhs * std::chrono::nanoseconds(rhs)};
187 template <
typename T,
typename =
typename std::enable_if_t<std::is_arithmetic_v<T>, T>>
190 return {std::chrono::nanoseconds(lhs) / rhs};
193 [[nodiscard]]
constexpr float operator/(
const Duration& lhs,
const Duration& rhs)
195 return lhs.
asSeconds() / rhs.asSeconds();
198 template <
typename T,
typename =
typename std::enable_if_t<std::is_arithmetic_v<T>, T>>
201 return {std::chrono::nanoseconds(lhs) % rhs};
206 return {std::chrono::nanoseconds(lhs) % std::chrono::nanoseconds(rhs)};
213 return lhs = lhs + rhs;
218 return lhs = lhs - rhs;
221 template <
typename T,
typename =
typename std::enable_if_t<std::is_arithmetic_v<T>, T>>
224 return lhs = lhs * rhs;
227 template <
typename T,
typename =
typename std::enable_if_t<std::is_arithmetic_v<T>, T>>
230 return lhs = lhs / rhs;
233 template <
typename T,
typename =
typename std::enable_if_t<std::is_arithmetic_v<T>, T>>
236 return lhs = lhs % rhs;
241 return lhs = lhs % rhs;
Wrapper for durations.
Definition Duration.hpp:52
constexpr Duration()
Creates an zero-length duration.
Definition Duration.hpp:57
constexpr Duration(int milliseconds)
Creates the duration from a given amount of milliseconds.
Definition Duration.hpp:75
constexpr operator std::chrono::nanoseconds() const
Convert the duration to std::chrono::nanoseconds.
Definition Duration.hpp:101
Duration(sf::Time duration)
Creates the duration from an sf::Time instance.
Definition Duration.hpp:84
constexpr float asSeconds() const
Returns the duration in seconds.
Definition Duration.hpp:93
constexpr Duration(std::chrono::duration< Rep, Period > duration)
Creates the duration from any kind of std::chrono::duration.
Definition Duration.hpp:66
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:37