24 struct HashWriteFunction {
29 template<concepts::IntegralOrEnum T>
30 constexpr void operator()(concepts::Hasher
auto& hasher, T value)
const {
32 hasher.write(bytes.span());
35 template<concepts::Hasher Hasher,
typename T>
36 requires(concepts::TagInvocable<HashWriteFunction, Hasher&, T const&>)
37 constexpr void operator()(Hasher& hasher, T
const&
value)
const {
43constexpr inline auto hash_write = detail::HashWriteFunction {};
58namespace di::container::detail {
63 for (
auto const& element : value) {
69 template<
typename Idx>
70 struct HashableTuple {};
72 template<
usize... indices>
73 struct HashableTuple<meta::ListV<indices...>> {
74 template<concepts::Tuple T>
75 constexpr auto operator()(InPlaceType<T>)
const ->
bool {
81template<concepts::TupleLike T, concepts::Hasher H>
82requires(!HashableContainer<T> &&
83 detail::HashableTuple<meta::MakeIndexSequence<meta::TupleSize<T>>>()(
in_place_type<T>))
86 [&](concepts::Hashable
auto const& x) {
Definition forward_container.h:8
Definition hash_write.h:48
Definition any_storable.h:9
constexpr auto data
Definition data.h:51
constexpr auto hash_write
Definition hash_write.h:43
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto value
Definition value.h:34
std::byte byte
Definition byte.h:64
size_t usize
Definition integers.h:33
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
Array(T, U...) -> Array< T, 1+sizeof...(U)>
Span(Iter, SentOrSize) -> Span< meta::RemoveReference< meta::IteratorReference< Iter > > >
constexpr void tuple_for_each(F &&function, Tup &&tuple)
Definition tuple_for_each.h:22
Definition any_storable.h:9
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto in_place_type
Definition in_place_type.h:12
Definition default_hasher.h:7