llarp/util/priority_queue.hpp
Namespaces
| Name |
|---|
| llarp [crypto.hpp] |
| llarp::util |
Attributes
| Name | |
|---|---|
| container_type & | vector |
Attributes Documentation
variable vector
container_type & vector;
Source code
#pragma once
#include <queue>
#include <vector>
namespace llarp::util
{
template <typename T, typename Container = std::vector<T>>
using descending_priority_queue =
std::priority_queue<T, Container, std::greater<typename Container::value_type>>;
namespace
{
template <typename Container_t>
struct Wrapper
{
using container_type = Container_t;
using value_type = typename container_type::value_type;
using reference = typename container_type::reference;
using const_reference = typename container_type::const_reference;
using size_type = typename container_type::size_type;
container_type& vector;
void
emplace_back(value_type&& value)
{
vector.emplace_back(std::move(value));
}
auto
begin()
{
return vector.begin();
}
auto
end()
{
return vector.end();
}
size_type
size() const
{
return vector.size();
}
reference
front()
{
return vector.front();
}
const_reference
front() const
{
return vector.front();
}
};
} // namespace
template <
typename T,
typename Visit_t,
typename Queue_t = std::priority_queue<T>,
typename Container_t = std::vector<T>>
inline auto
with_inplace_priority_queue(
Container_t& vec,
Visit_t&& visit,
const typename Queue_t::value_compare& compare = typename Queue_t::value_compare{})
{
const Wrapper<Container_t> wrapper{vec};
using inner_queue_t = std::priority_queue<
typename Queue_t::value_type,
Wrapper<Container_t>,
typename Queue_t::value_compare>;
inner_queue_t queue{compare, wrapper};
return visit(static_cast<inner_queue_t&>(queue));
}
} // namespace llarp::util
Updated on 2026-01-10 at 22:49:46 +0000