\hypertarget{structkblib_1_1_f_n_v__hash_3_01_t_00_01_hash_int_00_01void__if__t_3_01not_01is__contiguous__v_3e66815ec611e56a0a8c73036102d6bbb}{}\doxysection{kblib\+::FNV\+\_\+hash\texorpdfstring{$<$}{<} T, Hash\+Int, void\+\_\+if\+\_\+t\texorpdfstring{$<$}{<} not is\+\_\+contiguous\+\_\+v\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>} and not std\+::is\+\_\+integral\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>}\+::value and not std\+::is\+\_\+pointer\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>}\+::value and is\+\_\+trivially\+\_\+hashable\+\_\+v\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>} Struct Template Reference} \label{structkblib_1_1_f_n_v__hash_3_01_t_00_01_hash_int_00_01void__if__t_3_01not_01is__contiguous__v_3e66815ec611e56a0a8c73036102d6bbb}\index{kblib::FNV\_hash$<$ T, HashInt, void\_if\_t$<$ not is\_contiguous\_v$<$ T $>$ and not std::is\_integral$<$ T $>$::value and not std::is\_pointer$<$ T $>$::value and is\_trivially\_hashable\_v$<$ T $>$ $>$ $>$@{kblib::FNV\_hash$<$ T, HashInt, void\_if\_t$<$ not is\_contiguous\_v$<$ T $>$ and not std::is\_integral$<$ T $>$::value and not std::is\_pointer$<$ T $>$::value and is\_trivially\_hashable\_v$<$ T $>$ $>$ $>$}} Hasher for any non-\/integral trivially copyable type that has no padding. {\ttfamily \#include $<$kblib/hash.\+h$>$} \doxysubsection*{Public Member Functions} \begin{DoxyCompactItemize} \item auto \mbox{\hyperlink{structkblib_1_1_f_n_v__hash_3_01_t_00_01_hash_int_00_01void__if__t_3_01not_01is__contiguous__v_3e66815ec611e56a0a8c73036102d6bbb_ae41563e80e9658d3088b34978780eaab}{operator()}} (T key, Hash\+Int offset=\mbox{\hyperlink{structkblib_1_1fnv_1_1fnv__offset}{fnv\+::fnv\+\_\+offset}}$<$ Hash\+Int $>$\+::value) const noexcept -\/$>$ Hash\+Int \end{DoxyCompactItemize} \doxysubsection{Detailed Description} \subsubsection*{template$<$typename T, typename Hash\+Int$>$\newline struct kblib\+::\+FNV\+\_\+hash$<$ T, Hash\+Int, void\+\_\+if\+\_\+t$<$ not is\+\_\+contiguous\+\_\+v$<$ T $>$ and not std\+::is\+\_\+integral$<$ T $>$\+::value and not std\+::is\+\_\+pointer$<$ T $>$\+::value and is\+\_\+trivially\+\_\+hashable\+\_\+v$<$ T $>$ $>$ $>$} Hasher for any non-\/integral trivially copyable type that has no padding. \begin{DoxyNote}{Note} Unfortunately, this specialization cannot be constexpr until C++20 brings std\+::bit\+\_\+cast. \end{DoxyNote} Definition at line \mbox{\hyperlink{hash_8h_source_l00562}{562}} of file \mbox{\hyperlink{hash_8h_source}{hash.\+h}}. \doxysubsection{Member Function Documentation} \mbox{\Hypertarget{structkblib_1_1_f_n_v__hash_3_01_t_00_01_hash_int_00_01void__if__t_3_01not_01is__contiguous__v_3e66815ec611e56a0a8c73036102d6bbb_ae41563e80e9658d3088b34978780eaab}\label{structkblib_1_1_f_n_v__hash_3_01_t_00_01_hash_int_00_01void__if__t_3_01not_01is__contiguous__v_3e66815ec611e56a0a8c73036102d6bbb_ae41563e80e9658d3088b34978780eaab}} \index{kblib::FNV\_hash$<$ T, HashInt, void\_if\_t$<$ not is\_contiguous\_v$<$ T $>$ and not std::is\_integral$<$ T $>$::value and not std::is\_pointer$<$ T $>$::value and is\_trivially\_hashable\_v$<$ T $>$ $>$ $>$@{kblib::FNV\_hash$<$ T, HashInt, void\_if\_t$<$ not is\_contiguous\_v$<$ T $>$ and not std::is\_integral$<$ T $>$::value and not std::is\_pointer$<$ T $>$::value and is\_trivially\_hashable\_v$<$ T $>$ $>$ $>$}!operator()@{operator()}} \index{operator()@{operator()}!kblib::FNV\_hash$<$ T, HashInt, void\_if\_t$<$ not is\_contiguous\_v$<$ T $>$ and not std::is\_integral$<$ T $>$::value and not std::is\_pointer$<$ T $>$::value and is\_trivially\_hashable\_v$<$ T $>$ $>$ $>$@{kblib::FNV\_hash$<$ T, HashInt, void\_if\_t$<$ not is\_contiguous\_v$<$ T $>$ and not std::is\_integral$<$ T $>$::value and not std::is\_pointer$<$ T $>$::value and is\_trivially\_hashable\_v$<$ T $>$ $>$ $>$}} \doxysubsubsection{\texorpdfstring{operator()()}{operator()()}} {\footnotesize\ttfamily template$<$typename T , typename Hash\+Int $>$ \\ auto \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib\+::\+FNV\+\_\+hash}}$<$ T, Hash\+Int, \mbox{\hyperlink{namespacekblib_ab3cc24416f0b9a6504e1c6a437ed6230}{void\+\_\+if\+\_\+t}}$<$ not \mbox{\hyperlink{namespacekblib_acec974f6a75e6884147ef326bbd78d35}{is\+\_\+contiguous\+\_\+v}}$<$ T $>$ and not std\+::is\+\_\+integral$<$ T $>$\+::value and not std\+::is\+\_\+pointer$<$ T $>$\+::value and \mbox{\hyperlink{namespacekblib_a16db4408c7a9d67eb38141aee1588ebd}{is\+\_\+trivially\+\_\+hashable\+\_\+v}}$<$ T $>$ $>$ $>$\+::operator() (\begin{DoxyParamCaption}\item[{T}]{key, }\item[{Hash\+Int}]{offset = {\ttfamily \mbox{\hyperlink{structkblib_1_1fnv_1_1fnv__offset}{fnv\+::fnv\+\_\+offset}}$<$HashInt$>$\+:\+:value} }\end{DoxyParamCaption}) const -\/$>$ Hash\+Int \hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [noexcept]}} Definition at line \mbox{\hyperlink{hash_8h_source_l00567}{567}} of file \mbox{\hyperlink{hash_8h_source}{hash.\+h}}. The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} \item kblib/\mbox{\hyperlink{hash_8h}{hash.\+h}}\end{DoxyCompactItemize}