aboutsummaryrefslogtreecommitdiff
path: root/contrib/epee/include/math_helper.h
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-10-17 12:13:17 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-11-01 20:57:24 +0000
commitdcff02e4c3b1214143b19685361c3c6cffa62be7 (patch)
tree0af241489f71a78fc75c9c6a8ae28a971a9a3f04 /contrib/epee/include/math_helper.h
parentwallet: reuse cached height when set after refresh (diff)
downloadmonero-dcff02e4c3b1214143b19685361c3c6cffa62be7.tar.xz
epee: allow a random component in once_a_time timeouts
Diffstat (limited to '')
-rw-r--r--contrib/epee/include/math_helper.h20
1 files changed, 16 insertions, 4 deletions
diff --git a/contrib/epee/include/math_helper.h b/contrib/epee/include/math_helper.h
index 604a04680..29acffaea 100644
--- a/contrib/epee/include/math_helper.h
+++ b/contrib/epee/include/math_helper.h
@@ -32,6 +32,7 @@
#include <list>
#include <numeric>
+#include <random>
#include <boost/timer/timer.hpp>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/random_generator.hpp>
@@ -230,7 +231,7 @@ namespace math_helper
}
}
- template<uint64_t scale, int default_interval, bool start_immediate = true>
+ template<typename get_interval, bool start_immediate = true>
class once_a_time
{
uint64_t get_time() const
@@ -251,12 +252,18 @@ namespace math_helper
#endif
}
+ void set_next_interval()
+ {
+ m_interval = get_interval()();
+ }
+
public:
- once_a_time():m_interval(default_interval * scale)
+ once_a_time()
{
m_last_worked_time = 0;
if(!start_immediate)
m_last_worked_time = get_time();
+ set_next_interval();
}
void trigger()
@@ -273,6 +280,7 @@ namespace math_helper
{
bool res = functr();
m_last_worked_time = get_time();
+ set_next_interval();
return res;
}
return true;
@@ -283,9 +291,13 @@ namespace math_helper
uint64_t m_interval;
};
+ template<uint64_t N> struct get_constant_interval { public: uint64_t operator()() const { return N; } };
+
template<int default_interval, bool start_immediate = true>
- class once_a_time_seconds: public once_a_time<1000000, default_interval, start_immediate> {};
+ class once_a_time_seconds: public once_a_time<get_constant_interval<default_interval * (uint64_t)1000000>, start_immediate> {};
template<int default_interval, bool start_immediate = true>
- class once_a_time_milliseconds: public once_a_time<1000, default_interval, start_immediate> {};
+ class once_a_time_milliseconds: public once_a_time<get_constant_interval<default_interval * (uint64_t)1000>, start_immediate> {};
+ template<typename get_interval, bool start_immediate = true>
+ class once_a_time_seconds_range: public once_a_time<get_interval, start_immediate> {};
}
}