32#ifndef INTRUSIVE_CONTAINERS_H
33#define INTRUSIVE_CONTAINERS_H
38#include <unordered_map>
44template <
typename Value, auto KeyExtract,
typename Hash = kblib::FNV_hash<>,
45 typename KeyEqual = std::equal_to<>>
76 std::deque<Value> storage;
81 typename Value,
auto KeyExtract1,
auto KeyExtract2,
83 typename KeyEqual1 = std::equal_to<>,
typename KeyEqual2 = std::equal_to<>>
98 std::deque<Value> storage;
99 std::unordered_map<key_type_a, Value*, Hash1, KeyEqual1> map_a;
100 std::unordered_map<key_type_b, Value*, Hash2, KeyEqual2> map_b;
remove_cvref_t< std::invoke_result_t< decltype(KeyExtract2), Value & > > key_type_b
remove_cvref_t< std::invoke_result_t< decltype(KeyExtract1), Value & > > key_type_a
std::ptrdiff_t difference_type
void const_local_iterator
const value_type & const_reference
remove_cvref_t< std::invoke_result_t< decltype(KeyExtract), Value & > > key_type
const value_type * const_pointer
Provides generic facilities for hashing data, and aliases for standard unordered containers using the...
typename invoke_result< F, ArgTypes... >::type invoke_result_t
typename std::remove_reference< typename std::remove_cv< T >::type >::type remove_cvref_t
The primary template has to exist, but not be constructible, in order to be compatible with std::hash...
Contains some type traits not in the standard library that are useful in the implementation of kblib.