haxis/Source/UnrealProject/External/timer

106 lines
3.9 KiB
Plaintext

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2012-2015, Jan de Graaf (jan@jlib.nl) //
// //
// Permission to use, copy, modify, and/or distribute this software for any purpose with or //
// without fee is hereby granted, provided that the above copyright notice and this permission //
// notice appear in all copies. //
// //
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS //
// SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL //
// THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES //
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE //
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. //
// //
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef _JLIB_HEADER_TIMER
#define _JLIB_HEADER_TIMER
/*
Template chrono timer class
Wraps std chrono basic time functions in a timer object.
*/
#include <chrono>
namespace jlib
{
class timer
{
public:
// Constructors
timer() : m_start(std::chrono::high_resolution_clock::now()) {}
template<typename rep, typename period> timer(std::chrono::duration<rep, period> duration) : m_start(std::chrono::high_resolution_clock::now())
{
m_start -= duration;
}
template<typename rep, typename period> timer& operator=(std::chrono::duration<rep, period> duration)
{
restart();
m_start -= duration;
return *this;
}
inline void restart()
{
m_start = std::chrono::high_resolution_clock::now();
}
template<typename dur> inline dur duration() const
{
return std::chrono::duration_cast<dur>(std::chrono::high_resolution_clock::now() - m_start);
}
// Simplified get functions
inline std::chrono::nanoseconds::rep nanoseconds() const
{
return duration<std::chrono::nanoseconds>().count();
}
inline std::chrono::microseconds::rep microseconds() const
{
return duration<std::chrono::microseconds>().count();
}
inline std::chrono::milliseconds::rep milliseconds() const
{
return duration<std::chrono::milliseconds>().count();
}
inline std::chrono::seconds::rep seconds() const
{
return duration<std::chrono::seconds>().count();
}
inline std::chrono::minutes::rep minutes() const
{
return duration<std::chrono::minutes>().count();
}
inline std::chrono::hours::rep hours() const
{
return duration<std::chrono::hours>().count();
}
inline float seconds_float() const
{
return duration<std::chrono::duration<float>>().count();
}
// Addition or substraction
// Allows to add or substract time periods from the timer
template<typename rep, typename period> inline timer& operator+=(std::chrono::duration<rep, period> duration)
{
m_start -= duration;
return *this;
}
template<typename rep, typename period> inline timer& operator-=(std::chrono::duration<rep, period> duration)
{
m_start += duration;
return *this;
}
private:
std::chrono::high_resolution_clock::time_point m_start;
};
}
#endif