Vanetza
Loading...
Searching...
No Matches
peer_request_tracker.cpp
1
#
include
<
vanetza
/
security
/
peer_request_tracker
.
hpp
>
2
#
include
<
cassert
>
3
4
namespace
vanetza
5
{
6
namespace
security
7
{
8
9
PeerRequestTracker
::PeerRequestTracker(std::size_t limit) : m_limit(limit)
10
{
11
}
12
13
void
PeerRequestTracker
::
add_request
(
const
HashedId3& id)
14
{
15
if
(!
is_pending
(
id
)
) {
16
// drop tail item when queue becomes full
17
if
(m_fifo.size() >= m_limit && !m_fifo.empty()) {
18
m_lookup.erase(m_fifo.front());
19
m_fifo.pop_front();
20
}
21
22
auto
inserted = m_fifo.insert(m_fifo.end(), id);
23
m_lookup.emplace(id, inserted);
24
}
25
26
assert(m_fifo.size() == m_lookup.size());
27
}
28
29
void
PeerRequestTracker
::
discard_request
(
const
HashedId3& id)
30
{
31
auto
found = m_lookup.find(id);
32
if
(found != m_lookup.end()) {
33
m_fifo.erase(found->second);
34
m_lookup.erase(found);
35
}
36
37
assert(m_fifo.size() == m_lookup.size());
38
}
39
40
bool
PeerRequestTracker
::
is_pending
(
const
HashedId3& id)
const
41
{
42
return
m_lookup.find(id) != m_lookup.end();
43
}
44
45
boost::optional<HashedId3>
PeerRequestTracker
::
next_one
()
46
{
47
boost::optional<HashedId3> next;
48
if
(!m_fifo.empty()) {
49
next = m_fifo.front();
50
m_fifo.pop_front();
51
m_lookup.erase(*next);
52
}
53
54
assert(m_fifo.size() == m_lookup.size());
55
return
next;
56
}
57
58
std
::
list
<
HashedId3
>
PeerRequestTracker
::
next_n
(std::size_t max)
59
{
60
if
(max >= m_fifo.size()) {
61
return
all();
62
}
else
{
63
std::list<HashedId3> next;
64
auto
from = m_fifo.begin();
65
auto
to = std::next(from, max);
66
next.splice(next.begin(), m_fifo, from, to);
67
68
for
(
const
HashedId3& id : next) {
69
m_lookup.erase(id);
70
}
71
72
assert(m_fifo.size() == m_lookup.size());
73
return
next;
74
}
75
}
76
77
std
::
list
<
HashedId3
>
PeerRequestTracker
::
all
()
78
{
79
m_lookup.clear();
80
std::list<HashedId3> all;
81
all.splice(all.begin(), m_fifo, m_fifo.begin(), m_fifo.end());
82
return
all;
83
}
84
85
}
// namespace security
86
}
// namespace vanetza
vanetza::security::PeerRequestTracker
Definition
peer_request_tracker.hpp:15
vanetza::security::PeerRequestTracker::discard_request
void discard_request(const HashedId3 &)
Definition
peer_request_tracker.cpp:29
vanetza::security::PeerRequestTracker::next_n
std::list< HashedId3 > next_n(std::size_t max)
Definition
peer_request_tracker.cpp:58
vanetza::security::PeerRequestTracker::add_request
void add_request(const HashedId3 &)
Definition
peer_request_tracker.cpp:13
vanetza::security::PeerRequestTracker::is_pending
bool is_pending(const HashedId3 &) const
Definition
peer_request_tracker.cpp:40
vanetza::security::PeerRequestTracker::next_one
boost::optional< HashedId3 > next_one()
Definition
peer_request_tracker.cpp:45
vanetza::security::PeerRequestTracker::all
std::list< HashedId3 > all()
Definition
peer_request_tracker.cpp:77
vanetza
security
peer_request_tracker.cpp
Generated on
for Vanetza by
1.16.1