Skip to content

Commit

Permalink
Proper fix for static asserts (cemu-project#64)
Browse files Browse the repository at this point in the history
Replace std::uniform_int_distribution with boost::random::uniform_int_distribution
  • Loading branch information
ArtemisX64 authored Aug 26, 2022
1 parent 19a0a3a commit 1cb2d4e
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 13 deletions.
14 changes: 9 additions & 5 deletions src/Cafe/Account/Account.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
#include "gui/CemuApp.h"
#include "util/helpers/SystemException.h"

#include <random>

#include "config/ActiveSettings.h"
#include "Cafe/IOSU/legacy/iosu_crypto.h"
#include "Common/filestream.h"

#include <random>
#include <boost/random/uniform_int.hpp>

std::vector<Account> Account::s_account_list;

Account::Account(uint32 persistent_id)
Expand Down Expand Up @@ -65,8 +66,11 @@ Account::Account(uint32 persistent_id, std::wstring_view mii_name)

static std::random_device s_random_device;
static std::mt19937 s_mte(s_random_device());
std::uniform_int_distribution<uint16> dist(std::numeric_limits<uint8>::min(), std::numeric_limits<uint8>::max());
std::generate(m_uuid.begin(), m_uuid.end(), [&]() { return (uint8)dist(s_mte); });

// use boost library to escape static asserts in linux builds
boost::random::uniform_int_distribution<uint16> dist(std::numeric_limits<uint8>::min(), std::numeric_limits<uint8>::max());

std::generate(m_uuid.begin(), m_uuid.end(), [&]() { return (uint8)dist(s_mte); });

// 1000004 or 2000004 | lower uint32 from uuid from uuid
m_transferable_id_base = (0x2000004ULL << 32);
Expand Down Expand Up @@ -575,4 +579,4 @@ void actPwTest()
makePWHash(pwHash, 32, pid, pwHash); // calculates AccountPasswordHash

assert_dbg();
}
}
5 changes: 4 additions & 1 deletion src/Cemu/nex/prudp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
#include<bitset>
#include<random>

#include <boost/random/uniform_int.hpp>

void swap(unsigned char *a, unsigned char *b)
{
int tmp = *a;
Expand Down Expand Up @@ -111,7 +113,8 @@ void releasePRUDPPort(uint16 port)
}

std::mt19937_64 prudpRG(GetTickCount());
std::uniform_int_distribution<int> prudpDis8(0, 0xFF);
// workaround for static asserts when using uniform_int_distribution
boost::random::uniform_int_distribution<int> prudpDis8(0, 0xFF);

uint8 prudp_generateRandomU8()
{
Expand Down
6 changes: 0 additions & 6 deletions src/Common/precompiled.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
//Temporary Workaround for static_assert related errors in libstdc++12
//TODO: Make a proper fix
#ifdef __clang__
#define static_assert(...) static_assert(true, "")
#endif

#pragma once

#include <stdlib.h> // for size_t
Expand Down
7 changes: 6 additions & 1 deletion src/util/helpers/helpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@

#include "config/ActiveSettings.h"

#include <boost/random/uniform_int.hpp>


#if BOOST_OS_WINDOWS
#include <TlHelp32.h>
#endif
Expand Down Expand Up @@ -427,7 +430,9 @@ std::string GenerateRandomString(const size_t length, const std::string_view cha

std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<decltype(characters.size())> index_dist(0, characters.size() - 1);

// workaround for static asserts using boost
boost::random::uniform_int_distribution<decltype(characters.size())> index_dist(0, characters.size() - 1);
std::generate_n(
result.begin(),
length,
Expand Down
1 change: 1 addition & 0 deletions vcpkg.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
"boost-ptr-container",
"boost-property-tree",
"boost-static-string",
"boost-random",
"fmt",
"glm",
"glslang",
Expand Down

0 comments on commit 1cb2d4e

Please sign in to comment.