Require C++20 for building Stepmania.

This commit is contained in:
Brian Phlipot
2022-10-03 16:21:19 -07:00
committed by teejusb
parent 9755acddb7
commit 37aff00d6e
16 changed files with 55 additions and 125 deletions
+1 -1
View File
@@ -538,7 +538,7 @@ void BackgroundImpl::LoadFromSong( const Song* pSong )
// Pick the same random items every time the song is played.
RandomGen rnd( GetHashForString(pSong->GetSongDir()) );
random_shuffle( vsNames.begin(), vsNames.end(), rnd );
std::shuffle( vsNames.begin(), vsNames.end(), rnd );
int iSize = std::min( (int)g_iNumBackgrounds, (int)vsNames.size() );
vsNames.resize( iSize );
+1 -1
View File
@@ -87,7 +87,7 @@ else()
${SMDATA_ALL_FILES_HPP})
endif()
set_property(TARGET "${SM_EXE_NAME}" PROPERTY CXX_STANDARD 11)
set_property(TARGET "${SM_EXE_NAME}" PROPERTY CXX_STANDARD 20)
set_property(TARGET "${SM_EXE_NAME}" PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET "${SM_EXE_NAME}" PROPERTY CXX_EXTENSIONS ON)
+1 -1
View File
@@ -81,7 +81,7 @@ static void SplitWithQuotes( const RString sSource, const char Delimitor, std::v
RString Commands::GetOriginalCommandString() const
{
return std::accumulate(v.begin(), v.end(), RString(), [](RString &res, Command const &c) { return res + c.GetOriginalCommandString(); });
return std::accumulate(v.begin(), v.end(), RString(), [](RString const &res, Command const &c) { return res + c.GetOriginalCommandString(); });
}
void ParseCommands( const RString &sCommands, Commands &vCommandsOut, bool bLegacy )
+10 -6
View File
@@ -368,7 +368,7 @@ static void CourseSortSongs( SongSort sort, std::vector<Song*> &vpPossibleSongs,
{
DEFAULT_FAIL(sort);
case SongSort_Randomize:
random_shuffle( vpPossibleSongs.begin(), vpPossibleSongs.end(), rnd );
shuffle( vpPossibleSongs.begin(), vpPossibleSongs.end(), rnd );
break;
case SongSort_MostPlays:
if( PROFILEMAN )
@@ -428,7 +428,7 @@ bool Course::GetTrailUnsorted( StepsType st, CourseDifficulty cd, Trail &trail )
* will change every time it's viewed, and the displayed order will have no
* bearing on what you'll actually play. */
tmp_entries = m_vEntries;
random_shuffle( tmp_entries.begin(), tmp_entries.end(), rnd );
shuffle( tmp_entries.begin(), tmp_entries.end(), rnd );
}
const std::vector<CourseEntry> &entries = m_bShuffle ? tmp_entries:m_vEntries;
@@ -589,8 +589,10 @@ bool Course::GetTrailUnsorted( StepsType st, CourseDifficulty cd, Trail &trail )
int iAdd;
if( iMaxDist == iMinDist )
iAdd = iMaxDist;
else
iAdd = rnd( iMaxDist - iMinDist ) + iMinDist;
else {
std::uniform_int_distribution<> dist( iMinDist, iMaxDist );
iAdd = dist( rnd );
}
iLowMeter += iAdd;
iHighMeter += iAdd;
}
@@ -820,8 +822,10 @@ void Course::GetTrailUnsortedEndless( const std::vector<CourseEntry> &entries, T
int iAdd;
if( iMaxDist == iMinDist )
iAdd = iMaxDist;
else
iAdd = rnd( iMaxDist - iMinDist ) + iMinDist;
else {
std::uniform_int_distribution<> dist( iMinDist, iMaxDist );
iAdd = dist( rnd );
}
iLowMeter += iAdd;
iHighMeter += iAdd;
}
+1 -1
View File
@@ -304,7 +304,7 @@ void CourseUtil::AutogenOniFromArtist( const RString &sArtistName, RString sArti
* song set changes. */
{
RandomGen rng( GetHashForString( sArtistName ) + aSongs.size() );
random_shuffle( aSongs.begin(), aSongs.end(), rng );
shuffle( aSongs.begin(), aSongs.end(), rng );
}
// Only use up to four songs.
+1 -1
View File
@@ -318,7 +318,7 @@ static void DoPlayOnceFromDir( RString sPath )
{
order.push_back(i);
}
std::random_shuffle(order.begin(), order.end());
std::shuffle( order.begin(), order.end(), g_RandomNumberGenerator );
}
int index = order.back();
+1 -1
View File
@@ -1333,7 +1333,7 @@ void MusicWheel::StartRandom()
{
// Shuffle and use the roulette wheel.
RandomGen rnd;
random_shuffle( getWheelItemsData(SORT_ROULETTE).begin(), getWheelItemsData(SORT_ROULETTE).end(), rnd );
shuffle( getWheelItemsData(SORT_ROULETTE).begin(), getWheelItemsData(SORT_ROULETTE).end(), rnd );
GAMESTATE->m_SortOrder.Set( SORT_ROULETTE );
}
else
+6 -6
View File
@@ -1535,19 +1535,19 @@ static void GetTrackMapping( StepsType st, NoteDataUtil::TrackMapping tt, int Nu
switch(st) {
case StepsType_beat_single5:
{
std::random_shuffle( &iTakeFromTrack[0], &iTakeFromTrack[5], rnd );
std::random_shuffle( &iTakeFromTrack[6], &iTakeFromTrack[11], rnd );
std::shuffle( &iTakeFromTrack[0], &iTakeFromTrack[5], rnd );
std::shuffle( &iTakeFromTrack[6], &iTakeFromTrack[11], rnd );
break;
}
case StepsType_beat_single7:
{
std::random_shuffle( &iTakeFromTrack[1], &iTakeFromTrack[8], rnd );
std::random_shuffle( &iTakeFromTrack[9], &iTakeFromTrack[16], rnd );
std::shuffle( &iTakeFromTrack[1], &iTakeFromTrack[8], rnd );
std::shuffle( &iTakeFromTrack[9], &iTakeFromTrack[16], rnd );
break;
}
default:
{
std::random_shuffle( &iTakeFromTrack[0], &iTakeFromTrack[NumTracks], rnd );
std::shuffle( &iTakeFromTrack[0], &iTakeFromTrack[NumTracks], rnd );
break;
}
}
@@ -1970,7 +1970,7 @@ static void HyperShuffleNotes( NoteData &inout, int iStartIndex, int iEndIndex)
for(int i = iActualTaps; i < iFreeTracks; i++)
vtnTargetTaps.push_back(TAP_EMPTY);
std::random_shuffle(viTargetTracks.begin(), viTargetTracks.end(), g_RandomNumberGenerator);
std::shuffle(viTargetTracks.begin(), viTargetTracks.end(), g_RandomNumberGenerator);
// Go through the tracks in their shuffled order and drop tap notes.
for(int i = 0; i < viTargetTracks.size(); i++)
+1 -1
View File
@@ -544,7 +544,7 @@ void OptionRow::SetDestination( Actor::TweenState &ts, bool bTween )
if( m_Frame.DestTweenState() != ts )
{
m_Frame.StopTweening();
if( bTween && m_pParentType->TWEEN_SECONDS != 0 )
if( bTween && m_pParentType->TWEEN_SECONDS != 0.0f )
m_Frame.BeginTweening( m_pParentType->TWEEN_SECONDS );
m_Frame.DestTweenState() = ts;
}
+7 -72
View File
@@ -29,74 +29,6 @@ void UnicodeUpperLower(wchar_t *, size_t, const unsigned char *);
RandomGen g_RandomNumberGenerator;
MersenneTwister::MersenneTwister( int iSeed ) : m_iNext(0)
{
Reset( iSeed );
}
void MersenneTwister::Reset( int iSeed )
{
if( iSeed == 0 )
iSeed = time(nullptr);
m_Values[0] = iSeed;
m_iNext = 0;
for( int i = 1; i < 624; ++i )
m_Values[i] = ((69069 * m_Values[i-1]) + 1) & 0xFFFFFFFF;
GenerateValues();
}
void MersenneTwister::GenerateValues()
{
static const unsigned mask[] = { 0, 0x9908B0DF };
for( int i = 0; i < 227; ++i )
{
int iVal = (m_Values[i] & 0x80000000) | (m_Values[i+1] & 0x7FFFFFFF);
int iNext = (i + 397);
m_Values[i] = m_Values[iNext];
m_Values[i] ^= (iVal >> 1);
m_Values[i] ^= mask[iVal&1];
}
for( int i = 227; i < 623; ++i )
{
int iVal = (m_Values[i] & 0x80000000) | (m_Values[i+1] & 0x7FFFFFFF);
int iNext = (i + 397) - 624;
m_Values[i] = m_Values[iNext];
m_Values[i] ^= (iVal >> 1);
m_Values[i] ^= mask[iVal&1];
}
int iVal = (m_Values[623] & 0x80000000) + (m_Values[0] & 0x7FFFFFFF);
int iNext = (623 + 397) - 624;
m_Values[623] = m_Values[iNext] ^ (iVal>>1);
m_Values[623] ^= mask[iVal&1];
}
int MersenneTwister::Temper( int iVal )
{
iVal ^= (iVal >> 11);
iVal ^= (iVal << 7) & 0x9D2C5680;
iVal ^= (iVal << 15) & 0xEFC60000;
iVal ^= (iVal >> 18);
return iVal;
}
int MersenneTwister::operator()()
{
if( m_iNext == 624 )
{
m_iNext = 0;
GenerateValues();
}
return Temper( m_Values[m_iNext++] );
}
/* Extend MersenneTwister into Lua space. This is intended to replace
* math.randomseed and math.random, so we conform to their behavior. */
@@ -109,7 +41,7 @@ namespace
static int Seed( lua_State *L )
{
g_LuaPRNG.Reset( IArg(1) );
g_LuaPRNG = MersenneTwister( IArg(1) );
return 0;
}
@@ -120,7 +52,8 @@ namespace
/* [0..1) */
case 0:
{
double r = double(g_LuaPRNG()) / DIVISOR;
std::uniform_real_distribution<> dist( 0, 1 );
double r = dist( g_LuaPRNG );
lua_pushnumber( L, r );
return 1;
}
@@ -130,7 +63,8 @@ namespace
{
int upper = IArg(1);
luaL_argcheck( L, 1 <= upper, 1, "interval is empty" );
lua_pushnumber( L, g_LuaPRNG(upper) + 1 );
std::uniform_int_distribution<> dist( 1, upper );
lua_pushnumber( L, dist( g_LuaPRNG ) );
return 1;
}
/* [l..u] */
@@ -139,7 +73,8 @@ namespace
int lower = IArg(1);
int upper = IArg(2);
luaL_argcheck( L, lower < upper, 2, "interval is empty" );
lua_pushnumber( L, (int(g_LuaPRNG()) % (upper-lower+1)) + lower );
std::uniform_int_distribution<> dist( lower, upper );
lua_pushnumber( L, dist( g_LuaPRNG ) );
return 1;
}
+19 -28
View File
@@ -4,6 +4,7 @@
#define RAGE_UTIL_H
#include <map>
#include <random>
#include <vector>
#include <sstream>
#include "global.h"
@@ -230,37 +231,16 @@ inline uint32_t Swap24LE( uint32_t n ) { return Swap24( n ); }
inline uint16_t Swap16LE( uint16_t n ) { return Swap16( n ); }
#endif
struct MersenneTwister
class MersenneTwister : public std::mt19937
{
MersenneTwister( int iSeed = 0 ); // 0 = time()
int operator()(); // returns [0,2^31-1]
int operator()( int n ) // returns [0,n)
{
return (*this)() % n;
}
void Reset( int iSeed );
private:
static int Temper( int iValue );
void GenerateValues();
int m_Values[624];
int m_iNext;
public:
MersenneTwister( int iSeed = 0 ) : std::mt19937( iSeed == 0 ? time( nullptr ) : iSeed ) {}
};
typedef MersenneTwister RandomGen;
extern RandomGen g_RandomNumberGenerator;
/**
* @brief Generate a random float between 0 inclusive and 1 exclusive.
* @return the random float.
*/
inline float RandomFloat()
{
return g_RandomNumberGenerator() / 2147483648.0f;
}
/**
* @brief Return a float between the low and high values.
* @param fLow the low value, inclusive.
@@ -269,19 +249,30 @@ inline float RandomFloat()
*/
inline float RandomFloat( float fLow, float fHigh )
{
return SCALE( RandomFloat(), 0.0f, 1.0f, fLow, fHigh );
std::uniform_real_distribution<> dist( fLow, fHigh );
return dist( g_RandomNumberGenerator );
}
/**
* @brief Generate a random float between 0 inclusive and 1 exclusive.
* @return the random float.
*/
inline float RandomFloat()
{
return RandomFloat( 0, 1 );
}
// Returns an integer between nLow and nHigh inclusive
inline int RandomInt( int nLow, int nHigh )
{
return int( g_RandomNumberGenerator(nHigh - nLow + 1) + nLow );
std::uniform_int_distribution<> dist( nLow, nHigh );
return dist( g_RandomNumberGenerator );
}
// Returns an integer between 0 and n-1 inclusive (replacement for rand() % n).
inline int RandomInt( int n )
{
return int( g_RandomNumberGenerator(n) );
return RandomInt( 0, n - 1 );
}
+1 -1
View File
@@ -56,7 +56,7 @@ bool RandomSample::LoadSoundDir( RString sDir, int iMaxToLoad )
GetDirListing( sDir + "*.ogg", arraySoundFiles );
GetDirListing( sDir + "*.wav", arraySoundFiles );
std::random_shuffle( arraySoundFiles.begin(), arraySoundFiles.end() );
std::shuffle( arraySoundFiles.begin(), arraySoundFiles.end(), g_RandomNumberGenerator );
const unsigned int newSize = std::min<unsigned int>(arraySoundFiles.size(), static_cast<unsigned int>(iMaxToLoad));
arraySoundFiles.resize(newSize);
+1 -1
View File
@@ -202,7 +202,7 @@ void ScreenOptionsCourseOverview::ProcessMenuStart( const InputEventPlus &input
case CourseOverviewRow_Shuffle:
{
Course *pCourse = GAMESTATE->m_pCurCourse;
random_shuffle( pCourse->m_vEntries.begin(), pCourse->m_vEntries.end() );
shuffle( pCourse->m_vEntries.begin(), pCourse->m_vEntries.end(), g_RandomNumberGenerator );
Trail *pTrail = pCourse->GetTrailForceRegenCache( GAMESTATE->GetCurrentStyle(input.pn)->m_StepsType );
GAMESTATE->m_pCurTrail[PLAYER_1].Set( pTrail );
SCREENMAN->PlayStartSound();
+1 -1
View File
@@ -146,7 +146,7 @@ void ScreenOptionsCourseOverview::ProcessMenuStart( const InputEventPlus &input
case ReviewWorkoutRow_Shuffle:
{
Course *pCourse = GAMESTATE->m_pCurCourse;
random_shuffle( pCourse->m_vEntries.begin(), pCourse->m_vEntries.end() );
shuffle( pCourse->m_vEntries.begin(), pCourse->m_vEntries.end(), g_RandomNumberGenerator );
Trail *pTrail = pCourse->GetTrailForceRegenCache( GAMESTATE->m_pCurStyle->m_StepsType );
GAMESTATE->m_pCurTrail[PLAYER_1].Set( pTrail );
SCREENMAN->PlayStartSound();
+1 -1
View File
@@ -52,7 +52,7 @@ void ScreenWithMenuElements::Init()
}
}
if( TIMER_SECONDS != -1 )
if( TIMER_SECONDS != -1.0f )
{
ASSERT( m_MenuTimer == nullptr ); // don't load twice
m_MenuTimer = new MenuTimer;
+2 -2
View File
@@ -1585,10 +1585,10 @@ void SongManager::UpdateShuffled()
{
// update shuffled
m_pShuffledSongs = m_pSongs;
random_shuffle( m_pShuffledSongs.begin(), m_pShuffledSongs.end(), g_RandomNumberGenerator );
shuffle( m_pShuffledSongs.begin(), m_pShuffledSongs.end(), g_RandomNumberGenerator );
m_pShuffledCourses = m_pCourses;
random_shuffle( m_pShuffledCourses.begin(), m_pShuffledCourses.end(), g_RandomNumberGenerator );
shuffle( m_pShuffledCourses.begin(), m_pShuffledCourses.end(), g_RandomNumberGenerator );
}
void SongManager::UpdatePreferredSort(RString sPreferredSongs, RString sPreferredCourses)