26#ifndef TGUI_DURATION_HPP
27#define TGUI_DURATION_HPP
29#include <TGUI/Config.hpp>
31#if !TGUI_EXPERIMENTAL_USE_STD_MODULE
34 #include <type_traits>
37#if TGUI_HAS_WINDOW_BACKEND_SFML
38 #include <SFML/System/Time.hpp>
43TGUI_MODULE_EXPORT
namespace tgui
71 template <
typename Rep,
typename Period>
72 constexpr Duration(std::chrono::duration<Rep, Period> duration) :
73 m_duration{std::chrono::duration_cast<std::chrono::
nanoseconds>(duration)}
83 Duration{std::chrono::milliseconds(milliseconds)}
88#if TGUI_HAS_WINDOW_BACKEND_SFML
93 m_duration{std::chrono::duration_cast<std::chrono::
nanoseconds>(std::chrono::microseconds(duration.asMicroseconds()))}
103 return static_cast<float>(
static_cast<double>(m_duration.count()) / 1000000000.0);
110 constexpr operator std::chrono::nanoseconds()
const
119 template <
typename Rep,
typename Period>
120 constexpr operator std::chrono::duration<Rep, Period>()
const
122 return std::chrono::duration_cast<std::chrono::duration<Rep, Period>>(m_duration);
125#if TGUI_HAS_WINDOW_BACKEND_SFML
129 operator sf::Time()
const
131 return sf::microseconds(m_duration.count() / 1000);
138 std::chrono::nanoseconds m_duration;
143 TGUI_NODISCARD
constexpr bool operator==(
const Duration& lhs,
const Duration& rhs)
145 return std::chrono::nanoseconds(lhs) == std::chrono::nanoseconds(rhs);
148 TGUI_NODISCARD
constexpr bool operator!=(
const Duration& lhs,
const Duration& rhs)
150 return std::chrono::nanoseconds(lhs) != std::chrono::nanoseconds(rhs);
153 TGUI_NODISCARD
constexpr bool operator>(
const Duration& lhs,
const Duration& rhs)
155 return std::chrono::nanoseconds(lhs) > std::chrono::nanoseconds(rhs);
158 TGUI_NODISCARD
constexpr bool operator>=(
const Duration& lhs,
const Duration& rhs)
160 return std::chrono::nanoseconds(lhs) >= std::chrono::nanoseconds(rhs);
163 TGUI_NODISCARD
constexpr bool operator<(
const Duration& lhs,
const Duration& rhs)
165 return std::chrono::nanoseconds(lhs) < std::chrono::nanoseconds(rhs);
168 TGUI_NODISCARD
constexpr bool operator<=(
const Duration& lhs,
const Duration& rhs)
170 return std::chrono::nanoseconds(lhs) <= std::chrono::nanoseconds(rhs);
175 TGUI_NODISCARD
constexpr Duration operator+(
const Duration& lhs,
const Duration& rhs)
177 return {std::chrono::nanoseconds(lhs) + std::chrono::nanoseconds(rhs)};
180 TGUI_NODISCARD
constexpr Duration operator-(
const Duration& lhs,
const Duration& rhs)
182 return {std::chrono::nanoseconds(lhs) - std::chrono::nanoseconds(rhs)};
185 template <typename T, typename = typename std::enable_if_t<std::is_arithmetic<T>::value, T>>
186 TGUI_NODISCARD
constexpr Duration operator*(
const Duration& lhs, T rhs)
188 return {std::chrono::nanoseconds(lhs) * rhs};
191 template <typename T, typename = typename std::enable_if_t<std::is_arithmetic<T>::value, T>>
192 TGUI_NODISCARD
constexpr Duration operator*(T lhs,
const Duration& rhs)
194 return {lhs * std::chrono::nanoseconds(rhs)};
197 template <typename T, typename = typename std::enable_if_t<std::is_arithmetic<T>::value, T>>
198 TGUI_NODISCARD
constexpr Duration operator/(
const Duration& lhs, T rhs)
200 return {std::chrono::nanoseconds(lhs) / rhs};
203 TGUI_NODISCARD
constexpr float operator/(
const Duration& lhs,
const Duration& rhs)
205 return lhs.
asSeconds() / rhs.asSeconds();
208 template <typename T, typename = typename std::enable_if_t<std::is_arithmetic<T>::value, T>>
209 TGUI_NODISCARD
constexpr Duration operator%(
const Duration& lhs, T rhs)
211 return {std::chrono::nanoseconds(lhs) % rhs};
214 TGUI_NODISCARD
constexpr Duration operator%(
const Duration& lhs,
const Duration& rhs)
216 return {std::chrono::nanoseconds(lhs) % std::chrono::nanoseconds(rhs)};
221 constexpr Duration& operator+=(Duration& lhs,
const Duration& rhs)
223 return lhs = lhs + rhs;
226 constexpr Duration& operator-=(Duration& lhs,
const Duration& rhs)
229 return lhs = lhs - rhs;
232 template <typename T, typename = typename std::enable_if_t<std::is_arithmetic<T>::value, T>>
233 constexpr Duration& operator*=(Duration& lhs, T rhs)
235 return lhs = lhs * rhs;
238 template <typename T, typename = typename std::enable_if_t<std::is_arithmetic<T>::value, T>>
239 constexpr Duration& operator/=(Duration& lhs, T rhs)
241 return lhs = lhs / rhs;
244 template <typename T, typename = typename std::enable_if_t<std::is_arithmetic<T>::value, T>>
245 constexpr Duration& operator%=(Duration& lhs, T rhs)
247 return lhs = lhs % rhs;
250 constexpr Duration& operator%=(Duration& lhs,
const Duration& rhs)
252 return lhs = lhs % rhs;
Wrapper for durations.
Definition Duration.hpp:56
constexpr Duration()
Creates an zero-length duration.
Definition Duration.hpp:62
constexpr Duration(int milliseconds)
Creates the duration from a given amount of milliseconds.
Definition Duration.hpp:82
constexpr operator std::chrono::nanoseconds() const
Convert the duration to std::chrono::nanoseconds.
Definition Duration.hpp:110
Duration(sf::Time duration)
Creates the duration from an sf::Time instance.
Definition Duration.hpp:92
TGUI_NODISCARD constexpr float asSeconds() const
Returns the duration in seconds.
Definition Duration.hpp:101
constexpr Duration(std::chrono::duration< Rep, Period > duration)
Creates the duration from any kind of std::chrono::duration.
Definition Duration.hpp:72
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:39