18 #ifndef ADDRESSPOOL_HPP_ 19 #define ADDRESSPOOL_HPP_ 33 template <
class TC = std::chrono::steady_clock>
38 std::chrono::milliseconds(120000));
43 TEST_VIRTUAL std::vector<MAVAddress>
addresses();
47 std::map<MAVAddress, std::chrono::time_point<TC>> addresses_;
48 std::chrono::milliseconds timeout_;
61 : timeout_(
std::move(timeout))
79 std::lock_guard<std::mutex> lock(mutex_);
80 addresses_.insert_or_assign(std::move(address), TC::now());
96 std::lock_guard<std::mutex> lock(mutex_);
97 std::vector<MAVAddress> addresses;
98 addresses.reserve(addresses_.size());
99 auto current_time = TC::now();
102 for (
auto it = addresses_.cbegin(); it != addresses_.cend();)
105 if ((current_time - it->second) > timeout_)
107 it = addresses_.erase(it);
112 addresses.push_back((it++)->first);
131 std::lock_guard<std::mutex> lock(mutex_);
132 auto it = addresses_.find(address);
134 if (it != addresses_.end())
136 auto current_time = TC::now();
138 if (current_time - it->second > timeout_)
140 addresses_.erase(it);
151 #endif // ADDRESSPOOL_HPP_ TEST_VIRTUAL void add(MAVAddress address)
AddressPool(std::chrono::milliseconds timeout=std::chrono::milliseconds(120000))
TEST_VIRTUAL ~AddressPool()=default
TEST_VIRTUAL bool contains(const MAVAddress &address)
TEST_VIRTUAL std::vector< MAVAddress > addresses()