16 namespace exp_backoff {
26#define SPARTA_EXPBO_CONCAT_ARG2(x,y,z) x##_##y##_##z
33#define SPARTA_EXPBO_CONCAT_ARG(x,y,z) SPARTA_EXPBO_CONCAT_ARG2(x,y,z)
53#define SPARTA_EXPONENTIAL_BACKOFF(mult, action) \
54 static sparta::exp_backoff::counter_t SPARTA_EXPBO_CONCAT_ARG(_count,__LINE__,mult) = 0; \
55 static sparta::exp_backoff::counter_t SPARTA_EXPBO_CONCAT_ARG(_next,__LINE__,mult) = 1; \
56 SPARTA_EXPBO_CONCAT_ARG(_count,__LINE__,mult) ++; \
57 if(SPARTA_EXPBO_CONCAT_ARG(_count,__LINE__,mult) >= SPARTA_EXPBO_CONCAT_ARG(_next,__LINE__,mult)){ \
58 const sparta::exp_backoff::counter_t& SPARTA_EXPONENTIAL_BACKOFF_COUNT = SPARTA_EXPBO_CONCAT_ARG(_count,__LINE__,mult); \
59 (void) SPARTA_EXPONENTIAL_BACKOFF_COUNT; \
61 SPARTA_EXPBO_CONCAT_ARG(_next,__LINE__,mult) *= mult; \
uint32_t counter_t
Type use for exponential backoff counters.
Macros for handling exponential backoff.