3#include <xrpl/beast/clock/abstract_clock.h>
4#include <xrpl/beast/container/aged_container.h>
5#include <xrpl/beast/container/detail/aged_associative_container.h>
6#include <xrpl/beast/container/detail/aged_container_iterator.h>
7#include <xrpl/beast/container/detail/empty_base_optimization.h>
9#include <boost/intrusive/list.hpp>
10#include <boost/intrusive/set.hpp>
11#include <boost/version.hpp>
86 struct Element : boost::intrusive::set_base_hook<
87 boost::intrusive::link_mode<boost::intrusive::normal_link>>,
88 boost::intrusive::list_base_hook<
89 boost::intrusive::link_mode<boost::intrusive::normal_link>>
132 return Compare::operator()(lhs.first, rhs.first);
188 [[nodiscard]] Compare
const&
196 boost::intrusive::make_list<Element, boost::intrusive::constant_time_size<false>>
::type;
200 typename boost::intrusive::make_multiset<
202 boost::intrusive::constant_time_size<true>,
203 boost::intrusive::compare<KeyValueCompare>>
::type,
204 typename boost::intrusive::make_set<
206 boost::intrusive::constant_time_size<true>,
207 boost::intrusive::compare<KeyValueCompare>>
::type>;
262 Allocator
const&
alloc)
284 compare() = std::move(other.compare());
285 alloc() = std::move(other.alloc());
296 [[nodiscard]] Compare
const&
329 template <
class... Args>
341 operator()(Element* p)
488 reinterpret_cast<uint8_t*
>(&value) -
496 return list_.iterator_to(*
reinterpret_cast<Element const*
>(
497 reinterpret_cast<uint8_t const*
>(&value) -
525 template <
class InputIt>
528 template <
class InputIt>
531 template <
class InputIt>
534 template <
class InputIt>
540 Allocator
const& alloc);
551 Allocator
const& alloc);
558 Compare
const& comp);
563 Allocator
const& alloc);
569 Allocator
const& alloc);
608 bool MaybeMulti = IsMulti,
609 bool MaybeMap = IsMap,
616 bool MaybeMulti = IsMulti,
617 bool MaybeMap = IsMap,
620 at(K
const& k)
const;
623 bool MaybeMulti = IsMulti,
624 bool MaybeMap = IsMap,
630 bool MaybeMulti = IsMulti,
631 bool MaybeMap = IsMap,
718 return cont_.iterator_to(*
reinterpret_cast<Element*
>(
719 reinterpret_cast<uint8_t*
>(&value) -
727 return cont_.iterator_to(*
reinterpret_cast<Element const*
>(
728 reinterpret_cast<uint8_t const*
>(&value) -
741 return cont_.empty();
766 template <
bool MaybeMulti = IsMulti>
771 template <
bool MaybeMulti = IsMulti>
776 template <
bool MaybeMulti = IsMulti,
bool MaybeMap = IsMap>
782 template <
bool MaybeMulti = IsMulti,
bool MaybeMap = IsMap>
789 template <
bool MaybeMulti = IsMulti>
794 template <
bool MaybeMulti = IsMulti>
803 template <
bool MaybeMulti = IsMulti>
808 template <
bool MaybeMulti = IsMulti>
813 return insert(std::move(value));
817 template <
class P,
bool MaybeMap = IsMap>
827 template <
class P,
bool MaybeMap = IsMap>
836 template <
class InputIt>
840 for (; first != last; ++first)
851 template <
bool MaybeMulti = IsMulti,
class... Args>
856 template <
bool MaybeMulti = IsMulti,
class... Args>
861 template <
bool MaybeMulti = IsMulti,
class... Args>
867 template <
bool MaybeMulti = IsMulti,
class... Args>
1031 class OtherDuration,
1032 class OtherAllocator>
1041 OtherAllocator>
const& other)
const;
1047 class OtherDuration,
1048 class OtherAllocator>
1057 OtherAllocator>
const& other)
const
1066 class OtherDuration,
1067 class OtherAllocator>
1076 OtherAllocator>
const& other)
const
1086 class OtherDuration,
1087 class OtherAllocator>
1096 OtherAllocator>
const& other)
const
1098 return !(other < *
this);
1105 class OtherDuration,
1106 class OtherAllocator>
1115 OtherAllocator>
const& other)
const
1117 return other < *
this;
1124 class OtherDuration,
1125 class OtherAllocator>
1134 OtherAllocator>
const& other)
const
1136 return !(*
this < other);
1167template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1174template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1177 Compare
const& comp)
1182template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1185 Allocator
const& alloc)
1190template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1193 Compare
const& comp,
1194 Allocator
const& alloc)
1199template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1200template <
class InputIt>
1210template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1211template <
class InputIt>
1216 Compare
const& comp)
1222template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1223template <
class InputIt>
1228 Allocator
const& alloc)
1234template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1235template <
class InputIt>
1240 Compare
const& comp,
1241 Allocator
const& alloc)
1247template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1251#if BOOST_VERSION >= 108000
1260template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1263 Allocator
const& alloc)
1265#if BOOST_VERSION >= 108000
1274template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1282template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1285 Allocator
const& alloc)
1287#if BOOST_VERSION >= 108000
1294 insert(other.cbegin(), other.cend());
1298template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1307template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1311 Compare
const& comp)
1317template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1321 Allocator
const& alloc)
1327template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1331 Compare
const& comp,
1332 Allocator
const& alloc)
1338template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1344template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1352 this->
config_ = other.config_;
1353 insert(other.begin(), other.end());
1358template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1364 this->
config_ = std::move(other.config_);
1365 insert(other.begin(), other.end());
1370template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1382template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1383template <
class K,
bool MaybeMulti,
bool MaybeMap,
class>
1388 if (iter ==
cont_.end())
1390 return iter->value.second;
1393template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1394template <
class K,
bool MaybeMulti,
bool MaybeMap,
class>
1399 if (iter ==
cont_.end())
1401 return iter->value.second;
1404template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1405template <
bool MaybeMulti,
bool MaybeMap,
class>
1409 typename cont_type::insert_commit_data d;
1415 cont_.insert_commit(*p, d);
1417 return p->
value.second;
1419 return result.first->value.second;
1422template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1423template <
bool MaybeMulti,
bool MaybeMap,
class>
1427 typename cont_type::insert_commit_data d;
1435 cont_.insert_commit(*p, d);
1437 return p->
value.second;
1439 return result.first->value.second;
1444template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1455template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1456template <
bool MaybeMulti>
1461 typename cont_type::insert_commit_data d;
1466 auto const iter(
cont_.insert_commit(*p, d));
1474template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1475template <
bool MaybeMulti>
1483 auto const iter(
cont_.insert_before(before, *p));
1488template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1489template <
bool MaybeMulti,
bool MaybeMap>
1494 typename cont_type::insert_commit_data d;
1499 auto const iter(
cont_.insert_commit(*p, d));
1507template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1508template <
bool MaybeMulti,
bool MaybeMap>
1516 auto const iter(
cont_.insert_before(before, *p));
1523template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1524template <
bool MaybeMulti>
1530 typename cont_type::insert_commit_data d;
1536 auto const iter(
cont_.insert_commit(*p, d));
1544template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1545template <
bool MaybeMulti>
1551 typename cont_type::insert_commit_data d;
1557 auto const iter(
cont_.insert_commit(*p, d));
1565template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1566template <
bool MaybeMulti,
class... Args>
1574 typename cont_type::insert_commit_data d;
1578 auto const iter(
cont_.insert_commit(*p, d));
1587template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1588template <
bool MaybeMulti,
class... Args>
1596 auto const iter(
cont_.insert_before(before, *p));
1601template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1602template <
bool MaybeMulti,
class... Args>
1611 typename cont_type::insert_commit_data d;
1616 auto const iter(
cont_.insert_commit(*p, d));
1624template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1625template <
bool IsConst,
class Iterator,
class>
1634template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1635template <
bool IsConst,
class Iterator,
class>
1641 for (; first != last;)
1647template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1654 if (iter ==
cont_.end())
1669template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1681template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1687 auto const now(
clock().now());
1690 for (
auto iter : range)
1700template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1705 class OtherDuration,
1706 class OtherAllocator>
1716 OtherAllocator>
const& other)
const
1726 if (
size() != other.size())
1734 [&eq, &other](
value_type const& lhs, Other::value_type
const& rhs) {
1735 return eq(extract(lhs), other.extract(rhs));
1741template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1742template <
bool IsConst,
class Iterator,
class>
1754template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1755template <
bool MaybePropagate>
1765template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1766template <
bool MaybePropagate>
1779template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1789template <
bool IsMulti,
bool IsMap,
class Key,
class T,
class Clock,
class Compare,
class Allocator>
1816 auto const expired(c.
clock().
now() - age);
1820 iter = c.
erase(iter);
Abstract interface to a clock.
Clock::time_point time_point
virtual time_point now() const =0
Returns the current time.
time_point const & when() const
Iterator const & iterator() const
iterator iteratorTo(value_type &value)
const_reverse_iterator rbegin() const
reverse_iterator rbegin()
ChronologicalT(ChronologicalT &&)=delete
const_iterator cend() const
beast::detail::AgedContainerIterator<!IsMap, typename list_type::reverse_iterator > reverse_iterator
const_iterator end() const
friend class AgedOrderedContainer
const_reverse_iterator crend() const
const_iterator begin() const
const_iterator iteratorTo(value_type const &value) const
const_reverse_iterator rend() const
beast::detail::AgedContainerIterator< true, typename list_type::reverse_iterator > const_reverse_iterator
beast::detail::AgedContainerIterator<!IsMap, typename list_type::iterator > iterator
ChronologicalT(ChronologicalT const &)=delete
const_iterator cbegin() const
const_reverse_iterator crbegin() const
beast::detail::AgedContainerIterator< true, typename list_type::iterator > const_iterator
ConfigT(ConfigT const &other, Allocator const &alloc)
ElementAllocator const & alloc() const
Compare const & compare() const
ConfigT(clock_type &clock, Compare const &comp, Allocator const &alloc)
ConfigT(ConfigT &&other, Allocator const &alloc)
std::reference_wrapper< clock_type > clock
ConfigT(ConfigT const &other)
KeyValueCompare const & keyCompare() const
ConfigT & operator=(ConfigT &&other)
KeyValueCompare & keyCompare()
ConfigT(clock_type &clock)
ConfigT & operator=(ConfigT const &other)
ElementAllocator & alloc()
ConfigT(clock_type &clock, Compare const &comp)
ConfigT(clock_type &clock, Allocator const &alloc)
KeyValueCompare(Compare const &compare)
bool operator()(Key const &k, Element const &e) const
KeyValueCompare()=default
bool operator()(Element const &x, Element const &y) const
bool operator()(Element const &e, Key const &k) const
Compare const & compare() const
PairValueCompare(PairValueCompare const &other)
value_type second_argument
value_type first_argument
bool operator()(value_type const &lhs, value_type const &rhs) const
PairValueCompare(Compare const &compare)
PairValueCompare()=default
friend AgedOrderedContainer
Associative container where each element is also indexed by time.
std::enable_if_t< MaybeMap &&std::is_constructible_v< value_type, P && >, std::conditional_t< IsMulti, iterator, std::pair< iterator, bool > > > insert(const_iterator hint, P &&value)
std::pair< iterator, iterator > equalRange(K const &k)
void insert(InputIt first, InputIt last)
iterator upperBound(K const &k)
beast::detail::AgedContainerIterator<!IsMap, typename cont_type::iterator > iterator
const_iterator cbegin() const
std::enable_if_t<!MaybePropagate > swapData(AgedOrderedContainer &other) noexcept
iterator lowerBound(K const &k)
allocator_type getAllocator() const
AgedOrderedContainer(InputIt first, InputIt last, clock_type &clock, Compare const &comp)
AgedOrderedContainer(InputIt first, InputIt last, clock_type &clock, Compare const &comp, Allocator const &alloc)
auto insert(const_iterator hint, value_type const &value) -> std::enable_if_t<!MaybeMulti, iterator >
beast::detail::AgedOrderedContainer< false, true, Key, T, Clock, Compare, Allocator >< beast::IP::Endpoint, Element, std::chrono::steady_clock, std::less< beast::IP::Endpoint >, Allocator >::clock clock_type & clock()
beast::detail::AgedContainerIterator< true, typename cont_type::iterator > const_iterator
void touch(beast::detail::AgedContainerIterator< IsConst, Iterator > pos)
bool operator>=(AgedOrderedContainer< OtherIsMulti, OtherIsMap, Key, OtherT, OtherDuration, Compare, OtherAllocator > const &other) const
AgedOrderedContainer(clock_type &clock, Compare const &comp)
std::allocator_traits< Allocator >::pointer pointer
value_type const & const_reference
iterator find(K const &k)
AgedOrderedContainer(clock_type &clock, Allocator const &alloc)
value_compare valueComp() const
size_type touch(K const &k)
size_type count(K const &k) const
key_compare keyComp() const
beast::detail::AgedOrderedContainer< false, true, Key, T, Clock, Compare, Allocator >< beast::IP::Endpoint, Element, std::chrono::steady_clock, std::less< beast::IP::Endpoint >, Allocator >::chronological class beast::detail::AgedOrderedContainer::ChronologicalT chronological
std::enable_if_t< MaybeMap &&std::is_constructible_v< value_type, P && >, std::conditional_t< IsMulti, iterator, std::pair< iterator, bool > > > insert(P &&value)
std::allocator_traits< ElementAllocator > ElementAllocatorTraits
bool operator<=(AgedOrderedContainer< OtherIsMulti, OtherIsMap, Key, OtherT, OtherDuration, Compare, OtherAllocator > const &other) const
const_reverse_iterator rend() const
std::conditional_t< IsMap, PairValueCompare, Compare > value_compare
boost::intrusive::make_list< Element, boost::intrusive::constant_time_size< false > >::type list_type
beast::detail::AgedContainerIterator<!IsMap, typename cont_type::reverse_iterator > reverse_iterator
AgedOrderedContainer & operator=(AgedOrderedContainer const &other)
reverse_iterator rbegin()
size_type size() const noexcept
bool empty() const noexcept
static Key const & extract(value_type const &value)
auto emplaceHint(const_iterator hint, Args &&... args) -> std::enable_if_t<!MaybeMulti, std::pair< iterator, bool > >
AgedOrderedContainer & operator=(AgedOrderedContainer &&other)
bool operator<(AgedOrderedContainer< OtherIsMulti, OtherIsMap, Key, OtherT, OtherDuration, Compare, OtherAllocator > const &other) const
auto insert(value_type &&value) -> std::enable_if_t< MaybeMulti &&!MaybeMap, iterator >
auto emplace(Args &&... args) -> std::enable_if_t<!MaybeMulti, std::pair< iterator, bool > >
iterator iteratorTo(value_type &value)
const_iterator lowerBound(K const &k) const
std::integral_constant< bool, IsMap > is_map
beast::detail::AgedOrderedContainer< false, true, Key, T, Clock, Compare, Allocator >< beast::IP::Endpoint, Element, std::chrono::steady_clock, std::less< beast::IP::Endpoint >, Allocator >::config_ ConfigT config_
AgedOrderedContainer()=delete
beast::detail::AgedOrderedContainer< false, true, Key, T, Clock, Compare, Allocator >< beast::IP::Endpoint, Element, std::chrono::steady_clock, std::less< beast::IP::Endpoint >, Allocator >::cont_ cont_type cont_
AgedOrderedContainer(std::initializer_list< value_type > init, clock_type &clock, Compare const &comp, Allocator const &alloc)
Element * newElement(Args &&... args)
beast::detail::AgedContainerIterator< false, Iterator > erase(beast::detail::AgedContainerIterator< IsConst, Iterator > pos)
std::ptrdiff_t difference_type
void touch(beast::detail::AgedContainerIterator< IsConst, Iterator > pos, clock_type::time_point const &now)
void swap(AgedOrderedContainer &other) noexcept
AgedOrderedContainer & operator=(std::initializer_list< value_type > init)
auto insert(value_type const &value) -> std::enable_if_t< MaybeMulti, iterator >
std::conditional_t< IsMap, std::pair< Key const, T >, Key > value_type
beast::detail::AgedContainerIterator< true, typename cont_type::reverse_iterator > const_reverse_iterator
std::conditional_t< IsMap, T, void * > & operator[](Key &&key)
AbstractClock< Clock > clock_type
std::enable_if_t< MaybePropagate > swapData(AgedOrderedContainer &other) noexcept
const_iterator begin() const
AgedOrderedContainer(AgedOrderedContainer const &other)
std::conditional_t< IsMap, T, void * > & operator[](Key const &key)
std::integral_constant< bool, IsMulti > is_multi
std::enable_if_t< MaybeMulti, iterator > insert(const_iterator, value_type &&value)
std::conditional_t< IsMulti, typename boost::intrusive::make_multiset< Element, boost::intrusive::constant_time_size< true >, boost::intrusive::compare< KeyValueCompare > >::type, typename boost::intrusive::make_set< Element, boost::intrusive::constant_time_size< true >, boost::intrusive::compare< KeyValueCompare > >::type > cont_type
std::pair< const_iterator, const_iterator > equalRange(K const &k) const
const_iterator end() const
AgedOrderedContainer(clock_type &clock, Compare const &comp, Allocator const &alloc)
AgedOrderedContainer(std::initializer_list< value_type > init, clock_type &clock, Compare const &comp)
const_reverse_iterator rbegin() const
AgedOrderedContainer(AgedOrderedContainer const &other, Allocator const &alloc)
bool operator>(AgedOrderedContainer< OtherIsMulti, OtherIsMap, Key, OtherT, OtherDuration, Compare, OtherAllocator > const &other) const
bool operator==(AgedOrderedContainer< OtherIsMulti, OtherIsMap, Key, OtherT, OtherDuration, Compare, OtherAllocator > const &other) const
bool operator!=(AgedOrderedContainer< OtherIsMulti, OtherIsMap, Key, OtherT, OtherDuration, Compare, OtherAllocator > const &other) const
size_type maxSize() const noexcept
std::conditional_t< IsMap, T, void * > & at(K const &k)
clock_type::duration duration
std::allocator_traits< Allocator >::const_pointer const_pointer
auto insert(const_iterator hint, value_type &&value) -> std::enable_if_t<!MaybeMulti, iterator >
clock_type const & clock() const
AgedOrderedContainer(InputIt first, InputIt last, clock_type &clock)
auto insert(value_type const &value) -> std::enable_if_t<!MaybeMulti, std::pair< iterator, bool > >
void unlinkAndDeleteElement(Element const *p)
std::false_type is_unordered
void deleteElement(Element const *p)
auto erase(K const &k) -> size_type
std::allocator_traits< Allocator >::template rebind_alloc< Element > ElementAllocator
const_reverse_iterator crend() const
clock_type::time_point time_point
auto insert(value_type &&value) -> std::enable_if_t<!MaybeMulti &&!MaybeMap, std::pair< iterator, bool > >
AgedOrderedContainer(std::initializer_list< value_type > init, clock_type &clock)
auto emplace(Args &&... args) -> std::enable_if_t< MaybeMulti, iterator >
std::conditional< IsMap, T, void * >::type const & at(K const &k) const
std::enable_if_t< MaybeMulti, iterator > emplaceHint(const_iterator, Args &&... args)
const_iterator iteratorTo(value_type const &value) const
beast::detail::AgedContainerIterator< false, Iterator > erase(beast::detail::AgedContainerIterator< IsConst, Iterator > first, beast::detail::AgedContainerIterator< IsConst, Iterator > last)
AgedOrderedContainer(AgedOrderedContainer &&other)
AgedOrderedContainer(InputIt first, InputIt last, clock_type &clock, Allocator const &alloc)
const_iterator upperBound(K const &k) const
AgedOrderedContainer(clock_type &clock)
const_iterator find(K const &k) const
const_reverse_iterator crbegin() const
const_iterator cend() const
std::enable_if_t< MaybeMulti, iterator > insert(const_iterator, value_type const &value)
void insert(std::initializer_list< value_type > init)
AgedOrderedContainer(std::initializer_list< value_type > init, clock_type &clock, Allocator const &alloc)
AgedOrderedContainer(AgedOrderedContainer &&other, Allocator const &alloc)
EmptyBaseOptimization()=default
T forward_as_tuple(T... args)
T lexicographical_compare(T... args)
int compare(SemanticVersion const &lhs, SemanticVersion const &rhs)
Compare two SemanticVersions against each other.
std::enable_if_t< IsAgedContainer< AgedContainer >::value, std::size_t > expire(AgedContainer &c, std::chrono::duration< Rep, Period > const &age)
Expire aged container items past the specified age.
void swap(beast::detail::AgedOrderedContainer< IsMulti, IsMap, Key, T, Clock, Compare, Allocator > &lhs, beast::detail::AgedOrderedContainer< IsMulti, IsMap, Key, T, Clock, Compare, Allocator > &rhs) noexcept
IsAgedContainer()=default
AgedOrderedContainer::value_type value_type
AgedOrderedContainer::time_point time_point
Element(time_point const &when, value_type &&value)
Element(time_point const &when, value_type const &value)
Element(time_point const &when, Args &&... args)
IsBoostReverseIterator()=default
IsBoostReverseIterator()=default