|
|
|
@ -29,4 +29,33 @@ namespace llarp
|
|
|
|
|
std::ostream&
|
|
|
|
|
operator<<(std::ostream& out, const TimePoint_t& t);
|
|
|
|
|
|
|
|
|
|
template <typename Time_Duration>
|
|
|
|
|
struct time_delta
|
|
|
|
|
{
|
|
|
|
|
const TimePoint_t at;
|
|
|
|
|
|
|
|
|
|
std::ostream&
|
|
|
|
|
operator()(std::ostream& out) const
|
|
|
|
|
{
|
|
|
|
|
const auto dlt = std::chrono::duration_cast<Time_Duration>(TimePoint_t::clock::now() - at);
|
|
|
|
|
if (dlt > 0s)
|
|
|
|
|
return out << std::chrono::duration_cast<Duration_t>(dlt) << " ago ";
|
|
|
|
|
else if (dlt < 0s)
|
|
|
|
|
return out << "in " << std::chrono::duration_cast<Duration_t>(-dlt);
|
|
|
|
|
else
|
|
|
|
|
return out << "now";
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
inline std::ostream&
|
|
|
|
|
operator<<(std::ostream& out, const time_delta<std::chrono::seconds>& td)
|
|
|
|
|
{
|
|
|
|
|
return td(out);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inline std::ostream&
|
|
|
|
|
operator<<(std::ostream& out, const time_delta<std::chrono::milliseconds>& td)
|
|
|
|
|
{
|
|
|
|
|
return td(out);
|
|
|
|
|
}
|
|
|
|
|
} // namespace llarp
|
|
|
|
|