Simplify implementation of sf::Clock
This commit is contained in:
parent
6dd5f69d16
commit
949d9f44e1
@ -69,13 +69,15 @@ namespace priv
|
|||||||
///
|
///
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
#if defined(SFML_SYSTEM_ANDROID) && defined(SFML_ANDROID_USE_SUSPEND_AWARE_CLOCK)
|
#if defined(SFML_SYSTEM_ANDROID) && defined(SFML_ANDROID_USE_SUSPEND_AWARE_CLOCK)
|
||||||
using MostSuitableClock = SuspendAwareClock;
|
using ClockImpl = SuspendAwareClock;
|
||||||
#else
|
#else
|
||||||
using MostSuitableClock = std::conditional_t<std::chrono::high_resolution_clock::is_steady,
|
using ClockImpl = std::conditional_t<std::chrono::high_resolution_clock::is_steady, std::chrono::high_resolution_clock, std::chrono::steady_clock>;
|
||||||
std::chrono::high_resolution_clock,
|
|
||||||
std::chrono::steady_clock>;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static_assert(ClockImpl::is_steady, "Provided implementation is not a monotonic clock");
|
||||||
|
static_assert(std::ratio_less_equal_v<ClockImpl::period, std::micro>,
|
||||||
|
"Clock resolution is too low. Expecting at least a microsecond precision");
|
||||||
|
|
||||||
} // namespace priv
|
} // namespace priv
|
||||||
|
|
||||||
class Time;
|
class Time;
|
||||||
@ -83,18 +85,12 @@ class Time;
|
|||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
/// \brief Utility class that measures the elapsed time
|
/// \brief Utility class that measures the elapsed time
|
||||||
///
|
///
|
||||||
|
/// The clock starts automatically after being constructed.
|
||||||
|
///
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
class SFML_SYSTEM_API Clock
|
class SFML_SYSTEM_API Clock
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
/// \brief Default constructor
|
|
||||||
///
|
|
||||||
/// The clock starts automatically after being constructed.
|
|
||||||
///
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
Clock();
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
/// \brief Get the elapsed time
|
/// \brief Get the elapsed time
|
||||||
///
|
///
|
||||||
@ -119,27 +115,10 @@ public:
|
|||||||
Time restart();
|
Time restart();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
using ClockImpl = priv::MostSuitableClock;
|
|
||||||
|
|
||||||
static_assert(ClockImpl::is_steady, "Provided implementation is not a monotonic clock");
|
|
||||||
static_assert(std::ratio_less_equal<ClockImpl::period, std::micro>::value,
|
|
||||||
"Clock resolution is too low. Expecting at least a microsecond precision");
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
/// \brief Convert clock duration to Time
|
|
||||||
///
|
|
||||||
/// This function acts as a utility for converting clock
|
|
||||||
/// duration type instance into sf::Time
|
|
||||||
///
|
|
||||||
/// \return Time instance
|
|
||||||
///
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
[[nodiscard]] static Time durationToTime(ClockImpl::duration duration);
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
// Member data
|
// Member data
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
ClockImpl::time_point m_startTime{ClockImpl::now()}; //!< Time of last reset
|
priv::ClockImpl::time_point m_startTime{priv::ClockImpl::now()}; //!< Time of last reset
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace sf
|
} // namespace sf
|
||||||
|
@ -31,34 +31,21 @@
|
|||||||
|
|
||||||
namespace sf
|
namespace sf
|
||||||
{
|
{
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
Clock::Clock() = default;
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
Time Clock::getElapsedTime() const
|
Time Clock::getElapsedTime() const
|
||||||
{
|
{
|
||||||
return durationToTime(ClockImpl::now() - m_startTime);
|
return std::chrono::duration_cast<std::chrono::microseconds>(priv::ClockImpl::now() - m_startTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
Time Clock::restart()
|
Time Clock::restart()
|
||||||
{
|
{
|
||||||
const ClockImpl::time_point now = ClockImpl::now();
|
const auto now = priv::ClockImpl::now();
|
||||||
Time elapsed = durationToTime(now - m_startTime);
|
const auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(now - m_startTime);
|
||||||
m_startTime = now;
|
m_startTime = now;
|
||||||
|
|
||||||
return elapsed;
|
return elapsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
Time Clock::durationToTime(Clock::ClockImpl::duration duration)
|
|
||||||
{
|
|
||||||
using std::chrono::duration_cast;
|
|
||||||
using std::chrono::microseconds;
|
|
||||||
return duration_cast<microseconds>(duration);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace sf
|
} // namespace sf
|
||||||
|
Loading…
Reference in New Issue
Block a user