Skip to content

Commit a94acdf

Browse files
committed
Modernize codebase:
- Replaced typedef with 'using' declarations for consistency. - Added #pragma once to all headers for faster compilation. - Introduced PCG_NODISCARD macro for improved safety (gated for C++17+). - Added convenience DXSM typedefs (pcg32_dxsm, pcg64_dxsm). - All items from Phase 1 (Quick Wins) implemented and tested.
1 parent db7c6d6 commit a94acdf

3 files changed

Lines changed: 101 additions & 82 deletions

File tree

include/pcg_extras.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
* - Support for efficiently producing random numbers less than a given
3030
* bound
3131
*/
32-
32+
#pragma once
3333
#ifndef PCG_EXTRAS_HPP_INCLUDED
3434
#define PCG_EXTRAS_HPP_INCLUDED 1
3535

@@ -525,15 +525,15 @@ inline void generate_to(SeedSeq&& generator, DestIter dest)
525525
*/
526526

527527
template <typename UInt, size_t i = 0UL, size_t N = i+1UL, typename SeedSeq>
528-
inline UInt generate_one(SeedSeq&& generator)
528+
PCG_NODISCARD inline UInt generate_one(SeedSeq&& generator)
529529
{
530530
UInt result[N];
531531
generate_to<N>(std::forward<SeedSeq>(generator), result);
532532
return result[i];
533533
}
534534

535535
template <typename RngType>
536-
auto bounded_rand(RngType& rng, typename RngType::result_type upper_bound)
536+
PCG_NODISCARD auto bounded_rand(RngType& rng, typename RngType::result_type upper_bound)
537537
-> typename RngType::result_type
538538
{
539539
using rtype = typename RngType::result_type;

include/pcg_random.hpp

Lines changed: 97 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
*
7171
*/
7272

73+
#pragma once
7374
#ifndef PCG_RAND_HPP_INCLUDED
7475
#define PCG_RAND_HPP_INCLUDED 1
7576

@@ -110,6 +111,12 @@
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

440447
public:
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

11071114
template <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

11131120
template <typename xtype, typename itype>
11141121
struct 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>;
16281635
using oneseq_xsh_rs_32_16 = oneseq_base<uint16_t, uint32_t, xsh_rs_mixin>;
16291636
using oneseq_xsh_rs_64_32 = oneseq_base<uint32_t, uint64_t, xsh_rs_mixin>;
16301637
using 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

16341641
using unique_xsh_rs_16_8 = unique_base<uint8_t, uint16_t, xsh_rs_mixin>;
16351642
using unique_xsh_rs_32_16 = unique_base<uint16_t, uint32_t, xsh_rs_mixin>;
16361643
using unique_xsh_rs_64_32 = unique_base<uint32_t, uint64_t, xsh_rs_mixin>;
16371644
using 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

16411648
using setseq_xsh_rs_16_8 = setseq_base<uint8_t, uint16_t, xsh_rs_mixin>;
16421649
using setseq_xsh_rs_32_16 = setseq_base<uint16_t, uint32_t, xsh_rs_mixin>;
16431650
using setseq_xsh_rs_64_32 = setseq_base<uint32_t, uint64_t, xsh_rs_mixin>;
16441651
using 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

16481655
using mcg_xsh_rs_16_8 = mcg_base<uint8_t, uint16_t, xsh_rs_mixin>;
16491656
using mcg_xsh_rs_32_16 = mcg_base<uint16_t, uint32_t, xsh_rs_mixin>;
16501657
using mcg_xsh_rs_64_32 = mcg_base<uint32_t, uint64_t, xsh_rs_mixin>;
16511658
using 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

16571664
using oneseq_xsh_rr_16_8 = oneseq_base<uint8_t, uint16_t, xsh_rr_mixin>;
16581665
using oneseq_xsh_rr_32_16 = oneseq_base<uint16_t, uint32_t, xsh_rr_mixin>;
16591666
using oneseq_xsh_rr_64_32 = oneseq_base<uint32_t, uint64_t, xsh_rr_mixin>;
16601667
using 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

16641671
using unique_xsh_rr_16_8 = unique_base<uint8_t, uint16_t, xsh_rr_mixin>;
16651672
using unique_xsh_rr_32_16 = unique_base<uint16_t, uint32_t, xsh_rr_mixin>;
16661673
using unique_xsh_rr_64_32 = unique_base<uint32_t, uint64_t, xsh_rr_mixin>;
16671674
using 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

16711678
using setseq_xsh_rr_16_8 = setseq_base<uint8_t, uint16_t, xsh_rr_mixin>;
16721679
using setseq_xsh_rr_32_16 = setseq_base<uint16_t, uint32_t, xsh_rr_mixin>;
16731680
using setseq_xsh_rr_64_32 = setseq_base<uint32_t, uint64_t, xsh_rr_mixin>;
16741681
using 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

16781685
using mcg_xsh_rr_16_8 = mcg_base<uint8_t, uint16_t, xsh_rr_mixin>;
16791686
using mcg_xsh_rr_32_16 = mcg_base<uint16_t, uint32_t, xsh_rr_mixin>;
16801687
using mcg_xsh_rr_64_32 = mcg_base<uint32_t, uint64_t, xsh_rr_mixin>;
16811688
using 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>;
16891696
using oneseq_rxs_m_xs_16_16 = oneseq_base<uint16_t, uint16_t, rxs_m_xs_mixin>;
16901697
using oneseq_rxs_m_xs_32_32 = oneseq_base<uint32_t, uint32_t, rxs_m_xs_mixin>;
16911698
using 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

16971704
using unique_rxs_m_xs_8_8 = unique_base<uint8_t, uint8_t, rxs_m_xs_mixin>;
16981705
using unique_rxs_m_xs_16_16 = unique_base<uint16_t, uint16_t, rxs_m_xs_mixin>;
16991706
using unique_rxs_m_xs_32_32 = unique_base<uint32_t, uint32_t, rxs_m_xs_mixin>;
17001707
using unique_rxs_m_xs_64_64 = unique_base<uint64_t, uint64_t, rxs_m_xs_mixin>;
17011708
using 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

17051712
using setseq_rxs_m_xs_8_8 = setseq_base<uint8_t, uint8_t, rxs_m_xs_mixin>;
17061713
using setseq_rxs_m_xs_16_16 = setseq_base<uint16_t, uint16_t, rxs_m_xs_mixin>;
17071714
using setseq_rxs_m_xs_32_32 = setseq_base<uint32_t, uint32_t, rxs_m_xs_mixin>;
17081715
using setseq_rxs_m_xs_64_64 = setseq_base<uint64_t, uint64_t, rxs_m_xs_mixin>;
17091716
using 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>;
17181725
using oneseq_rxs_m_32_16 = oneseq_base<uint16_t, uint32_t, rxs_m_mixin>;
17191726
using oneseq_rxs_m_64_32 = oneseq_base<uint32_t, uint64_t, rxs_m_mixin>;
17201727
using 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

17241731
using unique_rxs_m_16_8 = unique_base<uint8_t, uint16_t, rxs_m_mixin>;
17251732
using unique_rxs_m_32_16 = unique_base<uint16_t, uint32_t, rxs_m_mixin>;
17261733
using unique_rxs_m_64_32 = unique_base<uint32_t, uint64_t, rxs_m_mixin>;
17271734
using 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

17311738
using setseq_rxs_m_16_8 = setseq_base<uint8_t, uint16_t, rxs_m_mixin>;
17321739
using setseq_rxs_m_32_16 = setseq_base<uint16_t, uint32_t, rxs_m_mixin>;
17331740
using setseq_rxs_m_64_32 = setseq_base<uint32_t, uint64_t, rxs_m_mixin>;
17341741
using 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

17381745
using mcg_rxs_m_16_8 = mcg_base<uint8_t, uint16_t, rxs_m_mixin>;
17391746
using mcg_rxs_m_32_16 = mcg_base<uint16_t, uint32_t, rxs_m_mixin>;
17401747
using mcg_rxs_m_64_32 = mcg_base<uint32_t, uint64_t, rxs_m_mixin>;
17411748
using 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

17471754
using oneseq_dxsm_16_8 = oneseq_base<uint8_t, uint16_t, dxsm_mixin>;
17481755
using oneseq_dxsm_32_16 = oneseq_base<uint16_t, uint32_t, dxsm_mixin>;
17491756
using oneseq_dxsm_64_32 = oneseq_base<uint32_t, uint64_t, dxsm_mixin>;
17501757
using 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

17541761
using unique_dxsm_16_8 = unique_base<uint8_t, uint16_t, dxsm_mixin>;
17551762
using unique_dxsm_32_16 = unique_base<uint16_t, uint32_t, dxsm_mixin>;
17561763
using unique_dxsm_64_32 = unique_base<uint32_t, uint64_t, dxsm_mixin>;
17571764
using 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

17611768
using setseq_dxsm_16_8 = setseq_base<uint8_t, uint16_t, dxsm_mixin>;
17621769
using setseq_dxsm_32_16 = setseq_base<uint16_t, uint32_t, dxsm_mixin>;
17631770
using setseq_dxsm_64_32 = setseq_base<uint32_t, uint64_t, dxsm_mixin>;
17641771
using 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

17681775
using mcg_dxsm_16_8 = mcg_base<uint8_t, uint16_t, dxsm_mixin>;
17691776
using mcg_dxsm_32_16 = mcg_base<uint16_t, uint32_t, dxsm_mixin>;
17701777
using mcg_dxsm_64_32 = mcg_base<uint32_t, uint64_t, dxsm_mixin>;
17711778
using 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

17771796
using oneseq_xsl_rr_64_32 = oneseq_base<uint32_t, uint64_t, xsl_rr_mixin>;
17781797
using 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

17821801
using unique_xsl_rr_64_32 = unique_base<uint32_t, uint64_t, xsl_rr_mixin>;
17831802
using 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

17871806
using setseq_xsl_rr_64_32 = setseq_base<uint32_t, uint64_t, xsl_rr_mixin>;
17881807
using 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

17921811
using mcg_xsl_rr_64_32 = mcg_base<uint32_t, uint64_t, xsl_rr_mixin>;
17931812
using 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

include/pcg_uint128.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
* heavyweight. So we use a direct implementation. Sadly, it's much slower
3333
* than hand-coded assembly or direct CPU support.
3434
*/
35-
35+
#pragma once
3636
#ifndef PCG_UINT128_HPP_INCLUDED
3737
#define PCG_UINT128_HPP_INCLUDED 1
3838

0 commit comments

Comments
 (0)