\hypertarget{namespacekblib_1_1detail__sort}{}\doxysection{kblib\+::detail\+\_\+sort Namespace Reference}
\label{namespacekblib_1_1detail__sort}\index{kblib::detail\_sort@{kblib::detail\_sort}}
\doxysubsection*{Classes}
\begin{DoxyCompactItemize}
\item 
struct \mbox{\hyperlink{structkblib_1_1detail__sort_1_1sort__transform__impl}{sort\+\_\+transform\+\_\+impl}}
\begin{DoxyCompactList}\small\item\em Sort data after applying an arbitrary transformation to it. The primary template handles the general case of arbitrary transformation and arbitrary compare predicate. \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{structkblib_1_1detail__sort_1_1sort__transform__impl_3_01_random_access_it_00_01_unary_operation935542bc395b86fd33cf9be63ad3de74}{sort\+\_\+transform\+\_\+impl$<$ Random\+Access\+It, Unary\+Operation, Binary\+Predicate, Sort\+Key, small\+\_\+size, true, false, false, false $>$}}
\begin{DoxyCompactList}\small\item\em Sort implementation for pointer to member object of non-\/fundamental type, so sort keys are constant time to extract (this is most similar to a general \mbox{\hyperlink{namespacekblib_1_1detail__sort_a3b873e1b1c2c3a4865638d2c904c4c1d}{sort()}}) \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{structkblib_1_1detail__sort_1_1sort__transform__impl_3_01_random_access_it_00_01_unary_operation51fbb4ca17e940976b57d3794660a6d8}{sort\+\_\+transform\+\_\+impl$<$ Random\+Access\+It, Unary\+Operation, std\+::greater$<$ Less\+T $>$, Sort\+Key, small\+\_\+size, M, false, true, false $>$}}
\begin{DoxyCompactList}\small\item\em Sort implementation for key of radix sortable type type with reverse sorting. \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{structkblib_1_1detail__sort_1_1sort__transform__impl_3_01_random_access_it_00_01_unary_operation3c2c850b5ad1e4acd66097d89e51c4f1}{sort\+\_\+transform\+\_\+impl$<$ Random\+Access\+It, Unary\+Operation, std\+::greater$<$ Less\+T $>$, Sort\+Key, small\+\_\+size, true, true, false, false $>$}}
\begin{DoxyCompactList}\small\item\em Sort implementation for pointer to member object of fundamental non-\/integral type with reverse sorting, so sort keys are constant time to extract and compare. \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{structkblib_1_1detail__sort_1_1sort__transform__impl_3_01_random_access_it_00_01_unary_operationbcac2feda0fade87a36510b7d31d2576}{sort\+\_\+transform\+\_\+impl$<$ Random\+Access\+It, Unary\+Operation, std\+::greater$<$ Less\+T $>$, Sort\+Key, small\+\_\+size, true, true, true, true $>$}}
\begin{DoxyCompactList}\small\item\em Sort implementation for pointer to member object of integral type with reverse sorting, so we can do radix sort. \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{structkblib_1_1detail__sort_1_1sort__transform__impl_3_01_random_access_it_00_01_unary_operationfec06b35b16d095881d1da3ea9777678}{sort\+\_\+transform\+\_\+impl$<$ Random\+Access\+It, Unary\+Operation, std\+::less$<$ Less\+T $>$, Sort\+Key, small\+\_\+size, M, false, true, false $>$}}
\begin{DoxyCompactList}\small\item\em Sort implementation for key of radix sortable type type with default sorting. \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{structkblib_1_1detail__sort_1_1sort__transform__impl_3_01_random_access_it_00_01_unary_operationf1e9e425aa5b0d07fb4c879cfd659585}{sort\+\_\+transform\+\_\+impl$<$ Random\+Access\+It, Unary\+Operation, std\+::less$<$ Less\+T $>$, Sort\+Key, small\+\_\+size, true, true, false, false $>$}}
\begin{DoxyCompactList}\small\item\em Sort implementation for pointer to member object of fundamental non-\/integral type with default sorting, so sort keys are constant time to extract and compare. \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{structkblib_1_1detail__sort_1_1sort__transform__impl_3_01_random_access_it_00_01_unary_operation03a4b8b2612786c18e671d7b72685405}{sort\+\_\+transform\+\_\+impl$<$ Random\+Access\+It, Unary\+Operation, std\+::less$<$ Less\+T $>$, Sort\+Key, small\+\_\+size, true, true, true, true $>$}}
\begin{DoxyCompactList}\small\item\em Sort implementation for pointer to member object of integral type with default sorting, so we can do radix sort. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum class \mbox{\hyperlink{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07}{sort\+\_\+direction}} \{ \mbox{\hyperlink{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07a9c9ab624360885fcf93b7643c93b6748}{ascending}}
, \mbox{\hyperlink{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07ab19e9805fd7727c52ca04dfa3d24a2e5}{descending}}
 \}
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
{\footnotesize template$<$typename Random\+Access\+It , typename Compare $>$ }\\constexpr auto \mbox{\hyperlink{namespacekblib_1_1detail__sort_a3b873e1b1c2c3a4865638d2c904c4c1d}{sort}} (Random\+Access\+It, const Random\+Access\+It, Compare) -\/$>$ void
\item 
{\footnotesize template$<$typename Random\+Access\+It , typename Compare $>$ }\\constexpr auto \mbox{\hyperlink{namespacekblib_1_1detail__sort_af5a02e7ee5bdc9865f19946e829dff5e}{stable\+\_\+sort}} (Random\+Access\+It, const Random\+Access\+It, Compare) -\/$>$ void
\item 
{\footnotesize template$<$typename Random\+Access\+It , typename Compare , std\+::size\+\_\+t small\+\_\+size$>$ }\\constexpr auto \mbox{\hyperlink{namespacekblib_1_1detail__sort_a00851154e70e649ffb1972b0cb461199}{merge\+\_\+sort}} (Random\+Access\+It begin, const Random\+Access\+It end, Compare cmp) -\/$>$ void
\item 
{\footnotesize template$<$typename Random\+Access\+It , typename Compare , std\+::size\+\_\+t small\+\_\+size$>$ }\\constexpr auto \mbox{\hyperlink{namespacekblib_1_1detail__sort_a280b17f79cf4bcc871b9eb23de612dba}{heap\+\_\+sort}} (Random\+Access\+It begin, const Random\+Access\+It end, Compare cmp) -\/$>$ void
\item 
{\footnotesize template$<$\mbox{\hyperlink{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07}{sort\+\_\+direction}} dir, typename Random\+Access\+It , typename Projection $>$ }\\constexpr auto \mbox{\hyperlink{namespacekblib_1_1detail__sort_a0f3e1fc1f2ed59538aa52f01165b5c81}{radix\+\_\+sort\+\_\+i}} (Random\+Access\+It begin, const Random\+Access\+It end, Projection proj) -\/$>$ void
\item 
{\footnotesize template$<$\mbox{\hyperlink{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07}{sort\+\_\+direction}} dir, typename Random\+Access\+It , typename Projection $>$ }\\constexpr auto \mbox{\hyperlink{namespacekblib_1_1detail__sort_a9c74bbb469dc7a2355b5d62913e9dfd9}{radix\+\_\+sort\+\_\+s}} (Random\+Access\+It begin, const Random\+Access\+It end, Projection proj) -\/$>$ void
\item 
{\footnotesize template$<$std\+::size\+\_\+t size$>$ }\\constexpr auto \mbox{\hyperlink{namespacekblib_1_1detail__sort_a2ff494c126d5f8be25c0602e00b5ff2d}{make\+\_\+array\+\_\+for}} (std\+::false\+\_\+type) -\/$>$ \mbox{\hyperlink{structkblib_1_1containing__ptr}{kblib\+::containing\+\_\+ptr}}$<$ std\+::array$<$ std\+::size\+\_\+t, \mbox{\hyperlink{namespacekblib_a0e74aee94f446396c8f8b7bf34b16acb}{size}} $>$ $>$
\item 
{\footnotesize template$<$std\+::size\+\_\+t size$>$ }\\auto \mbox{\hyperlink{namespacekblib_1_1detail__sort_ad77575019d9733392aebfdbb371d7323}{make\+\_\+array\+\_\+for}} (std\+::true\+\_\+type) -\/$>$ \mbox{\hyperlink{classkblib_1_1heap__value}{kblib\+::heap\+\_\+value}}$<$ std\+::array$<$ std\+::size\+\_\+t, \mbox{\hyperlink{namespacekblib_a0e74aee94f446396c8f8b7bf34b16acb}{size}}+1 $>$ $>$
\item 
{\footnotesize template$<$\mbox{\hyperlink{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07}{sort\+\_\+direction}} dir, typename Random\+Access\+It1 , typename Random\+Access\+It2 , typename Projection $>$ }\\constexpr auto \mbox{\hyperlink{namespacekblib_1_1detail__sort_a0ae455fa600a4399c16b1159b04ec5c9}{counting\+\_\+sort}} (Random\+Access\+It1 begin, const Random\+Access\+It1 end, Random\+Access\+It2 d\+\_\+begin, Projection proj) -\/$>$ void
\end{DoxyCompactItemize}


\doxysubsection{Enumeration Type Documentation}
\mbox{\Hypertarget{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07}\label{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07}} 
\index{kblib::detail\_sort@{kblib::detail\_sort}!sort\_direction@{sort\_direction}}
\index{sort\_direction@{sort\_direction}!kblib::detail\_sort@{kblib::detail\_sort}}
\doxysubsubsection{\texorpdfstring{sort\_direction}{sort\_direction}}
{\footnotesize\ttfamily enum class \mbox{\hyperlink{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07}{kblib\+::detail\+\_\+sort\+::sort\+\_\+direction}}\hspace{0.3cm}{\ttfamily [strong]}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{ascending@{ascending}!kblib::detail\_sort@{kblib::detail\_sort}}\index{kblib::detail\_sort@{kblib::detail\_sort}!ascending@{ascending}}}\mbox{\Hypertarget{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07a9c9ab624360885fcf93b7643c93b6748}\label{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07a9c9ab624360885fcf93b7643c93b6748}} 
ascending&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{descending@{descending}!kblib::detail\_sort@{kblib::detail\_sort}}\index{kblib::detail\_sort@{kblib::detail\_sort}!descending@{descending}}}\mbox{\Hypertarget{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07ab19e9805fd7727c52ca04dfa3d24a2e5}\label{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07ab19e9805fd7727c52ca04dfa3d24a2e5}} 
descending&\\
\hline

\end{DoxyEnumFields}


Definition at line \mbox{\hyperlink{sort_8h_source_l00394}{394}} of file \mbox{\hyperlink{sort_8h_source}{sort.\+h}}.



\doxysubsection{Function Documentation}
\mbox{\Hypertarget{namespacekblib_1_1detail__sort_a0ae455fa600a4399c16b1159b04ec5c9}\label{namespacekblib_1_1detail__sort_a0ae455fa600a4399c16b1159b04ec5c9}} 
\index{kblib::detail\_sort@{kblib::detail\_sort}!counting\_sort@{counting\_sort}}
\index{counting\_sort@{counting\_sort}!kblib::detail\_sort@{kblib::detail\_sort}}
\doxysubsubsection{\texorpdfstring{counting\_sort()}{counting\_sort()}}
{\footnotesize\ttfamily template$<$\mbox{\hyperlink{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07}{sort\+\_\+direction}} dir, typename Random\+Access\+It1 , typename Random\+Access\+It2 , typename Projection $>$ \\
constexpr auto kblib\+::detail\+\_\+sort\+::counting\+\_\+sort (\begin{DoxyParamCaption}\item[{Random\+Access\+It1}]{begin,  }\item[{const Random\+Access\+It1}]{end,  }\item[{Random\+Access\+It2}]{d\+\_\+begin,  }\item[{Projection}]{proj }\end{DoxyParamCaption}) -\/$>$ void \hspace{0.3cm}{\ttfamily [constexpr]}}



Definition at line \mbox{\hyperlink{sort_8h_source_l00437}{437}} of file \mbox{\hyperlink{sort_8h_source}{sort.\+h}}.

\mbox{\Hypertarget{namespacekblib_1_1detail__sort_a280b17f79cf4bcc871b9eb23de612dba}\label{namespacekblib_1_1detail__sort_a280b17f79cf4bcc871b9eb23de612dba}} 
\index{kblib::detail\_sort@{kblib::detail\_sort}!heap\_sort@{heap\_sort}}
\index{heap\_sort@{heap\_sort}!kblib::detail\_sort@{kblib::detail\_sort}}
\doxysubsubsection{\texorpdfstring{heap\_sort()}{heap\_sort()}}
{\footnotesize\ttfamily template$<$typename Random\+Access\+It , typename Compare , std\+::size\+\_\+t small\+\_\+size$>$ \\
constexpr auto kblib\+::detail\+\_\+sort\+::heap\+\_\+sort (\begin{DoxyParamCaption}\item[{Random\+Access\+It}]{begin,  }\item[{const Random\+Access\+It}]{end,  }\item[{Compare}]{cmp }\end{DoxyParamCaption}) -\/$>$ void \hspace{0.3cm}{\ttfamily [constexpr]}}



Definition at line \mbox{\hyperlink{sort_8h_source_l00385}{385}} of file \mbox{\hyperlink{sort_8h_source}{sort.\+h}}.

\mbox{\Hypertarget{namespacekblib_1_1detail__sort_a2ff494c126d5f8be25c0602e00b5ff2d}\label{namespacekblib_1_1detail__sort_a2ff494c126d5f8be25c0602e00b5ff2d}} 
\index{kblib::detail\_sort@{kblib::detail\_sort}!make\_array\_for@{make\_array\_for}}
\index{make\_array\_for@{make\_array\_for}!kblib::detail\_sort@{kblib::detail\_sort}}
\doxysubsubsection{\texorpdfstring{make\_array\_for()}{make\_array\_for()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily template$<$std\+::size\+\_\+t size$>$ \\
constexpr auto kblib\+::detail\+\_\+sort\+::make\+\_\+array\+\_\+for (\begin{DoxyParamCaption}\item[{std\+::false\+\_\+type}]{ }\end{DoxyParamCaption}) -\/$>$ \mbox{\hyperlink{structkblib_1_1containing__ptr}{kblib\+::containing\+\_\+ptr}}$<$std\+::array$<$std\+::size\+\_\+t, \mbox{\hyperlink{namespacekblib_a0e74aee94f446396c8f8b7bf34b16acb}{size}}$>$$>$ \hspace{0.3cm}{\ttfamily [constexpr]}}



Definition at line \mbox{\hyperlink{sort_8h_source_l00425}{425}} of file \mbox{\hyperlink{sort_8h_source}{sort.\+h}}.

\mbox{\Hypertarget{namespacekblib_1_1detail__sort_ad77575019d9733392aebfdbb371d7323}\label{namespacekblib_1_1detail__sort_ad77575019d9733392aebfdbb371d7323}} 
\index{kblib::detail\_sort@{kblib::detail\_sort}!make\_array\_for@{make\_array\_for}}
\index{make\_array\_for@{make\_array\_for}!kblib::detail\_sort@{kblib::detail\_sort}}
\doxysubsubsection{\texorpdfstring{make\_array\_for()}{make\_array\_for()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily template$<$std\+::size\+\_\+t size$>$ \\
auto kblib\+::detail\+\_\+sort\+::make\+\_\+array\+\_\+for (\begin{DoxyParamCaption}\item[{std\+::true\+\_\+type}]{ }\end{DoxyParamCaption}) -\/$>$ \mbox{\hyperlink{classkblib_1_1heap__value}{kblib\+::heap\+\_\+value}}$<$std\+::array$<$std\+::size\+\_\+t, \mbox{\hyperlink{namespacekblib_a0e74aee94f446396c8f8b7bf34b16acb}{size}} + 1$>$$>$ }



Definition at line \mbox{\hyperlink{sort_8h_source_l00430}{430}} of file \mbox{\hyperlink{sort_8h_source}{sort.\+h}}.

\mbox{\Hypertarget{namespacekblib_1_1detail__sort_a00851154e70e649ffb1972b0cb461199}\label{namespacekblib_1_1detail__sort_a00851154e70e649ffb1972b0cb461199}} 
\index{kblib::detail\_sort@{kblib::detail\_sort}!merge\_sort@{merge\_sort}}
\index{merge\_sort@{merge\_sort}!kblib::detail\_sort@{kblib::detail\_sort}}
\doxysubsubsection{\texorpdfstring{merge\_sort()}{merge\_sort()}}
{\footnotesize\ttfamily template$<$typename Random\+Access\+It , typename Compare , std\+::size\+\_\+t small\+\_\+size$>$ \\
constexpr auto kblib\+::detail\+\_\+sort\+::merge\+\_\+sort (\begin{DoxyParamCaption}\item[{Random\+Access\+It}]{begin,  }\item[{const Random\+Access\+It}]{end,  }\item[{Compare}]{cmp }\end{DoxyParamCaption}) -\/$>$ void \hspace{0.3cm}{\ttfamily [constexpr]}}



Definition at line \mbox{\hyperlink{sort_8h_source_l00370}{370}} of file \mbox{\hyperlink{sort_8h_source}{sort.\+h}}.

\mbox{\Hypertarget{namespacekblib_1_1detail__sort_a0f3e1fc1f2ed59538aa52f01165b5c81}\label{namespacekblib_1_1detail__sort_a0f3e1fc1f2ed59538aa52f01165b5c81}} 
\index{kblib::detail\_sort@{kblib::detail\_sort}!radix\_sort\_i@{radix\_sort\_i}}
\index{radix\_sort\_i@{radix\_sort\_i}!kblib::detail\_sort@{kblib::detail\_sort}}
\doxysubsubsection{\texorpdfstring{radix\_sort\_i()}{radix\_sort\_i()}}
{\footnotesize\ttfamily template$<$\mbox{\hyperlink{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07}{sort\+\_\+direction}} dir, typename Random\+Access\+It , typename Projection $>$ \\
constexpr auto kblib\+::detail\+\_\+sort\+::radix\+\_\+sort\+\_\+i (\begin{DoxyParamCaption}\item[{Random\+Access\+It}]{begin,  }\item[{const Random\+Access\+It}]{end,  }\item[{Projection}]{proj }\end{DoxyParamCaption}) -\/$>$ void \hspace{0.3cm}{\ttfamily [constexpr]}}



Definition at line \mbox{\hyperlink{sort_8h_source_l00397}{397}} of file \mbox{\hyperlink{sort_8h_source}{sort.\+h}}.

\mbox{\Hypertarget{namespacekblib_1_1detail__sort_a9c74bbb469dc7a2355b5d62913e9dfd9}\label{namespacekblib_1_1detail__sort_a9c74bbb469dc7a2355b5d62913e9dfd9}} 
\index{kblib::detail\_sort@{kblib::detail\_sort}!radix\_sort\_s@{radix\_sort\_s}}
\index{radix\_sort\_s@{radix\_sort\_s}!kblib::detail\_sort@{kblib::detail\_sort}}
\doxysubsubsection{\texorpdfstring{radix\_sort\_s()}{radix\_sort\_s()}}
{\footnotesize\ttfamily template$<$\mbox{\hyperlink{namespacekblib_1_1detail__sort_ae4569ffb1f5bfbe2b7792cba89647a07}{sort\+\_\+direction}} dir, typename Random\+Access\+It , typename Projection $>$ \\
constexpr auto kblib\+::detail\+\_\+sort\+::radix\+\_\+sort\+\_\+s (\begin{DoxyParamCaption}\item[{Random\+Access\+It}]{begin,  }\item[{const Random\+Access\+It}]{end,  }\item[{Projection}]{proj }\end{DoxyParamCaption}) -\/$>$ void \hspace{0.3cm}{\ttfamily [constexpr]}}



Definition at line \mbox{\hyperlink{sort_8h_source_l00407}{407}} of file \mbox{\hyperlink{sort_8h_source}{sort.\+h}}.

\mbox{\Hypertarget{namespacekblib_1_1detail__sort_a3b873e1b1c2c3a4865638d2c904c4c1d}\label{namespacekblib_1_1detail__sort_a3b873e1b1c2c3a4865638d2c904c4c1d}} 
\index{kblib::detail\_sort@{kblib::detail\_sort}!sort@{sort}}
\index{sort@{sort}!kblib::detail\_sort@{kblib::detail\_sort}}
\doxysubsubsection{\texorpdfstring{sort()}{sort()}}
{\footnotesize\ttfamily template$<$typename Random\+Access\+It , typename Compare $>$ \\
constexpr auto kblib\+::detail\+\_\+sort\+::sort (\begin{DoxyParamCaption}\item[{Random\+Access\+It}]{,  }\item[{const}]{Random\+Access\+It,  }\item[{Compare}]{ }\end{DoxyParamCaption}) -\/$>$ void \hspace{0.3cm}{\ttfamily [constexpr]}}



Definition at line \mbox{\hyperlink{sort_8h_source_l00364}{364}} of file \mbox{\hyperlink{sort_8h_source}{sort.\+h}}.

\mbox{\Hypertarget{namespacekblib_1_1detail__sort_af5a02e7ee5bdc9865f19946e829dff5e}\label{namespacekblib_1_1detail__sort_af5a02e7ee5bdc9865f19946e829dff5e}} 
\index{kblib::detail\_sort@{kblib::detail\_sort}!stable\_sort@{stable\_sort}}
\index{stable\_sort@{stable\_sort}!kblib::detail\_sort@{kblib::detail\_sort}}
\doxysubsubsection{\texorpdfstring{stable\_sort()}{stable\_sort()}}
{\footnotesize\ttfamily template$<$typename Random\+Access\+It , typename Compare $>$ \\
constexpr auto kblib\+::detail\+\_\+sort\+::stable\+\_\+sort (\begin{DoxyParamCaption}\item[{Random\+Access\+It}]{,  }\item[{const}]{Random\+Access\+It,  }\item[{Compare}]{ }\end{DoxyParamCaption}) -\/$>$ void \hspace{0.3cm}{\ttfamily [constexpr]}}



Definition at line \mbox{\hyperlink{sort_8h_source_l00366}{366}} of file \mbox{\hyperlink{sort_8h_source}{sort.\+h}}.

