8 #ifndef SIG_UTIL_TIMEWATCH_HPP
9 #define SIG_UTIL_TIMEWATCH_HPP
11 #include "../sigutil.hpp"
12 #include "../helper/maybe.hpp"
59 template <
class Clock = std::chrono::system_clock>
62 using Time =
typename Clock::time_point;
63 using Duration = decltype(std::declval<Time>() - std::declval<Time>());
66 std::vector<Duration> laps;
67 std::vector<Duration> cache;
78 Duration d_accumulate(std::vector<Duration>
const& ds, uint
end)
const
80 return std::accumulate(ds.begin(), ds.begin() +
end, Duration(), [&](Duration
const&
sum, Duration
const& v){
102 if (is_run) cache.push_back(Clock::now() - st);
117 auto now = Clock::now();
118 cache.push_back(now - st);
122 laps.push_back(d_accumulate(cache, cache.size()));
135 template<
class TimeUnit = std::chrono::milliseconds>
138 return std::chrono::duration_cast<TimeUnit>(d_accumulate(laps, laps.size())).count();
145 template<
class TimeUnit = std::chrono::milliseconds>
148 return index < laps.size()
149 ? Just<long>(std::chrono::duration_cast<TimeUnit>(d_accumulate(laps, index+1)).count())
157 template<
class TimeUnit = std::chrono::milliseconds>
160 return index < laps.size()
161 ? Just<long>(std::chrono::duration_cast<TimeUnit>(laps[index]).count())
uint get_count() const
記録したデータ数を取得
auto get_split_time(uint index) -> Maybe< long >
指定した区間までのトータル時間(スプリットタイム)を取得
auto end(C &&c) -> std::move_iterator< typename RC::iterator >
auto Nothing() -> typename impl::SameIf< T, void, typename boost::none_t, Maybe< T >>::type
値コンストラクタ
auto get_lap_time(uint index) -> Maybe< long >
指定した区間の時間(ラップタイム)を取得
long get_total_time()
全区間のトータルの時間を取得
auto sum(C const &data) -> typename impl::SameIf< R, void, typename impl::container_traits< C >::value_type, R >::type
総和