7070 *
7171 */
7272
73+ #pragma once
7374#ifndef PCG_RAND_HPP_INCLUDED
7475#define PCG_RAND_HPP_INCLUDED 1
7576
110111 #define PCG_EBO
111112#endif
112113
114+ #if __cplusplus >= 201703L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
115+ #define PCG_NODISCARD [[nodiscard]]
116+ #else
117+ #define PCG_NODISCARD
118+ #endif
119+
113120/*
114121 * The pcg_extras namespace contains some support code that is likely to
115122 * be useful for a variety of RNGs, including:
@@ -409,12 +416,12 @@ class PCG_EBO engine : protected output_mixin,
409416 // It would be nice to use std::numeric_limits for these, but
410417 // we can't be sure that it'd be defined for the 128-bit types.
411418
412- static constexpr result_type min ()
419+ PCG_NODISCARD static constexpr result_type min ()
413420 {
414421 return result_type (0UL );
415422 }
416423
417- static constexpr result_type max ()
424+ PCG_NODISCARD static constexpr result_type max ()
418425 {
419426 return result_type (~result_type (0UL ));
420427 }
@@ -438,15 +445,15 @@ class PCG_EBO engine : protected output_mixin,
438445 }
439446
440447public:
441- result_type operator ()()
448+ PCG_NODISCARD result_type operator ()()
442449 {
443450 if (output_previous)
444451 return this ->output (base_generate0 ());
445452 else
446453 return this ->output (base_generate ());
447454 }
448455
449- result_type operator ()(result_type upper_bound)
456+ PCG_NODISCARD result_type operator ()(result_type upper_bound)
450457 {
451458 return bounded_rand (*this , upper_bound);
452459 }
@@ -1105,10 +1112,10 @@ struct xsl_rr_mixin {
11051112 */
11061113
11071114template <typename T> struct halfsize_trait {};
1108- template <> struct halfsize_trait <pcg128_t > { typedef uint64_t type; };
1109- template <> struct halfsize_trait <uint64_t > { typedef uint32_t type; };
1110- template <> struct halfsize_trait <uint32_t > { typedef uint16_t type; };
1111- template <> struct halfsize_trait <uint16_t > { typedef uint8_t type; };
1115+ template <> struct halfsize_trait <pcg128_t > { using type = uint64_t ; };
1116+ template <> struct halfsize_trait <uint64_t > { using type = uint32_t ; };
1117+ template <> struct halfsize_trait <uint32_t > { using type = uint16_t ; };
1118+ template <> struct halfsize_trait <uint16_t > { using type = uint8_t ; };
11121119
11131120template <typename xtype, typename itype>
11141121struct xsl_rr_rr_mixin {
@@ -1303,14 +1310,14 @@ class PCG_EBO extended : public baseclass {
13031310 return baseclass::period_pow2 () + table_size*extvalclass::period_pow2 ();
13041311 }
13051312
1306- PCG_ALWAYS_INLINE result_type operator ()()
1313+ PCG_ALWAYS_INLINE PCG_NODISCARD result_type operator ()()
13071314 {
13081315 result_type rhs = get_extended_value ();
13091316 result_type lhs = this ->baseclass ::operator ()();
13101317 return lhs ^ rhs;
13111318 }
13121319
1313- result_type operator ()(result_type upper_bound)
1320+ PCG_NODISCARD result_type operator ()(result_type upper_bound)
13141321 {
13151322 return bounded_rand (*this , upper_bound);
13161323 }
@@ -1628,59 +1635,59 @@ using oneseq_xsh_rs_16_8 = oneseq_base<uint8_t, uint16_t, xsh_rs_mixin>;
16281635using oneseq_xsh_rs_32_16 = oneseq_base<uint16_t , uint32_t , xsh_rs_mixin>;
16291636using oneseq_xsh_rs_64_32 = oneseq_base<uint32_t , uint64_t , xsh_rs_mixin>;
16301637using oneseq_xsh_rs_128_64 = oneseq_base<uint64_t , pcg128_t , xsh_rs_mixin>;
1631- typedef oneseq_base< uint64_t , pcg128_t , xsh_rs_mixin, true , cheap_multiplier>
1632- cm_oneseq_xsh_rs_128_64 ;
1638+ using cm_oneseq_xsh_rs_128_64 =
1639+ oneseq_base< uint64_t , pcg128_t , xsh_rs_mixin, true , cheap_multiplier> ;
16331640
16341641using unique_xsh_rs_16_8 = unique_base<uint8_t , uint16_t , xsh_rs_mixin>;
16351642using unique_xsh_rs_32_16 = unique_base<uint16_t , uint32_t , xsh_rs_mixin>;
16361643using unique_xsh_rs_64_32 = unique_base<uint32_t , uint64_t , xsh_rs_mixin>;
16371644using unique_xsh_rs_128_64 = unique_base<uint64_t , pcg128_t , xsh_rs_mixin>;
1638- typedef unique_base< uint64_t , pcg128_t , xsh_rs_mixin, true , cheap_multiplier>
1639- cm_unique_xsh_rs_128_64 ;
1645+ using cm_unique_xsh_rs_128_64 =
1646+ unique_base< uint64_t , pcg128_t , xsh_rs_mixin, true , cheap_multiplier> ;
16401647
16411648using setseq_xsh_rs_16_8 = setseq_base<uint8_t , uint16_t , xsh_rs_mixin>;
16421649using setseq_xsh_rs_32_16 = setseq_base<uint16_t , uint32_t , xsh_rs_mixin>;
16431650using setseq_xsh_rs_64_32 = setseq_base<uint32_t , uint64_t , xsh_rs_mixin>;
16441651using setseq_xsh_rs_128_64 = setseq_base<uint64_t , pcg128_t , xsh_rs_mixin>;
1645- typedef setseq_base< uint64_t , pcg128_t , xsh_rs_mixin, true , cheap_multiplier>
1646- cm_setseq_xsh_rs_128_64 ;
1652+ using cm_setseq_xsh_rs_128_64 =
1653+ setseq_base< uint64_t , pcg128_t , xsh_rs_mixin, true , cheap_multiplier> ;
16471654
16481655using mcg_xsh_rs_16_8 = mcg_base<uint8_t , uint16_t , xsh_rs_mixin>;
16491656using mcg_xsh_rs_32_16 = mcg_base<uint16_t , uint32_t , xsh_rs_mixin>;
16501657using mcg_xsh_rs_64_32 = mcg_base<uint32_t , uint64_t , xsh_rs_mixin>;
16511658using mcg_xsh_rs_128_64 = mcg_base<uint64_t , pcg128_t , xsh_rs_mixin>;
1652- typedef mcg_base< uint64_t , pcg128_t , xsh_rs_mixin, true , cheap_multiplier>
1653- cm_mcg_xsh_rs_128_64 ;
1659+ using cm_mcg_xsh_rs_128_64 =
1660+ mcg_base< uint64_t , pcg128_t , xsh_rs_mixin, true , cheap_multiplier> ;
16541661
16551662/* Predefined types for XSH RR */
16561663
16571664using oneseq_xsh_rr_16_8 = oneseq_base<uint8_t , uint16_t , xsh_rr_mixin>;
16581665using oneseq_xsh_rr_32_16 = oneseq_base<uint16_t , uint32_t , xsh_rr_mixin>;
16591666using oneseq_xsh_rr_64_32 = oneseq_base<uint32_t , uint64_t , xsh_rr_mixin>;
16601667using oneseq_xsh_rr_128_64 = oneseq_base<uint64_t , pcg128_t , xsh_rr_mixin>;
1661- typedef oneseq_base< uint64_t , pcg128_t , xsh_rr_mixin, true , cheap_multiplier>
1662- cm_oneseq_xsh_rr_128_64 ;
1668+ using cm_oneseq_xsh_rr_128_64 =
1669+ oneseq_base< uint64_t , pcg128_t , xsh_rr_mixin, true , cheap_multiplier> ;
16631670
16641671using unique_xsh_rr_16_8 = unique_base<uint8_t , uint16_t , xsh_rr_mixin>;
16651672using unique_xsh_rr_32_16 = unique_base<uint16_t , uint32_t , xsh_rr_mixin>;
16661673using unique_xsh_rr_64_32 = unique_base<uint32_t , uint64_t , xsh_rr_mixin>;
16671674using unique_xsh_rr_128_64 = unique_base<uint64_t , pcg128_t , xsh_rr_mixin>;
1668- typedef unique_base< uint64_t , pcg128_t , xsh_rr_mixin, true , cheap_multiplier>
1669- cm_unique_xsh_rr_128_64 ;
1675+ using cm_unique_xsh_rr_128_64 =
1676+ unique_base< uint64_t , pcg128_t , xsh_rr_mixin, true , cheap_multiplier> ;
16701677
16711678using setseq_xsh_rr_16_8 = setseq_base<uint8_t , uint16_t , xsh_rr_mixin>;
16721679using setseq_xsh_rr_32_16 = setseq_base<uint16_t , uint32_t , xsh_rr_mixin>;
16731680using setseq_xsh_rr_64_32 = setseq_base<uint32_t , uint64_t , xsh_rr_mixin>;
16741681using setseq_xsh_rr_128_64 = setseq_base<uint64_t , pcg128_t , xsh_rr_mixin>;
1675- typedef setseq_base< uint64_t , pcg128_t , xsh_rr_mixin, true , cheap_multiplier>
1676- cm_setseq_xsh_rr_128_64 ;
1682+ using cm_setseq_xsh_rr_128_64 =
1683+ setseq_base< uint64_t , pcg128_t , xsh_rr_mixin, true , cheap_multiplier> ;
16771684
16781685using mcg_xsh_rr_16_8 = mcg_base<uint8_t , uint16_t , xsh_rr_mixin>;
16791686using mcg_xsh_rr_32_16 = mcg_base<uint16_t , uint32_t , xsh_rr_mixin>;
16801687using mcg_xsh_rr_64_32 = mcg_base<uint32_t , uint64_t , xsh_rr_mixin>;
16811688using mcg_xsh_rr_128_64 = mcg_base<uint64_t , pcg128_t , xsh_rr_mixin>;
1682- typedef mcg_base< uint64_t , pcg128_t , xsh_rr_mixin, true , cheap_multiplier>
1683- cm_mcg_xsh_rr_128_64 ;
1689+ using cm_mcg_xsh_rr_128_64 =
1690+ mcg_base< uint64_t , pcg128_t , xsh_rr_mixin, true , cheap_multiplier> ;
16841691
16851692
16861693/* Predefined types for RXS M XS */
@@ -1689,26 +1696,26 @@ using oneseq_rxs_m_xs_8_8 = oneseq_base<uint8_t, uint8_t, rxs_m_xs_mixin>;
16891696using oneseq_rxs_m_xs_16_16 = oneseq_base<uint16_t , uint16_t , rxs_m_xs_mixin>;
16901697using oneseq_rxs_m_xs_32_32 = oneseq_base<uint32_t , uint32_t , rxs_m_xs_mixin>;
16911698using oneseq_rxs_m_xs_64_64 = oneseq_base<uint64_t , uint64_t , rxs_m_xs_mixin>;
1692- typedef oneseq_base< pcg128_t , pcg128_t , rxs_m_xs_mixin>
1693- oneseq_rxs_m_xs_128_128 ;
1694- typedef oneseq_base< pcg128_t , pcg128_t , rxs_m_xs_mixin, true , cheap_multiplier>
1695- cm_oneseq_rxs_m_xs_128_128 ;
1699+ using oneseq_rxs_m_xs_128_128 =
1700+ oneseq_base< pcg128_t , pcg128_t , rxs_m_xs_mixin> ;
1701+ using cm_oneseq_rxs_m_xs_128_128 =
1702+ oneseq_base< pcg128_t , pcg128_t , rxs_m_xs_mixin, true , cheap_multiplier> ;
16961703
16971704using unique_rxs_m_xs_8_8 = unique_base<uint8_t , uint8_t , rxs_m_xs_mixin>;
16981705using unique_rxs_m_xs_16_16 = unique_base<uint16_t , uint16_t , rxs_m_xs_mixin>;
16991706using unique_rxs_m_xs_32_32 = unique_base<uint32_t , uint32_t , rxs_m_xs_mixin>;
17001707using unique_rxs_m_xs_64_64 = unique_base<uint64_t , uint64_t , rxs_m_xs_mixin>;
17011708using unique_rxs_m_xs_128_128 = unique_base<pcg128_t , pcg128_t , rxs_m_xs_mixin>;
1702- typedef unique_base< pcg128_t , pcg128_t , rxs_m_xs_mixin, true , cheap_multiplier>
1703- cm_unique_rxs_m_xs_128_128 ;
1709+ using cm_unique_rxs_m_xs_128_128 =
1710+ unique_base< pcg128_t , pcg128_t , rxs_m_xs_mixin, true , cheap_multiplier> ;
17041711
17051712using setseq_rxs_m_xs_8_8 = setseq_base<uint8_t , uint8_t , rxs_m_xs_mixin>;
17061713using setseq_rxs_m_xs_16_16 = setseq_base<uint16_t , uint16_t , rxs_m_xs_mixin>;
17071714using setseq_rxs_m_xs_32_32 = setseq_base<uint32_t , uint32_t , rxs_m_xs_mixin>;
17081715using setseq_rxs_m_xs_64_64 = setseq_base<uint64_t , uint64_t , rxs_m_xs_mixin>;
17091716using setseq_rxs_m_xs_128_128 = setseq_base<pcg128_t , pcg128_t , rxs_m_xs_mixin>;
1710- typedef setseq_base< pcg128_t , pcg128_t , rxs_m_xs_mixin, true , cheap_multiplier>
1711- cm_setseq_rxs_m_xs_128_128 ;
1717+ using cm_setseq_rxs_m_xs_128_128 =
1718+ setseq_base< pcg128_t , pcg128_t , rxs_m_xs_mixin, true , cheap_multiplier> ;
17121719
17131720 // MCG versions don't make sense here, so aren't defined.
17141721
@@ -1718,105 +1725,117 @@ using oneseq_rxs_m_16_8 = oneseq_base<uint8_t, uint16_t, rxs_m_mixin>;
17181725using oneseq_rxs_m_32_16 = oneseq_base<uint16_t , uint32_t , rxs_m_mixin>;
17191726using oneseq_rxs_m_64_32 = oneseq_base<uint32_t , uint64_t , rxs_m_mixin>;
17201727using oneseq_rxs_m_128_64 = oneseq_base<uint64_t , pcg128_t , rxs_m_mixin>;
1721- typedef oneseq_base< uint64_t , pcg128_t , rxs_m_mixin, true , cheap_multiplier>
1722- cm_oneseq_rxs_m_128_64 ;
1728+ using cm_oneseq_rxs_m_128_64 =
1729+ oneseq_base< uint64_t , pcg128_t , rxs_m_mixin, true , cheap_multiplier> ;
17231730
17241731using unique_rxs_m_16_8 = unique_base<uint8_t , uint16_t , rxs_m_mixin>;
17251732using unique_rxs_m_32_16 = unique_base<uint16_t , uint32_t , rxs_m_mixin>;
17261733using unique_rxs_m_64_32 = unique_base<uint32_t , uint64_t , rxs_m_mixin>;
17271734using unique_rxs_m_128_64 = unique_base<uint64_t , pcg128_t , rxs_m_mixin>;
1728- typedef unique_base< uint64_t , pcg128_t , rxs_m_mixin, true , cheap_multiplier>
1729- cm_unique_rxs_m_128_64 ;
1735+ using cm_unique_rxs_m_128_64 =
1736+ unique_base< uint64_t , pcg128_t , rxs_m_mixin, true , cheap_multiplier> ;
17301737
17311738using setseq_rxs_m_16_8 = setseq_base<uint8_t , uint16_t , rxs_m_mixin>;
17321739using setseq_rxs_m_32_16 = setseq_base<uint16_t , uint32_t , rxs_m_mixin>;
17331740using setseq_rxs_m_64_32 = setseq_base<uint32_t , uint64_t , rxs_m_mixin>;
17341741using setseq_rxs_m_128_64 = setseq_base<uint64_t , pcg128_t , rxs_m_mixin>;
1735- typedef setseq_base< uint64_t , pcg128_t , rxs_m_mixin, true , cheap_multiplier>
1736- cm_setseq_rxs_m_128_64 ;
1742+ using cm_setseq_rxs_m_128_64 =
1743+ setseq_base< uint64_t , pcg128_t , rxs_m_mixin, true , cheap_multiplier> ;
17371744
17381745using mcg_rxs_m_16_8 = mcg_base<uint8_t , uint16_t , rxs_m_mixin>;
17391746using mcg_rxs_m_32_16 = mcg_base<uint16_t , uint32_t , rxs_m_mixin>;
17401747using mcg_rxs_m_64_32 = mcg_base<uint32_t , uint64_t , rxs_m_mixin>;
17411748using mcg_rxs_m_128_64 = mcg_base<uint64_t , pcg128_t , rxs_m_mixin>;
1742- typedef mcg_base< uint64_t , pcg128_t , rxs_m_mixin, true , cheap_multiplier>
1743- cm_mcg_rxs_m_128_64 ;
1749+ using cm_mcg_rxs_m_128_64 =
1750+ mcg_base< uint64_t , pcg128_t , rxs_m_mixin, true , cheap_multiplier> ;
17441751
17451752/* Predefined types for DXSM */
17461753
17471754using oneseq_dxsm_16_8 = oneseq_base<uint8_t , uint16_t , dxsm_mixin>;
17481755using oneseq_dxsm_32_16 = oneseq_base<uint16_t , uint32_t , dxsm_mixin>;
17491756using oneseq_dxsm_64_32 = oneseq_base<uint32_t , uint64_t , dxsm_mixin>;
17501757using oneseq_dxsm_128_64 = oneseq_base<uint64_t , pcg128_t , dxsm_mixin>;
1751- typedef oneseq_base< uint64_t , pcg128_t , dxsm_mixin, true , cheap_multiplier>
1752- cm_oneseq_dxsm_128_64 ;
1758+ using cm_oneseq_dxsm_128_64 =
1759+ oneseq_base< uint64_t , pcg128_t , dxsm_mixin, true , cheap_multiplier> ;
17531760
17541761using unique_dxsm_16_8 = unique_base<uint8_t , uint16_t , dxsm_mixin>;
17551762using unique_dxsm_32_16 = unique_base<uint16_t , uint32_t , dxsm_mixin>;
17561763using unique_dxsm_64_32 = unique_base<uint32_t , uint64_t , dxsm_mixin>;
17571764using unique_dxsm_128_64 = unique_base<uint64_t , pcg128_t , dxsm_mixin>;
1758- typedef unique_base< uint64_t , pcg128_t , dxsm_mixin, true , cheap_multiplier>
1759- cm_unique_dxsm_128_64 ;
1765+ using cm_unique_dxsm_128_64 =
1766+ unique_base< uint64_t , pcg128_t , dxsm_mixin, true , cheap_multiplier> ;
17601767
17611768using setseq_dxsm_16_8 = setseq_base<uint8_t , uint16_t , dxsm_mixin>;
17621769using setseq_dxsm_32_16 = setseq_base<uint16_t , uint32_t , dxsm_mixin>;
17631770using setseq_dxsm_64_32 = setseq_base<uint32_t , uint64_t , dxsm_mixin>;
17641771using setseq_dxsm_128_64 = setseq_base<uint64_t , pcg128_t , dxsm_mixin>;
1765- typedef setseq_base< uint64_t , pcg128_t , dxsm_mixin, true , cheap_multiplier>
1766- cm_setseq_dxsm_128_64 ;
1772+ using cm_setseq_dxsm_128_64 =
1773+ setseq_base< uint64_t , pcg128_t , dxsm_mixin, true , cheap_multiplier> ;
17671774
17681775using mcg_dxsm_16_8 = mcg_base<uint8_t , uint16_t , dxsm_mixin>;
17691776using mcg_dxsm_32_16 = mcg_base<uint16_t , uint32_t , dxsm_mixin>;
17701777using mcg_dxsm_64_32 = mcg_base<uint32_t , uint64_t , dxsm_mixin>;
17711778using mcg_dxsm_128_64 = mcg_base<uint64_t , pcg128_t , dxsm_mixin>;
1772- typedef mcg_base<uint64_t , pcg128_t , dxsm_mixin, true , cheap_multiplier>
1773- cm_mcg_dxsm_128_64;
1779+ using cm_mcg_dxsm_128_64 =
1780+ mcg_base<uint64_t , pcg128_t , dxsm_mixin, true , cheap_multiplier>;
1781+
1782+ /* Predefined types for DXSM (Convenience) */
1783+
1784+ using pcg32_dxsm = setseq_dxsm_64_32;
1785+ using pcg32_dxsm_oneseq = oneseq_dxsm_64_32;
1786+ using pcg32_dxsm_unique = unique_dxsm_64_32;
1787+ using pcg32_dxsm_fast = mcg_dxsm_64_32;
1788+
1789+ using pcg64_dxsm = setseq_dxsm_128_64;
1790+ using pcg64_dxsm_oneseq = oneseq_dxsm_128_64;
1791+ using pcg64_dxsm_unique = unique_dxsm_128_64;
1792+ using pcg64_dxsm_fast = mcg_dxsm_128_64;
17741793
17751794/* Predefined types for XSL RR (only defined for "large" types) */
17761795
17771796using oneseq_xsl_rr_64_32 = oneseq_base<uint32_t , uint64_t , xsl_rr_mixin>;
17781797using oneseq_xsl_rr_128_64 = oneseq_base<uint64_t , pcg128_t , xsl_rr_mixin>;
1779- typedef oneseq_base< uint64_t , pcg128_t , xsl_rr_mixin, true , cheap_multiplier>
1780- cm_oneseq_xsl_rr_128_64 ;
1798+ using cm_oneseq_xsl_rr_128_64 =
1799+ oneseq_base< uint64_t , pcg128_t , xsl_rr_mixin, true , cheap_multiplier> ;
17811800
17821801using unique_xsl_rr_64_32 = unique_base<uint32_t , uint64_t , xsl_rr_mixin>;
17831802using unique_xsl_rr_128_64 = unique_base<uint64_t , pcg128_t , xsl_rr_mixin>;
1784- typedef unique_base< uint64_t , pcg128_t , xsl_rr_mixin, true , cheap_multiplier>
1785- cm_unique_xsl_rr_128_64 ;
1803+ using cm_unique_xsl_rr_128_64 =
1804+ unique_base< uint64_t , pcg128_t , xsl_rr_mixin, true , cheap_multiplier> ;
17861805
17871806using setseq_xsl_rr_64_32 = setseq_base<uint32_t , uint64_t , xsl_rr_mixin>;
17881807using setseq_xsl_rr_128_64 = setseq_base<uint64_t , pcg128_t , xsl_rr_mixin>;
1789- typedef setseq_base< uint64_t , pcg128_t , xsl_rr_mixin, true , cheap_multiplier>
1790- cm_setseq_xsl_rr_128_64 ;
1808+ using cm_setseq_xsl_rr_128_64 =
1809+ setseq_base< uint64_t , pcg128_t , xsl_rr_mixin, true , cheap_multiplier> ;
17911810
17921811using mcg_xsl_rr_64_32 = mcg_base<uint32_t , uint64_t , xsl_rr_mixin>;
17931812using mcg_xsl_rr_128_64 = mcg_base<uint64_t , pcg128_t , xsl_rr_mixin>;
1794- typedef mcg_base< uint64_t , pcg128_t , xsl_rr_mixin, true , cheap_multiplier>
1795- cm_mcg_xsl_rr_128_64 ;
1813+ using cm_mcg_xsl_rr_128_64 =
1814+ mcg_base< uint64_t , pcg128_t , xsl_rr_mixin, true , cheap_multiplier> ;
17961815
17971816
17981817/* Predefined types for XSL RR RR (only defined for "large" types) */
17991818
1800- typedef oneseq_base< uint64_t , uint64_t , xsl_rr_rr_mixin>
1801- oneseq_xsl_rr_rr_64_64 ;
1802- typedef oneseq_base< pcg128_t , pcg128_t , xsl_rr_rr_mixin>
1803- oneseq_xsl_rr_rr_128_128 ;
1804- typedef oneseq_base< pcg128_t , pcg128_t , xsl_rr_rr_mixin, true , cheap_multiplier>
1805- cm_oneseq_xsl_rr_rr_128_128 ;
1806-
1807- typedef unique_base< uint64_t , uint64_t , xsl_rr_rr_mixin>
1808- unique_xsl_rr_rr_64_64 ;
1809- typedef unique_base< pcg128_t , pcg128_t , xsl_rr_rr_mixin>
1810- unique_xsl_rr_rr_128_128 ;
1811- typedef unique_base< pcg128_t , pcg128_t , xsl_rr_rr_mixin, true , cheap_multiplier>
1812- cm_unique_xsl_rr_rr_128_128 ;
1813-
1814- typedef setseq_base< uint64_t , uint64_t , xsl_rr_rr_mixin>
1815- setseq_xsl_rr_rr_64_64 ;
1816- typedef setseq_base< pcg128_t , pcg128_t , xsl_rr_rr_mixin>
1817- setseq_xsl_rr_rr_128_128 ;
1818- typedef setseq_base< pcg128_t , pcg128_t , xsl_rr_rr_mixin, true , cheap_multiplier>
1819- cm_setseq_xsl_rr_rr_128_128 ;
1819+ using oneseq_xsl_rr_rr_64_64 =
1820+ oneseq_base< uint64_t , uint64_t , xsl_rr_rr_mixin> ;
1821+ using oneseq_xsl_rr_rr_128_128 =
1822+ oneseq_base< pcg128_t , pcg128_t , xsl_rr_rr_mixin> ;
1823+ using cm_oneseq_xsl_rr_rr_128_128 =
1824+ oneseq_base< pcg128_t , pcg128_t , xsl_rr_rr_mixin, true , cheap_multiplier> ;
1825+
1826+ using unique_xsl_rr_rr_64_64 =
1827+ unique_base< uint64_t , uint64_t , xsl_rr_rr_mixin> ;
1828+ using unique_xsl_rr_rr_128_128 =
1829+ unique_base< pcg128_t , pcg128_t , xsl_rr_rr_mixin> ;
1830+ using cm_unique_xsl_rr_rr_128_128 =
1831+ unique_base< pcg128_t , pcg128_t , xsl_rr_rr_mixin, true , cheap_multiplier> ;
1832+
1833+ using setseq_xsl_rr_rr_64_64 =
1834+ setseq_base< uint64_t , uint64_t , xsl_rr_rr_mixin> ;
1835+ using setseq_xsl_rr_rr_128_128 =
1836+ setseq_base< pcg128_t , pcg128_t , xsl_rr_rr_mixin> ;
1837+ using cm_setseq_xsl_rr_rr_128_128 =
1838+ setseq_base< pcg128_t , pcg128_t , xsl_rr_rr_mixin, true , cheap_multiplier> ;
18201839
18211840 // MCG versions don't make sense here, so aren't defined.
18221841
0 commit comments