The Sparta Modeling Framework
Loading...
Searching...
No Matches
SpartaExpBackoff.hpp
1// <SpartaExpBackoff> -*- C++ -*-
2
7#pragma once
8
9#include <cstdint>
10
11namespace sparta {
12
16 namespace exp_backoff {
17
21typedef uint32_t counter_t;
22
26#define SPARTA_EXPBO_CONCAT_ARG2(x,y,z) x##_##y##_##z
27
33#define SPARTA_EXPBO_CONCAT_ARG(x,y,z) SPARTA_EXPBO_CONCAT_ARG2(x,y,z)
34
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; \
60 action; \
61 SPARTA_EXPBO_CONCAT_ARG(_next,__LINE__,mult) *= mult; \
62 }
63
64 } // namespace exp_backoff
65} // namespace sparta
66
uint32_t counter_t
Type use for exponential backoff counters.
Macros for handling exponential backoff.