mirror of https://github.com/oxen-io/lokinet
add eraseif to decaying hashset
This commit is contained in:
parent
39f8f17b53
commit
eb0abbf1ff
|
@ -308,14 +308,16 @@ namespace llarp
|
|||
auto itr = map.begin();
|
||||
while (itr != map.end())
|
||||
{
|
||||
itr->second->DecayFilters(now);
|
||||
if (itr->second->Expired(now))
|
||||
{
|
||||
m_Router->outboundMessageHandler().QueueRemoveEmptyPath(itr->first);
|
||||
itr = map.erase(itr);
|
||||
}
|
||||
else
|
||||
{
|
||||
itr->second->DecayFilters(now);
|
||||
++itr;
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
|
@ -324,13 +326,15 @@ namespace llarp
|
|||
auto itr = map.begin();
|
||||
while (itr != map.end())
|
||||
{
|
||||
itr->second->DecayFilters(now);
|
||||
if (itr->second->Expired(now))
|
||||
{
|
||||
itr = map.erase(itr);
|
||||
}
|
||||
else
|
||||
{
|
||||
itr->second->DecayFilters(now);
|
||||
++itr;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -270,12 +270,10 @@ namespace llarp
|
|||
|
||||
struct Hash
|
||||
{
|
||||
size_t
|
||||
operator()(const AlignedBuffer& buf) const
|
||||
std::size_t
|
||||
operator()(const AlignedBuffer& buf) const noexcept
|
||||
{
|
||||
size_t hash;
|
||||
std::memcpy(&hash, buf.data(), sizeof(hash));
|
||||
return hash;
|
||||
return *reinterpret_cast<const std::size_t*>(buf.data());
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -39,15 +39,7 @@ namespace llarp
|
|||
{
|
||||
if (now == 0s)
|
||||
now = llarp::time_now_ms();
|
||||
|
||||
auto itr = m_Values.cbegin();
|
||||
while (itr != m_Values.cend())
|
||||
{
|
||||
if ((m_CacheInterval + itr->second) <= now)
|
||||
itr = m_Values.erase(itr);
|
||||
else
|
||||
++itr;
|
||||
}
|
||||
EraseIf([&](const auto& item) { return (m_CacheInterval + item.second) <= now; });
|
||||
}
|
||||
|
||||
Time_t
|
||||
|
@ -69,6 +61,23 @@ namespace llarp
|
|||
}
|
||||
|
||||
private:
|
||||
template <typename Predicate_t>
|
||||
void
|
||||
EraseIf(Predicate_t pred)
|
||||
{
|
||||
for (auto i = m_Values.begin(), last = m_Values.end(); i != last;)
|
||||
{
|
||||
if (pred(*i))
|
||||
{
|
||||
i = m_Values.erase(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
++i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Time_t m_CacheInterval;
|
||||
std::unordered_map<Val_t, Time_t, Hash_t> m_Values;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue