\hypertarget{random_8h_source}{}\doxysection{random.\+h}
\label{random_8h_source}\index{kblib/random.h@{kblib/random.h}}
\mbox{\hyperlink{random_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00001}00001 \textcolor{comment}{/* *****************************************************************************}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00002}00002 \textcolor{comment}{ * kblib is a general utility library for C++14 and C++17, intended to provide}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00003}00003 \textcolor{comment}{ * performant high-\/level abstractions and more expressive ways to do simple}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00004}00004 \textcolor{comment}{ * things.}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00005}00005 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00006}00006 \textcolor{comment}{ * Copyright (c) 2021 killerbee}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00007}00007 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00008}00008 \textcolor{comment}{ * This program is free software: you can redistribute it and/or modify}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00009}00009 \textcolor{comment}{ * it under the terms of the GNU General Public License as published by}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00010}00010 \textcolor{comment}{ * the Free Software Foundation, either version 3 of the License, or}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00011}00011 \textcolor{comment}{ * (at your option) any later version.}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00012}00012 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00013}00013 \textcolor{comment}{ * This program is distributed in the hope that it will be useful,}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00014}00014 \textcolor{comment}{ * but WITHOUT ANY WARRANTY; without even the implied warranty of}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00015}00015 \textcolor{comment}{ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00016}00016 \textcolor{comment}{ * GNU General Public License for more details.}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00017}00017 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00018}00018 \textcolor{comment}{ * You should have received a copy of the GNU General Public License}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00019}00019 \textcolor{comment}{ * along with this program.  If not, see <https://www.gnu.org/licenses/>.}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00020}00020 \textcolor{comment}{ * ****************************************************************************/}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00021}00021 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00032}00032 \textcolor{preprocessor}{\#ifndef RANDOM\_H}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00033}00033 \textcolor{preprocessor}{\#define RANDOM\_H}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00034}00034 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00035}00035 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{algorithm_8h}{algorithm.h}}"{}}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00036}00036 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{iterators_8h}{iterators.h}}"{}}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00037}00037 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{memory_8h}{memory.h}}"{}}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00038}00038 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{simple_8h}{simple.h}}"{}}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00039}00039 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{stats_8h}{stats.h}}"{}}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00040}00040 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{tdecl_8h}{tdecl.h}}"{}}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00041}00041 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00042}00042 \textcolor{preprocessor}{\#include <limits>}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00043}00043 \textcolor{preprocessor}{\#include <random>}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00044}00044 \textcolor{preprocessor}{\#include <vector>}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00045}00045 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00046}00046 \textcolor{preprocessor}{\#if KBLIB\_DEBUG\_SEED\_SEQ}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00047}00047 \textcolor{preprocessor}{\#  include <iostream>}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00048}00048 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00049}00049 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00050}00050 \textcolor{keyword}{namespace }\mbox{\hyperlink{tdecl_8h_a4b5c574c663a392148218cd4410fd7a1}{KBLIB\_NS}} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00051}00051 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00062}00062 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Array, \textcolor{keyword}{typename} RandomGenerator, \textcolor{keyword}{typename} freqtype = \textcolor{keywordtype}{double}>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00063}00063 \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00064}00064     [[deprecated(\textcolor{stringliteral}{"{}Use std::discrete\_distribution instead"{}})]] \textcolor{keyword}{constexpr} \textcolor{keyword}{auto}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00065}\mbox{\hyperlink{namespacekblib_af901ee65b94ee7e3a2537b6ea846ba28}{00065}}     \mbox{\hyperlink{namespacekblib_af901ee65b94ee7e3a2537b6ea846ba28}{chooseCategorical}}(Array\&\& cats, RandomGenerator\& r)}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00066}00066         -\/> \textcolor{keyword}{decltype}(cats.size()) \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00067}00067    std::uniform\_real\_distribution<freqtype> uniform(}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00068}00068        0.0, \mbox{\hyperlink{namespacekblib_abedf2e5c556e6ab3ebb779227172a2ac}{kblib::accumulate}}(cats.begin(), cats.end(), 0.0));}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00069}00069    freqtype choose = uniform(r);}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00070}00070    \textcolor{keywordflow}{for} (\textcolor{keyword}{decltype}(cats.size()) stop = 0; stop != cats.size(); ++stop) \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00071}00071       choose -\/= cats[stop];}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00072}00072       \textcolor{keywordflow}{if} (choose <= 0) \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00073}00073          \textcolor{keywordflow}{return} stop;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00074}00074       \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00075}00075    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00076}00076 \textcolor{preprocessor}{\#ifdef \_\_has\_builtin}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00077}00077 \textcolor{preprocessor}{\#  if \_\_has\_builtin(\_\_builtin\_unreachable)}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00078}00078    \_\_builtin\_unreachable();}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00079}00079 \textcolor{preprocessor}{\#  else}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00080}00080    \textcolor{keywordflow}{return} cats.size() -\/ 1;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00081}00081 \textcolor{preprocessor}{\#  endif}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00082}00082 \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00083}00083    \textcolor{keywordflow}{return} cats.size() -\/ 1;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00084}00084 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00085}00085 \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00086}00086 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00087}\mbox{\hyperlink{classkblib_1_1trivial__seed__seq}{00087}} \textcolor{keyword}{class }\mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \mbox{\hyperlink{classkblib_1_1trivial__seed__seq}{trivial\_seed\_seq}} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00088}00088  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00089}\mbox{\hyperlink{classkblib_1_1trivial__seed__seq_ad6626799dab002bda52a7b1296cd0d26}{00089}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1trivial__seed__seq_ad6626799dab002bda52a7b1296cd0d26}{result\_type}} = std::uint32\_t;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00090}00090 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00091}\mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a188fda99d96587d8715850023da5b3f7}{00091}}    \mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a188fda99d96587d8715850023da5b3f7}{trivial\_seed\_seq}}() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00092}00092    \textcolor{keyword}{template} <\textcolor{keyword}{typename} InputIt>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00093}\mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a437b85488549778dc1939d8f7d2de595}{00093}}    \mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a437b85488549778dc1939d8f7d2de595}{trivial\_seed\_seq}}(InputIt begin, InputIt end)}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00094}00094        : data(begin, end) \{\}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00095}00095    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00096}\mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a37895430755ee3f1bfe0349215bb63e0}{00096}}    \mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a37895430755ee3f1bfe0349215bb63e0}{trivial\_seed\_seq}}(std::initializer\_list<T> il)}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00097}00097        : \mbox{\hyperlink{classkblib_1_1trivial__seed__seq}{trivial\_seed\_seq}}(il.begin(), il.end()) \{\}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00098}00098    \textcolor{keyword}{template} <\textcolor{keyword}{typename} Source>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00099}\mbox{\hyperlink{classkblib_1_1trivial__seed__seq_ab7fccdfc197d27f51f0bcd7fd6627959}{00099}}    \mbox{\hyperlink{classkblib_1_1trivial__seed__seq_ab7fccdfc197d27f51f0bcd7fd6627959}{trivial\_seed\_seq}}(Source gen, std::size\_t count)}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00100}00100        : data(count) \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00101}00101       \mbox{\hyperlink{namespacekblib_a44de39f5ab34ae1bf5b037eb11155caa}{kblib::generate\_n}}(data.begin(), count, std::ref(gen));}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00102}00102    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00103}00103    \textcolor{comment}{// Work around std::linear\_congruential\_engine without overpulling from the}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00104}00104    \textcolor{comment}{// random source}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00105}00105    \textcolor{keyword}{template} <\textcolor{keyword}{typename} Source>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00106}\mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a1590fe99b115b95fb72468339868b5d5}{00106}}    \mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a1590fe99b115b95fb72468339868b5d5}{trivial\_seed\_seq}}(Source gen, std::size\_t count, std::size\_t discard)}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00107}00107        : data(count + discard, 0x8b8b8b8bu) \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00108}00108       \mbox{\hyperlink{namespacekblib_a44de39f5ab34ae1bf5b037eb11155caa}{kblib::generate\_n}}(data.begin() + \mbox{\hyperlink{namespacekblib_a1909a64960663825ccc4eb98e4637df2}{kblib::to\_signed}}(discard), count,}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00109}00109                         std::ref(gen));}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00110}00110    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00111}00111 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00112}00112    \textcolor{keyword}{template} <\textcolor{keyword}{typename} RandomAccessIt>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00113}\mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a3c42d021bdeeb13932d63057fac8f321}{00113}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a3c42d021bdeeb13932d63057fac8f321}{generate}}(RandomAccessIt begin, RandomAccessIt end) \textcolor{keyword}{const} -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00114}00114       \textcolor{keyword}{auto} o\_size = end -\/ begin;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00115}00115       \textcolor{keyword}{auto} d\_size = \mbox{\hyperlink{namespacekblib_a1909a64960663825ccc4eb98e4637df2}{to\_signed}}(data.size());}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00116}00116 \textcolor{preprocessor}{\#if KBLIB\_DEBUG\_SEED\_SEQ}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00117}00117       \textcolor{keywordflow}{if} (o\_size < d\_size) \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00118}00118          std::clog << \textcolor{stringliteral}{"{}trivial\_seed\_seq: overseeded for output size of "{}}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00119}00119                    << o\_size << \textcolor{stringliteral}{"{}, have data size "{}} << d\_size << \textcolor{charliteral}{'\(\backslash\)n'};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00120}00120       \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00121}00121 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00122}00122       \textcolor{keywordflow}{if} (data.empty()) \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00123}00123          std::fill(begin, end, 0x8b8b8b8bu); \textcolor{comment}{// copied from std::seed\_seq}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00124}00124       \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00125}00125 \textcolor{preprocessor}{\#if KBLIB\_DEBUG\_SEED\_SEQ}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00126}00126          \textcolor{keywordflow}{if} (o\_size > d\_size) \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00127}00127             std::clog << \textcolor{stringliteral}{"{}trivial\_seed\_seq: unexpectedly wrapping, output size "{}}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00128}00128                       << o\_size << \textcolor{stringliteral}{"{} greater than data size "{}} << d\_size << \textcolor{charliteral}{'\(\backslash\)n'};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00129}00129          \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00130}00130 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00131}00131          \textcolor{keyword}{auto} dpos = begin;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00132}00132          \textcolor{keywordflow}{do} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00133}00133             \textcolor{keyword}{auto} blk\_size}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00134}00134                 = saturating\_cast<std::size\_t>(\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{std::min}}(d\_size, o\_size));}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00135}00135             dpos = \mbox{\hyperlink{namespacekblib_a428621582602281bc8643b3e6830e2d4}{std::copy\_n}}(data.begin(), blk\_size, dpos);}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00136}00136          \} \textcolor{keywordflow}{while} ((o\_size -\/= d\_size) > 0);}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00137}00137       \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00138}00138       \textcolor{keywordflow}{return};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00139}00139    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00140}00140 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00141}\mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a5e145511fa6ddf6468dc8252fd57a87c}{00141}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a5e145511fa6ddf6468dc8252fd57a87c}{size}}() const noexcept -\/> \mbox{\hyperlink{namespacestd}{std}}::\textcolor{keywordtype}{size\_t} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00142}00142       \textcolor{keywordflow}{return} data.size();}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00143}00143    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00144}00144 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00145}00145    \textcolor{keyword}{template} <\textcolor{keyword}{typename} OutputIt>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00146}\mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a4d73b6c901dc13a8b23f3b93a0a41cbc}{00146}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1trivial__seed__seq_a4d73b6c901dc13a8b23f3b93a0a41cbc}{param}}(OutputIt dest) \textcolor{keyword}{const} -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00147}00147       \mbox{\hyperlink{namespacekblib_ac912dd210d34963da9bd40a1a6296308}{std::copy}}(data.begin(), data.end(), dest);}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00148}00148       \textcolor{keywordflow}{return};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00149}00149    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00150}00150 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00151}00151  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00152}00152    std::vector<std::uint32\_t> data;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00153}00153 \};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00154}00154 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00155}00155 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00156}\mbox{\hyperlink{structkblib_1_1state__size}{00156}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1state__size}{state\_size}};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00157}00157 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00158}00158 \textcolor{keyword}{template} <\textcolor{keyword}{typename} UIntType, \textcolor{keywordtype}{size\_t} w, \textcolor{keywordtype}{size\_t} n, \textcolor{keywordtype}{size\_t} m, \textcolor{keywordtype}{size\_t} r, UIntType \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00159}00159           \textcolor{keywordtype}{size\_t} u, UIntType d, \textcolor{keywordtype}{size\_t} s, UIntType b, \textcolor{keywordtype}{size\_t} t, UIntType c,}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00160}00160           \textcolor{keywordtype}{size\_t} l, UIntType f>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00161}\mbox{\hyperlink{structkblib_1_1state__size_3_01std_1_1mersenne__twister__engine_3_01_u_int_type_00_01w_00_01n_001aa3a5268fdc817f552102aaa663250b}{00161}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1state__size}{state\_size}}<\mbox{\hyperlink{namespacestd}{std}}::mersenne\_twister\_engine<UIntType, w, n, m, r, a, u, d, s,}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00162}00162                                                b, t, c, l, f>>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00163}00163     : std::integral\_constant<std::size\_t, n*((w + 31) / 32)> \{\};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00164}00164 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00165}00165 \textcolor{keyword}{template} <\textcolor{keyword}{typename} UIntType, UIntType a, UIntType c, UIntType m>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00166}\mbox{\hyperlink{structkblib_1_1state__size_3_01std_1_1linear__congruential__engine_3_01_u_int_type_00_01a_00_01c_00_01m_01_4_01_4}{00166}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1state__size}{state\_size}}<\mbox{\hyperlink{namespacestd}{std}}::linear\_congruential\_engine<UIntType, a, c, m>>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00167}00167     : std::integral\_constant<std::size\_t, (filg2(m) + 31) / 32> \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00168}00168    \textcolor{comment}{// std::linear\_congruential\_engine discards 3 seed words due to hardcoded}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00169}00169    \textcolor{comment}{// hack for std::seed\_seq, so we work around that with this trait}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00170}\mbox{\hyperlink{structkblib_1_1state__size_3_01std_1_1linear__congruential__engine_3_01_u_int_type_00_01a_00_01c_00_01m_01_4_01_4_a74eb4d6c35ff09a243505f7c5e882675}{00170}}    \mbox{\hyperlink{tdecl_8h_ab79256916a9652cd2d1771ae9a38799f}{KBLIB\_CONSTANT\_M}} std::size\_t seed\_discard = 3;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00171}00171 \};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00172}00172 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00173}00173 \textcolor{keyword}{template} <\textcolor{keyword}{typename} UIntType, std::\textcolor{keywordtype}{size\_t} w, std::\textcolor{keywordtype}{size\_t} s, std::\textcolor{keywordtype}{size\_t} r>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00174}\mbox{\hyperlink{structkblib_1_1state__size_3_01std_1_1subtract__with__carry__engine_3_01_u_int_type_00_01w_00_01s_00_01r_01_4_01_4}{00174}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1state__size}{state\_size}}<\mbox{\hyperlink{namespacestd}{std}}::subtract\_with\_carry\_engine<UIntType, w, s, r>>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00175}00175     : std::integral\_constant<std::size\_t, r*((w + 31) / 32)> \{\};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00176}00176 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00177}00177 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Engine, std::\textcolor{keywordtype}{size\_t} P, std::\textcolor{keywordtype}{size\_t} R>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00178}\mbox{\hyperlink{structkblib_1_1state__size_3_01std_1_1discard__block__engine_3_01_engine_00_01_p_00_01_r_01_4_01_4}{00178}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1state__size}{state\_size}}<\mbox{\hyperlink{namespacestd}{std}}::discard\_block\_engine<Engine, P, R>>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00179}00179     : \mbox{\hyperlink{structkblib_1_1state__size}{state\_size}}<Engine> \{\};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00180}00180 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00181}00181 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Engine, std::\textcolor{keywordtype}{size\_t} W, \textcolor{keyword}{typename} UIntType>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00182}\mbox{\hyperlink{structkblib_1_1state__size_3_01std_1_1independent__bits__engine_3_01_engine_00_01_w_00_01_u_int_type_01_4_01_4}{00182}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1state__size}{state\_size}}<\mbox{\hyperlink{namespacestd}{std}}::independent\_bits\_engine<Engine, W, UIntType>>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00183}00183     : \mbox{\hyperlink{structkblib_1_1state__size}{state\_size}}<Engine> \{\};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00184}00184 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00185}00185 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Engine, std::\textcolor{keywordtype}{size\_t} K>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00186}\mbox{\hyperlink{structkblib_1_1state__size_3_01std_1_1shuffle__order__engine_3_01_engine_00_01_k_01_4_01_4}{00186}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1state__size}{state\_size}}<\mbox{\hyperlink{namespacestd}{std}}::shuffle\_order\_engine<Engine, K>> : \mbox{\hyperlink{structkblib_1_1state__size}{state\_size}}<Engine> \{\};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00187}00187 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00188}00188 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00189}\mbox{\hyperlink{namespacekblib_ac35f43d37c7552bbbbe7ff67cff88bc8}{00189}} \textcolor{keyword}{constexpr} std::size\_t \mbox{\hyperlink{namespacekblib_ac35f43d37c7552bbbbe7ff67cff88bc8}{state\_size\_v}} = \mbox{\hyperlink{structkblib_1_1state__size}{state\_size<T>::value}};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00190}00190 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00191}00191 \textcolor{keyword}{static\_assert}(state\_size\_v<std::mt19937> == std::mt19937::state\_size, \textcolor{stringliteral}{"{}"{}});}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00192}00192 \textcolor{keyword}{static\_assert}(state\_size\_v<std::mt19937\_64> == std::mt19937\_64::state\_size * 2,}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00193}00193               \textcolor{stringliteral}{"{}"{}});}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00194}00194 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00195}00195 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00196}\mbox{\hyperlink{namespacekblib_acfb1b995fef3970d7ece0836d0b8b232}{00196}} \textcolor{keyword}{constexpr} std::size\_t \mbox{\hyperlink{namespacekblib_acfb1b995fef3970d7ece0836d0b8b232}{seed\_discard\_v}} = 0;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00197}00197 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00198}00198 \textcolor{keyword}{constexpr} std::size\_t \mbox{\hyperlink{namespacekblib_acfb1b995fef3970d7ece0836d0b8b232}{seed\_discard\_v}}<}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00199}00199     T, \mbox{\hyperlink{namespacekblib_1_1fakestd_a2df414d5a1a1f59c8f33520890755f84}{void\_t}}<\textcolor{keyword}{decltype}(\mbox{\hyperlink{structkblib_1_1state__size}{state\_size<T>::seed\_discard}})>> = \mbox{\hyperlink{structkblib_1_1state__size}{state\_size<T>}}::}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00200}00200     seed\_discard;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00201}00201 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00202}00202 \textcolor{keyword}{static\_assert}(seed\_discard\_v<std::minstd\_rand> == 3,}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00203}00203               \textcolor{stringliteral}{"{}linear\_congruential\_engines discard 3 words of seed data"{}});}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00204}00204 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00205}00205 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Gen, \textcolor{keyword}{typename} Source>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00206}\mbox{\hyperlink{namespacekblib_a57f70c5d0b049085ef57f5e892834e64}{00206}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a5057ba63335ea5487c0370c3ce5bc332}{seeded}}(Source\&\& s) -\/> Gen \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00207}00207    \textcolor{keyword}{auto} seed}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00208}00208        = \mbox{\hyperlink{classkblib_1_1trivial__seed__seq}{trivial\_seed\_seq}}(std::ref(s), state\_size\_v<Gen>, seed\_discard\_v<Gen>);}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00209}00209    \textcolor{keywordflow}{return} Gen\{seed\};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00210}00210 \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00211}00211 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00212}00212 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Gen>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00213}\mbox{\hyperlink{namespacekblib_a5057ba63335ea5487c0370c3ce5bc332}{00213}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a5057ba63335ea5487c0370c3ce5bc332}{seeded}}() -\/> Gen \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00214}00214    \textcolor{keywordflow}{return} seeded<Gen>(std::random\_device\{\});}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00215}00215 \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00216}00216 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00217}00217 \textcolor{keyword}{template} <\textcolor{keyword}{typename} URBG, \textcolor{keyword}{typename} Transform>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00218}\mbox{\hyperlink{classkblib_1_1transform__engine}{00218}} \textcolor{keyword}{class }\mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}} : URBG \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00219}00219  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00220}00220    \textcolor{keyword}{using }E = URBG;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00221}00221    \textcolor{keyword}{static\_assert}(std::is\_default\_constructible<Transform>::value, \textcolor{stringliteral}{"{}"{}});}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00222}00222 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00223}00223    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} engine() -\/> E\& \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00224}00224       \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}E\&\textcolor{keyword}{>}(*this);}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00225}00225    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00226}00226    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} engine() \textcolor{keyword}{const} -\/> \textcolor{keyword}{const} E\& \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00227}00227       \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}\textcolor{keyword}{const }E\&\textcolor{keyword}{>}(*this);}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00228}00228    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00229}00229 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00230}00230  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00231}\mbox{\hyperlink{classkblib_1_1transform__engine_a8a9daa5712ba5e671310be8f840dddc9}{00231}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__engine_a8a9daa5712ba5e671310be8f840dddc9}{result\_type}} = \textcolor{keyword}{typename} Transform::result\_type;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00232}00232 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00233}\mbox{\hyperlink{classkblib_1_1transform__engine_a497b4311abc3be07198285dfdbded543}{00233}}    \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1transform__engine_a497b4311abc3be07198285dfdbded543}{transform\_engine}}() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00234}\mbox{\hyperlink{classkblib_1_1transform__engine_aa9aa72fccf8567ccadc9e2bbb147352f}{00234}}    \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1transform__engine_aa9aa72fccf8567ccadc9e2bbb147352f}{transform\_engine}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}\&) \textcolor{keyword}{noexcept}(}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00235}00235        std::is\_nothrow\_copy\_constructible<URBG>::value)}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00236}00236        = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00237}\mbox{\hyperlink{classkblib_1_1transform__engine_a89ea7112d4e4372afb001dccdace20bd}{00237}}    \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1transform__engine_a89ea7112d4e4372afb001dccdace20bd}{transform\_engine}}(\mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}\&\&) noexcept(}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00238}00238        \mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_move\_constructible<URBG>::value)}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00239}00239        = default;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00240}\mbox{\hyperlink{classkblib_1_1transform__engine_a382c4b8c5b1c9e5f67e3b6f2ef596d1b}{00240}}    constexpr \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}(\mbox{\hyperlink{classkblib_1_1transform__engine_a8a9daa5712ba5e671310be8f840dddc9}{result\_type}} s)}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00241}00241        : E(s) \{\}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00242}00242    \textcolor{keyword}{template} <\textcolor{keyword}{typename} SSeq,}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00243}00243              \textcolor{keyword}{typename}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00244}00244              = \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t<! std::is\_same<SSeq, transform\_engine>::value}}>>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00245}\mbox{\hyperlink{classkblib_1_1transform__engine_a18ba7ccfd77151029c0df8bb0f3d6ab5}{00245}}    \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1transform__engine_a18ba7ccfd77151029c0df8bb0f3d6ab5}{transform\_engine}}(SSeq\& s)}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00246}00246        : E(s) \{\}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00247}00247 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00248}\mbox{\hyperlink{classkblib_1_1transform__engine_a846d1dde875c6ea400cc8290cf925fb9}{00248}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__engine_a846d1dde875c6ea400cc8290cf925fb9}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}\&)}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00249}00249        -\/> \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}\& = \textcolor{keyword}{delete};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00250}\mbox{\hyperlink{classkblib_1_1transform__engine_ae2391cf086e526e28c26a2563ff28b14}{00250}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__engine_ae2391cf086e526e28c26a2563ff28b14}{operator=}}(\mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}\&\&)}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00251}00251        -\/> \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}\& = \textcolor{keyword}{delete};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00252}00252 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00253}\mbox{\hyperlink{classkblib_1_1transform__engine_aedf6dffd85cf7a0107b9fd4730bac8cf}{00253}}    \mbox{\hyperlink{classkblib_1_1transform__engine_aedf6dffd85cf7a0107b9fd4730bac8cf}{\string~transform\_engine}}() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00254}00254 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00255}\mbox{\hyperlink{classkblib_1_1transform__engine_abd9f81f2c03b046369da341948424bea}{00255}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__engine_abd9f81f2c03b046369da341948424bea}{operator()}}() noexcept -\/> \mbox{\hyperlink{classkblib_1_1transform__engine_a8a9daa5712ba5e671310be8f840dddc9}{result\_type}} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00256}00256       \textcolor{keywordflow}{return} Transform\{\}(engine()());}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00257}00257    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00258}00258 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00259}00259    \textcolor{comment}{// using E::seed;}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00260}00260 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00261}00261    \textcolor{keyword}{using }E::discard;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00262}00262 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00263}\mbox{\hyperlink{classkblib_1_1transform__engine_ab79e527a0e8f2b8b6e326ccdf2a4f51b}{00263}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{static} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__engine_ab79e527a0e8f2b8b6e326ccdf2a4f51b}{min}}() noexcept -\/> \mbox{\hyperlink{classkblib_1_1transform__engine_a8a9daa5712ba5e671310be8f840dddc9}{result\_type}} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00264}00264       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{Transform::min}}(\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{URBG::min}}(), \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{URBG::max}}());}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00265}00265    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00266}\mbox{\hyperlink{classkblib_1_1transform__engine_aa5a60db2a62d7d4bcacaf393654a42d7}{00266}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{static} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__engine_aa5a60db2a62d7d4bcacaf393654a42d7}{max}}() noexcept -\/> \mbox{\hyperlink{classkblib_1_1transform__engine_a8a9daa5712ba5e671310be8f840dddc9}{result\_type}} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00267}00267       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{Transform::max}}(\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{URBG::min}}(), \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{URBG::max}}());}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00268}00268    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00269}00269 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00270}\mbox{\hyperlink{classkblib_1_1transform__engine_a5a526eb7118b23c2138a2ce3f466a17c}{00270}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__engine_a5a526eb7118b23c2138a2ce3f466a17c}{operator==}}(}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00271}00271        \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}\& lhs, \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}\& rhs) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00272}00272        -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00273}00273       \textcolor{keywordflow}{return} lhs.engine() == rhs.engine();}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00274}00274    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00275}\mbox{\hyperlink{classkblib_1_1transform__engine_a21f6b629b5aad305684b15b7e75e06d6}{00275}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__engine_a21f6b629b5aad305684b15b7e75e06d6}{operator!=}}(}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00276}00276        \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}\& lhs, \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}\& rhs) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00277}00277        -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00278}00278       \textcolor{keywordflow}{return} ! (lhs == rhs);}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00279}00279    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00280}00280 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00281}\mbox{\hyperlink{classkblib_1_1transform__engine_a736b0108fb0449474689983c511ed305}{00281}}    \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__engine_a736b0108fb0449474689983c511ed305}{operator<<}}(std::ostream\& os, \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}\& \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}})}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00282}00282        -\/> std::ostream\& \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00283}00283       \textcolor{keywordflow}{return} os << \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}.engine();}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00284}00284    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00285}\mbox{\hyperlink{classkblib_1_1transform__engine_a04bb6ea4db077349bebfd3a1c09025ab}{00285}}    \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__engine_a04bb6ea4db077349bebfd3a1c09025ab}{operator>>}}(std::istream\& is, \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}\& \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}})}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00286}00286        -\/> std::istream\& \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00287}00287       \textcolor{keywordflow}{return} is >> \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}.engine();}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00288}00288    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00289}00289 \};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00290}00290 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00291}00291 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Engine, \textcolor{keyword}{typename} Transform>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00292}\mbox{\hyperlink{structkblib_1_1state__size_3_01transform__engine_3_01_engine_00_01_transform_01_4_01_4}{00292}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1state__size}{state\_size}}<\mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine}}<Engine, Transform>> : \mbox{\hyperlink{structkblib_1_1state__size}{state\_size}}<Engine> \{\};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00293}00293 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00294}00294 \textcolor{keyword}{template} <\textcolor{keyword}{typename} UIntType, UIntType shift, UIntType mask = max>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00295}\mbox{\hyperlink{structkblib_1_1shift__mask}{00295}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1shift__mask}{shift\_mask}} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00296}\mbox{\hyperlink{structkblib_1_1shift__mask_a72cb9e7e520a21ab5f4302d8db01fe28}{00296}}    \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1shift__mask_a72cb9e7e520a21ab5f4302d8db01fe28}{result\_type}} = UIntType;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00297}00297 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00298}00298    \textcolor{keyword}{template} <\textcolor{keyword}{typename} UIntInput>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00299}\mbox{\hyperlink{structkblib_1_1shift__mask_a83fa5488e7d41175f1ec0a553e206dae}{00299}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{static} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1shift__mask_a83fa5488e7d41175f1ec0a553e206dae}{g}}(UIntInput in) \textcolor{keyword}{noexcept} -\/> UIntType \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00300}00300       \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}UIntType\textcolor{keyword}{>}(in >> shift) \& mask;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00301}00301    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00302}\mbox{\hyperlink{structkblib_1_1shift__mask_a46f121f18666abb4c912da5d29d21515}{00302}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1shift__mask_a46f121f18666abb4c912da5d29d21515}{operator()}}(UIntType in) \textcolor{keyword}{const} \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00303}00303        -\/> UIntType \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00304}00304       \textcolor{keywordflow}{return} g(in);}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00305}00305    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00306}\mbox{\hyperlink{structkblib_1_1shift__mask_a341ec6764974a538ac2315275353122f}{00306}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{static} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1shift__mask_a341ec6764974a538ac2315275353122f}{min}}(UIntType \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}},}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00307}00307                                              \mbox{\hyperlink{tdecl_8h_a607cffc585fe3bfcb06b63be2948de4a}{KBLIB\_UNUSED}} UIntType \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00308}00308        -\/> UIntType \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00309}00309       \textcolor{keywordflow}{return} g(\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}});}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00310}00310    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00311}\mbox{\hyperlink{structkblib_1_1shift__mask_a278872b6c412b9e64c0ef0be1822586b}{00311}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{static} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1shift__mask_a278872b6c412b9e64c0ef0be1822586b}{max}}(\mbox{\hyperlink{tdecl_8h_a607cffc585fe3bfcb06b63be2948de4a}{KBLIB\_UNUSED}} UIntType \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}},}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00312}00312                                              UIntType \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00313}00313        -\/> UIntType \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00314}00314       \textcolor{keywordflow}{return} g(\mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}});}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00315}00315    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00316}00316 \};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00317}00317 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00318}00318 \textcolor{keyword}{template} <\textcolor{keyword}{typename} UIntType>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00319}\mbox{\hyperlink{namespacekblib_a5a9fb5dbd7082695242567ef3bdfe89c}{00319}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a5a9fb5dbd7082695242567ef3bdfe89c}{ipow2}}(UIntType b) \textcolor{keyword}{noexcept} -\/> UIntType \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00320}00320    \textcolor{keywordflow}{if} (b == std::numeric\_limits<UIntType>::digits) \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00321}00321       \textcolor{keywordflow}{return} 0u;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00322}00322    \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00323}00323       \textcolor{keywordflow}{return} UIntType\{1\} << b;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00324}00324    \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00325}00325 \}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00326}00326 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00327}\mbox{\hyperlink{namespacekblib_1_1lcgs}{00327}} \textcolor{keyword}{inline} \textcolor{keyword}{namespace }lcgs \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00328}00328    \textcolor{comment}{// shortcut alias for common case of m = 2\string^b}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00329}00329    \textcolor{keyword}{template} <\textcolor{keyword}{typename} UIntType, UIntType a, UIntType c, UIntType b>}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00330}\mbox{\hyperlink{namespacekblib_1_1lcgs_af914852ecbe5eada9a34db51c5f5cc1f}{00330}}    \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_1_1lcgs_af914852ecbe5eada9a34db51c5f5cc1f}{lcg\_p2}} = std::linear\_congruential\_engine<UIntType, \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}, c, \mbox{\hyperlink{namespacekblib_a5a9fb5dbd7082695242567ef3bdfe89c}{ipow2}}(b)>;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00331}00331 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00332}\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1common__lcgs}{00332}}    \textcolor{keyword}{inline} \textcolor{keyword}{namespace }common\_lcgs \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00333}\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1common__lcgs_adaa60c018d398bb950f65b173d86e9b6}{00333}}       \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__engine}{rand48}}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00334}00334           = \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine<lcg\_p2<std::uint\_fast64\_t, 25214903917u, 11u, 48u>}},}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00335}00335                              \mbox{\hyperlink{structkblib_1_1shift__mask}{shift\_mask<std::uint\_fast32\_t, 16u>}}>;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00336}\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1common__lcgs_a071dc57b04c71a980f66921ab268e13f}{00336}}       \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__engine}{java\_rand}} = \mbox{\hyperlink{namespacekblib_1_1lcgs_1_1common__lcgs_adaa60c018d398bb950f65b173d86e9b6}{rand48}};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00337}00337 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00338}\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1common__lcgs_ad24856b64aaf15c7ca9850a32d769b0a}{00338}}       \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__engine}{glibc\_rand0}}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00339}00339           = \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine<lcg\_p2<std::uint\_fast32\_t, 1103515245, 12345, 31u>}},}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00340}00340                              \mbox{\hyperlink{structkblib_1_1shift__mask}{shift\_mask}}<std::uint\_fast32\_t, 0, \mbox{\hyperlink{namespacekblib_a5a9fb5dbd7082695242567ef3bdfe89c}{ipow2}}(30) -\/ 1>>;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00341}\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1common__lcgs_ad990fdc385e29a01cf7592c042eed05e}{00341}}       \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__engine}{ansic\_rand}}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00342}00342           = \mbox{\hyperlink{classkblib_1_1transform__engine}{transform\_engine<lcg\_p2<std::uint\_fast32\_t, 1103515245, 12345, 31u>}},}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00343}00343                              \mbox{\hyperlink{structkblib_1_1shift__mask}{shift\_mask}}<std::uint\_fast32\_t, 16, \mbox{\hyperlink{namespacekblib_a5a9fb5dbd7082695242567ef3bdfe89c}{ipow2}}(14) -\/ 1>>;}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00344}00344 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00345}\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1common__lcgs_a3ad3ced72aa1cb9b9a3e4cbd984c3839}{00345}}       \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1common__lcgs_a3ad3ced72aa1cb9b9a3e4cbd984c3839}{knuth\_lcg}} = std::linear\_congruential\_engine<}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00346}00346           uint64\_t, 6364136223846793005U, 1442695040888963407U,}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00347}00347           0U>; \textcolor{comment}{/* Knuth's preferred 64-\/bit LCG */}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00348}00348 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00349}00349    \} \textcolor{comment}{// namespace common\_lcgs}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00350}00350 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00351}\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1best__lcgs}{00351}}    \textcolor{keyword}{inline} \textcolor{keyword}{namespace }best\_lcgs \{}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00352}00352       \textcolor{comment}{// mcg = multiplicative congruential generator}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00353}00353       \textcolor{comment}{// note that for an mcg to work effectively, the seed must be coprime to m}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00354}00354       \textcolor{comment}{// in this case, that means seeds must be odd}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00355}00355 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00356}00356       \textcolor{comment}{// lcgs do not have this restriction.}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00357}00357 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00358}\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1best__lcgs_ab60a688256bee47233387411e5afd7fe}{00358}}       \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1best__lcgs_ab60a688256bee47233387411e5afd7fe}{lcg32}} = \mbox{\hyperlink{namespacekblib_1_1lcgs_af914852ecbe5eada9a34db51c5f5cc1f}{lcg\_p2<std::uint\_fast32\_t, 0xa13fc965u, 1u, 32u>}};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00359}\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1best__lcgs_ab5965534219bd68a26722774684acd60}{00359}}       \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1best__lcgs_ab5965534219bd68a26722774684acd60}{mcg32}} = \mbox{\hyperlink{namespacekblib_1_1lcgs_af914852ecbe5eada9a34db51c5f5cc1f}{lcg\_p2<std::uint\_fast32\_t, 0x93d765ddu, 0u, 32u>}};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00360}00360 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00361}\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1best__lcgs_aa55fbc84bf1ec46b260eb49216346a4e}{00361}}       \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1best__lcgs_aa55fbc84bf1ec46b260eb49216346a4e}{lcg48}} = \mbox{\hyperlink{namespacekblib_1_1lcgs_af914852ecbe5eada9a34db51c5f5cc1f}{lcg\_p2<std::uint\_fast64\_t, 0xb67a49a5466du, 1u, 48u>}};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00362}\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1best__lcgs_a3e2b07fbd94b01abf25d1904fe9992f7}{00362}}       \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1best__lcgs_a3e2b07fbd94b01abf25d1904fe9992f7}{mcg48}} = \mbox{\hyperlink{namespacekblib_1_1lcgs_af914852ecbe5eada9a34db51c5f5cc1f}{lcg\_p2<std::uint\_fast64\_t, 0xbdcdbb079f8du, 0u, 48u>}};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00363}00363 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00364}\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1best__lcgs_afe793993d3d6cba804a0a4bcf6bd5529}{00364}}       \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1best__lcgs_afe793993d3d6cba804a0a4bcf6bd5529}{lcg64}} = \mbox{\hyperlink{namespacekblib_1_1lcgs_af914852ecbe5eada9a34db51c5f5cc1f}{lcg\_p2<std::uint\_fast64\_t, 0xaf251af3b0f025b5u, 1u, 64u>}};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00365}\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1best__lcgs_a52e7c8798d17e80f55ebe006b4ec1e6d}{00365}}       \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_1_1lcgs_1_1best__lcgs_a52e7c8798d17e80f55ebe006b4ec1e6d}{mcg64}} = \mbox{\hyperlink{namespacekblib_1_1lcgs_af914852ecbe5eada9a34db51c5f5cc1f}{lcg\_p2<std::uint\_fast64\_t, 0xf1357aea2e62a9c5u, 0u, 64u>}};}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00366}00366 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00367}00367    \} \textcolor{comment}{// namespace best\_lcgs}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00368}00368 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00369}00369 \} \textcolor{comment}{// namespace lcgs}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00370}00370 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00371}00371 \} \textcolor{comment}{// namespace KBLIB\_NS}}
\DoxyCodeLine{\Hypertarget{random_8h_source_l00372}00372 }
\DoxyCodeLine{\Hypertarget{random_8h_source_l00373}00373 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// RANDOM\_H}}

\end{DoxyCode}
