diff --git a/libi2pd/Timestamp.h b/libi2pd/Timestamp.h index 89b1f1dc..082f4eaf 100644 --- a/libi2pd/Timestamp.h +++ b/libi2pd/Timestamp.h @@ -10,6 +10,21 @@ namespace i2p { namespace util { + template auto getTime(void) + -> decltype(std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()).count ()) + + { + return std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()).count (); + } + + template auto getTime(uint64_t offset) + -> decltype(getTime()){ + + bool Time_Correcting, Time_UseNTP; i2p::config::GetOption("time.correcting", Time_Correcting);i2p::config::GetOption("time.use_ntp", Time_UseNTP); + return (Time_Correcting || Time_UseNTP) ? getTime() + offset : getTime(); + } static int64_t g_TimeOffset = 0; // in seconds inline void setTimeOffset(int64_t ts){g_TimeOffset=ts;} @@ -20,22 +35,17 @@ namespace i2p inline uint64_t GetSecondsSinceEpoch () { - bool Time_Correcting, Time_UseNTP; i2p::config::GetOption("time.correcting", Time_Correcting);i2p::config::GetOption("time.use_ntp", Time_UseNTP); - - auto tmp_time = std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()).count (); - - return (Time_Correcting || Time_UseNTP) ? tmp_time + i2p::util::g_TimeOffset : tmp_time; + return getTime(i2p::util::g_TimeOffset); } inline uint64_t GetMillisecondsSinceEpoch () { - return GetSecondsSinceEpoch()*1000; + return getTime(i2p::util::g_TimeOffset*1000); } inline uint32_t GetHoursSinceEpoch () { - return GetSecondsSinceEpoch()/120; + return getTime(i2p::util::g_TimeOffset/120); }