Merge pull request #8362 from GerbilSoft/feature/string-optimizations.2019-09-11

Various string and other optimizations
This commit is contained in:
Pierre Bourdon 2019-12-30 10:59:14 +01:00 committed by GitHub
commit 7a6a4510f6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
24 changed files with 216 additions and 181 deletions

View file

@ -147,7 +147,7 @@ void WaveFileWriter::AddStereoSamplesBE(const short* sample_data, u32 count, int
{
Stop();
file_index++;
std::stringstream filename;
std::ostringstream filename;
filename << File::GetUserPath(D_DUMPAUDIO_IDX) << basename << file_index << ".wav";
Start(filename.str(), sample_rate);
current_sample_rate = sample_rate;

View file

@ -104,7 +104,7 @@ std::vector<std::string> Watches::SaveToStrings() const
std::vector<std::string> watches;
for (const auto& watch : m_watches)
{
std::stringstream ss;
std::ostringstream ss;
ss << std::hex << watch.address << " " << watch.name;
watches.push_back(ss.str());
}

View file

@ -2198,7 +2198,7 @@ static void InitExtensionList(GLContext* context)
default:
case 450:
{
std::string gl450exts[] = {
static const char* const gl450exts[] = {
"GL_ARB_ES3_1_compatibility",
"GL_ARB_clip_control",
"GL_ARB_conditional_render_inverted",
@ -2216,7 +2216,7 @@ static void InitExtensionList(GLContext* context)
}
case 440:
{
std::string gl440exts[] = {
static const char* const gl440exts[] = {
"GL_ARB_buffer_storage",
"GL_ARB_clear_texture",
"GL_ARB_enhanced_layouts",
@ -2232,7 +2232,7 @@ static void InitExtensionList(GLContext* context)
}
case 430:
{
std::string gl430exts[] = {
static const char* const gl430exts[] = {
"GL_ARB_ES3_compatibility",
"GL_ARB_arrays_of_arrays",
"GL_ARB_clear_buffer_object",
@ -2260,7 +2260,7 @@ static void InitExtensionList(GLContext* context)
}
case 420:
{
std::string gl420exts[] = {
static const char* const gl420exts[] = {
"GL_ARB_base_instance",
"GL_ARB_compressed_texture_pixel_storage",
"GL_ARB_conservative_depth",
@ -2280,7 +2280,7 @@ static void InitExtensionList(GLContext* context)
}
case 410:
{
std::string gl410exts[] = {
static const char* const gl410exts[] = {
"GL_ARB_ES2_compatibility",
"GL_ARB_get_program_binary",
"GL_ARB_separate_shader_objects",
@ -2294,7 +2294,7 @@ static void InitExtensionList(GLContext* context)
}
case 400:
{
std::string gl400exts[] = {
static const char* const gl400exts[] = {
"GL_ARB_draw_indirect",
"GL_ARB_gpu_shader5",
"GL_ARB_gpu_shader_fp64",
@ -2314,7 +2314,7 @@ static void InitExtensionList(GLContext* context)
}
case 330:
{
std::string gl330exts[] = {
static const char* const gl330exts[] = {
"GL_ARB_shader_bit_encoding",
"GL_ARB_blend_func_extended",
"GL_ARB_explicit_attrib_location",
@ -2332,7 +2332,7 @@ static void InitExtensionList(GLContext* context)
}
case 320:
{
std::string gl320exts[] = {
static const char* const gl320exts[] = {
"GL_ARB_geometry_shader4",
"GL_ARB_sync",
"GL_ARB_vertex_array_bgra",
@ -2350,7 +2350,7 @@ static void InitExtensionList(GLContext* context)
case 310:
{
// Can't add NV_primitive_restart since function name changed
std::string gl310exts[] = {
static const char* const gl310exts[] = {
"GL_ARB_draw_instanced",
"GL_ARB_copy_buffer",
"GL_ARB_texture_buffer_object",
@ -2366,7 +2366,7 @@ static void InitExtensionList(GLContext* context)
{
// Quite a lot of these had their names changed when merged in to core
// Disable the ones that have
std::string gl300exts[] = {
static const char* const gl300exts[] = {
"GL_ARB_map_buffer_range",
"GL_ARB_color_buffer_float",
"GL_ARB_texture_float",

View file

@ -398,7 +398,7 @@ std::string JoinStrings(const std::vector<std::string>& strings, const std::stri
if (strings.empty())
return "";
std::stringstream res;
std::ostringstream res;
std::copy(strings.begin(), strings.end(),
std::ostream_iterator<std::string>(res, delimiter.c_str()));

View file

@ -22,134 +22,136 @@ bool IsSettingSaveable(const Config::ConfigLocation& config_location)
if (config_location.system == Config::System::Logger)
return true;
if (config_location.system == Config::System::Main && config_location.section == "NetPlay")
return true;
if (config_location.system == Config::System::Main)
{
if (config_location.section == "NetPlay" || config_location.section == "General")
return true;
}
if (config_location.system == Config::System::Main && config_location.section == "General")
return true;
const static std::vector<Config::ConfigLocation> s_setting_saveable{
static constexpr std::array<const Config::ConfigLocation*, 92> s_setting_saveable = {
// Main.Core
Config::MAIN_DEFAULT_ISO.location,
Config::MAIN_MEMCARD_A_PATH.location,
Config::MAIN_MEMCARD_B_PATH.location,
Config::MAIN_AUTO_DISC_CHANGE.location,
Config::MAIN_DPL2_DECODER.location,
Config::MAIN_DPL2_QUALITY.location,
&Config::MAIN_DEFAULT_ISO.location,
&Config::MAIN_MEMCARD_A_PATH.location,
&Config::MAIN_MEMCARD_B_PATH.location,
&Config::MAIN_AUTO_DISC_CHANGE.location,
&Config::MAIN_DPL2_DECODER.location,
&Config::MAIN_DPL2_QUALITY.location,
// Main.Display
Config::MAIN_FULLSCREEN_DISPLAY_RES.location,
Config::MAIN_FULLSCREEN.location,
Config::MAIN_RENDER_TO_MAIN.location,
Config::MAIN_RENDER_WINDOW_AUTOSIZE.location,
Config::MAIN_KEEP_WINDOW_ON_TOP.location,
Config::MAIN_DISABLE_SCREENSAVER.location,
&Config::MAIN_FULLSCREEN_DISPLAY_RES.location,
&Config::MAIN_FULLSCREEN.location,
&Config::MAIN_RENDER_TO_MAIN.location,
&Config::MAIN_RENDER_WINDOW_AUTOSIZE.location,
&Config::MAIN_KEEP_WINDOW_ON_TOP.location,
&Config::MAIN_DISABLE_SCREENSAVER.location,
// Graphics.Hardware
Config::GFX_VSYNC.location,
Config::GFX_ADAPTER.location,
&Config::GFX_VSYNC.location,
&Config::GFX_ADAPTER.location,
// Graphics.Settings
Config::GFX_WIDESCREEN_HACK.location,
Config::GFX_ASPECT_RATIO.location,
Config::GFX_CROP.location,
Config::GFX_SAFE_TEXTURE_CACHE_COLOR_SAMPLES.location,
Config::GFX_SHOW_FPS.location,
Config::GFX_SHOW_NETPLAY_PING.location,
Config::GFX_SHOW_NETPLAY_MESSAGES.location,
Config::GFX_LOG_RENDER_TIME_TO_FILE.location,
Config::GFX_OVERLAY_STATS.location,
Config::GFX_OVERLAY_PROJ_STATS.location,
Config::GFX_DUMP_TEXTURES.location,
Config::GFX_HIRES_TEXTURES.location,
Config::GFX_CACHE_HIRES_TEXTURES.location,
Config::GFX_DUMP_EFB_TARGET.location,
Config::GFX_DUMP_FRAMES_AS_IMAGES.location,
Config::GFX_FREE_LOOK.location,
Config::GFX_USE_FFV1.location,
Config::GFX_DUMP_FORMAT.location,
Config::GFX_DUMP_CODEC.location,
Config::GFX_DUMP_ENCODER.location,
Config::GFX_DUMP_PATH.location,
Config::GFX_BITRATE_KBPS.location,
Config::GFX_INTERNAL_RESOLUTION_FRAME_DUMPS.location,
Config::GFX_ENABLE_GPU_TEXTURE_DECODING.location,
Config::GFX_ENABLE_PIXEL_LIGHTING.location,
Config::GFX_FAST_DEPTH_CALC.location,
Config::GFX_MSAA.location,
Config::GFX_SSAA.location,
Config::GFX_EFB_SCALE.location,
Config::GFX_TEXFMT_OVERLAY_ENABLE.location,
Config::GFX_TEXFMT_OVERLAY_CENTER.location,
Config::GFX_ENABLE_WIREFRAME.location,
Config::GFX_DISABLE_FOG.location,
Config::GFX_BORDERLESS_FULLSCREEN.location,
Config::GFX_ENABLE_VALIDATION_LAYER.location,
Config::GFX_BACKEND_MULTITHREADING.location,
Config::GFX_COMMAND_BUFFER_EXECUTE_INTERVAL.location,
Config::GFX_SHADER_CACHE.location,
Config::GFX_WAIT_FOR_SHADERS_BEFORE_STARTING.location,
Config::GFX_SHADER_COMPILATION_MODE.location,
Config::GFX_SHADER_COMPILER_THREADS.location,
Config::GFX_SHADER_PRECOMPILER_THREADS.location,
Config::GFX_SAVE_TEXTURE_CACHE_TO_STATE.location,
&Config::GFX_WIDESCREEN_HACK.location,
&Config::GFX_ASPECT_RATIO.location,
&Config::GFX_CROP.location,
&Config::GFX_SAFE_TEXTURE_CACHE_COLOR_SAMPLES.location,
&Config::GFX_SHOW_FPS.location,
&Config::GFX_SHOW_NETPLAY_PING.location,
&Config::GFX_SHOW_NETPLAY_MESSAGES.location,
&Config::GFX_LOG_RENDER_TIME_TO_FILE.location,
&Config::GFX_OVERLAY_STATS.location,
&Config::GFX_OVERLAY_PROJ_STATS.location,
&Config::GFX_DUMP_TEXTURES.location,
&Config::GFX_HIRES_TEXTURES.location,
&Config::GFX_CACHE_HIRES_TEXTURES.location,
&Config::GFX_DUMP_EFB_TARGET.location,
&Config::GFX_DUMP_FRAMES_AS_IMAGES.location,
&Config::GFX_FREE_LOOK.location,
&Config::GFX_USE_FFV1.location,
&Config::GFX_DUMP_FORMAT.location,
&Config::GFX_DUMP_CODEC.location,
&Config::GFX_DUMP_ENCODER.location,
&Config::GFX_DUMP_PATH.location,
&Config::GFX_BITRATE_KBPS.location,
&Config::GFX_INTERNAL_RESOLUTION_FRAME_DUMPS.location,
&Config::GFX_ENABLE_GPU_TEXTURE_DECODING.location,
&Config::GFX_ENABLE_PIXEL_LIGHTING.location,
&Config::GFX_FAST_DEPTH_CALC.location,
&Config::GFX_MSAA.location,
&Config::GFX_SSAA.location,
&Config::GFX_EFB_SCALE.location,
&Config::GFX_TEXFMT_OVERLAY_ENABLE.location,
&Config::GFX_TEXFMT_OVERLAY_CENTER.location,
&Config::GFX_ENABLE_WIREFRAME.location,
&Config::GFX_DISABLE_FOG.location,
&Config::GFX_BORDERLESS_FULLSCREEN.location,
&Config::GFX_ENABLE_VALIDATION_LAYER.location,
&Config::GFX_BACKEND_MULTITHREADING.location,
&Config::GFX_COMMAND_BUFFER_EXECUTE_INTERVAL.location,
&Config::GFX_SHADER_CACHE.location,
&Config::GFX_WAIT_FOR_SHADERS_BEFORE_STARTING.location,
&Config::GFX_SHADER_COMPILATION_MODE.location,
&Config::GFX_SHADER_COMPILER_THREADS.location,
&Config::GFX_SHADER_PRECOMPILER_THREADS.location,
&Config::GFX_SAVE_TEXTURE_CACHE_TO_STATE.location,
Config::GFX_SW_ZCOMPLOC.location,
Config::GFX_SW_ZFREEZE.location,
Config::GFX_SW_DUMP_OBJECTS.location,
Config::GFX_SW_DUMP_TEV_STAGES.location,
Config::GFX_SW_DUMP_TEV_TEX_FETCHES.location,
Config::GFX_SW_DRAW_START.location,
Config::GFX_SW_DRAW_END.location,
&Config::GFX_SW_ZCOMPLOC.location,
&Config::GFX_SW_ZFREEZE.location,
&Config::GFX_SW_DUMP_OBJECTS.location,
&Config::GFX_SW_DUMP_TEV_STAGES.location,
&Config::GFX_SW_DUMP_TEV_TEX_FETCHES.location,
&Config::GFX_SW_DRAW_START.location,
&Config::GFX_SW_DRAW_END.location,
// Graphics.Enhancements
Config::GFX_ENHANCE_FORCE_FILTERING.location,
Config::GFX_ENHANCE_MAX_ANISOTROPY.location,
Config::GFX_ENHANCE_POST_SHADER.location,
Config::GFX_ENHANCE_FORCE_TRUE_COLOR.location,
Config::GFX_ENHANCE_DISABLE_COPY_FILTER.location,
Config::GFX_ENHANCE_ARBITRARY_MIPMAP_DETECTION.location,
&Config::GFX_ENHANCE_FORCE_FILTERING.location,
&Config::GFX_ENHANCE_MAX_ANISOTROPY.location,
&Config::GFX_ENHANCE_POST_SHADER.location,
&Config::GFX_ENHANCE_FORCE_TRUE_COLOR.location,
&Config::GFX_ENHANCE_DISABLE_COPY_FILTER.location,
&Config::GFX_ENHANCE_ARBITRARY_MIPMAP_DETECTION.location,
// Graphics.Stereoscopy
Config::GFX_STEREO_MODE.location,
Config::GFX_STEREO_DEPTH.location,
Config::GFX_STEREO_CONVERGENCE_PERCENTAGE.location,
Config::GFX_STEREO_SWAP_EYES.location,
Config::GFX_STEREO_CONVERGENCE.location,
Config::GFX_STEREO_EFB_MONO_DEPTH.location,
Config::GFX_STEREO_DEPTH_PERCENTAGE.location,
&Config::GFX_STEREO_MODE.location,
&Config::GFX_STEREO_DEPTH.location,
&Config::GFX_STEREO_CONVERGENCE_PERCENTAGE.location,
&Config::GFX_STEREO_SWAP_EYES.location,
&Config::GFX_STEREO_CONVERGENCE.location,
&Config::GFX_STEREO_EFB_MONO_DEPTH.location,
&Config::GFX_STEREO_DEPTH_PERCENTAGE.location,
// Graphics.Hacks
Config::GFX_HACK_EFB_ACCESS_ENABLE.location,
Config::GFX_HACK_EFB_DEFER_INVALIDATION.location,
Config::GFX_HACK_EFB_ACCESS_TILE_SIZE.location,
Config::GFX_HACK_BBOX_ENABLE.location,
Config::GFX_HACK_FORCE_PROGRESSIVE.location,
Config::GFX_HACK_SKIP_EFB_COPY_TO_RAM.location,
Config::GFX_HACK_SKIP_XFB_COPY_TO_RAM.location,
Config::GFX_HACK_DISABLE_COPY_TO_VRAM.location,
Config::GFX_HACK_DEFER_EFB_COPIES.location,
Config::GFX_HACK_IMMEDIATE_XFB.location,
Config::GFX_HACK_COPY_EFB_SCALED.location,
Config::GFX_HACK_EFB_EMULATE_FORMAT_CHANGES.location,
Config::GFX_HACK_VERTEX_ROUDING.location,
&Config::GFX_HACK_EFB_ACCESS_ENABLE.location,
&Config::GFX_HACK_EFB_DEFER_INVALIDATION.location,
&Config::GFX_HACK_EFB_ACCESS_TILE_SIZE.location,
&Config::GFX_HACK_BBOX_ENABLE.location,
&Config::GFX_HACK_FORCE_PROGRESSIVE.location,
&Config::GFX_HACK_SKIP_EFB_COPY_TO_RAM.location,
&Config::GFX_HACK_SKIP_XFB_COPY_TO_RAM.location,
&Config::GFX_HACK_DISABLE_COPY_TO_VRAM.location,
&Config::GFX_HACK_DEFER_EFB_COPIES.location,
&Config::GFX_HACK_IMMEDIATE_XFB.location,
&Config::GFX_HACK_COPY_EFB_SCALED.location,
&Config::GFX_HACK_EFB_EMULATE_FORMAT_CHANGES.location,
&Config::GFX_HACK_VERTEX_ROUDING.location,
// Graphics.GameSpecific
Config::GFX_PERF_QUERIES_ENABLE.location,
&Config::GFX_PERF_QUERIES_ENABLE.location,
// UI.General
Config::MAIN_USE_DISCORD_PRESENCE.location,
&Config::MAIN_USE_DISCORD_PRESENCE.location,
};
return std::find(s_setting_saveable.begin(), s_setting_saveable.end(), config_location) !=
s_setting_saveable.end();
return std::any_of(s_setting_saveable.cbegin(), s_setting_saveable.cend(),
[&config_location](const Config::ConfigLocation* location) {
return *location == config_location;
});
}
} // namespace ConfigLoaders

View file

@ -307,7 +307,7 @@ static void RunSIBuffer(u64 user_data, s64 cycles_late)
s_com_csr.CHANNEL, request_length, expected_response_length, actual_response_length);
if (expected_response_length != actual_response_length)
{
std::stringstream ss;
std::ostringstream ss;
for (u8 b : request_copy)
{
ss << std::hex << std::setw(2) << std::setfill('0') << (int)b << ' ';

View file

@ -512,7 +512,7 @@ void BluetoothReal::LoadLinkKeys()
for (size_t i = 0; i < key_string.length(); i = i + 2)
{
int value;
std::stringstream(key_string.substr(i, 2)) >> std::hex >> value;
std::istringstream(key_string.substr(i, 2)) >> std::hex >> value;
key[pos++] = value;
}

View file

@ -18,7 +18,7 @@ namespace IOS::HLE::Device
{
static void GetVidPidFromDevicePath(const std::string& device_path, u16& vid, u16& pid)
{
std::stringstream stream{device_path};
std::istringstream stream{device_path};
std::string segment;
std::vector<std::string> list;
while (std::getline(stream, segment, '/'))

View file

@ -50,7 +50,7 @@ void MemoryWatcher::ParseLine(const std::string& line)
m_values[line] = 0;
m_addresses[line] = std::vector<u32>();
std::stringstream offsets(line);
std::istringstream offsets(line);
offsets >> std::hex;
u32 offset;
while (offsets >> offset)
@ -76,7 +76,7 @@ u32 MemoryWatcher::ChasePointer(const std::string& line)
std::string MemoryWatcher::ComposeMessages()
{
std::stringstream message_stream;
std::ostringstream message_stream;
message_stream << std::hex;
for (auto& entry : m_values)

View file

@ -185,7 +185,7 @@ std::string GetRTCDisplay()
const time_t current_time = CEXIIPL::GetEmulatedTime(CEXIIPL::UNIX_EPOCH);
const tm* const gm_time = gmtime(&current_time);
std::stringstream format_time;
std::ostringstream format_time;
format_time << std::put_time(gm_time, "Date/Time: %c\n");
return format_time.str();
}

View file

@ -37,7 +37,7 @@ BreakPoints::TBreakPointsStr BreakPoints::GetStrings() const
{
if (!bp.is_temporary)
{
std::stringstream ss;
std::ostringstream ss;
ss << std::hex << bp.address << " " << (bp.is_enabled ? "n" : "");
bp_strings.push_back(ss.str());
}
@ -130,7 +130,7 @@ MemChecks::TMemChecksStr MemChecks::GetStrings() const
TMemChecksStr mc_strings;
for (const TMemCheck& mc : m_mem_checks)
{
std::stringstream ss;
std::ostringstream ss;
ss << std::hex << mc.start_address;
ss << " " << (mc.is_ranged ? mc.end_address : mc.start_address) << " "
<< (mc.is_ranged ? "n" : "") << (mc.is_break_on_read ? "r" : "")

View file

@ -1193,7 +1193,7 @@ void LogGeneratedX86(size_t size, const PPCAnalyst::CodeBuffer& code_buffer, con
if (b->codeSize <= 250)
{
std::stringstream ss;
std::ostringstream ss;
ss << std::hex;
for (u8 i = 0; i <= b->codeSize; i++)
{

View file

@ -32,7 +32,7 @@
namespace PowerPC
{
// STATE_TO_SAVE
PowerPCState ppcState{};
PowerPCState ppcState;
static CPUCoreBase* s_cpu_core_base = nullptr;
static bool s_cpu_core_base_is_injected = false;

View file

@ -348,21 +348,22 @@ Region GetSysMenuRegion(u16 title_version)
std::string GetSysMenuVersionString(u16 title_version)
{
std::string region_letter;
std::string version;
char region_letter = '\0';
switch (GetSysMenuRegion(title_version))
{
case Region::NTSC_J:
region_letter = "J";
region_letter = 'J';
break;
case Region::NTSC_U:
region_letter = "U";
region_letter = 'U';
break;
case Region::PAL:
region_letter = "E";
region_letter = 'E';
break;
case Region::NTSC_K:
region_letter = "K";
region_letter = 'K';
break;
case Region::Unknown:
WARN_LOG(DISCIO, "Unknown region for Wii Menu version %u", title_version);
@ -372,36 +373,55 @@ std::string GetSysMenuVersionString(u16 title_version)
switch (title_version & 0xff0)
{
case 32:
return "1.0" + region_letter;
version = "1.0";
break;
case 96:
case 128:
return "2.0" + region_letter;
version = "2.0";
break;
case 160:
return "2.1" + region_letter;
version = "2.1";
break;
case 192:
return "2.2" + region_letter;
version = "2.2";
break;
case 224:
return "3.0" + region_letter;
version = "3.0";
break;
case 256:
return "3.1" + region_letter;
version = "3.1";
break;
case 288:
return "3.2" + region_letter;
version = "3.2";
break;
case 320:
case 352:
return "3.3" + region_letter;
version = "3.3";
break;
case 384:
return (region_letter != "K" ? "3.4" : "3.5") + region_letter;
version = (region_letter != 'K' ? "3.4" : "3.5");
break;
case 416:
return "4.0" + region_letter;
version = "4.0";
break;
case 448:
return "4.1" + region_letter;
version = "4.1";
break;
case 480:
return "4.2" + region_letter;
version = "4.2";
break;
case 512:
return "4.3" + region_letter;
version = "4.3";
break;
default:
return "?.?" + region_letter;
version = "?.?";
break;
}
if (region_letter != '\0')
version += region_letter;
return version;
}
const std::string& GetCompanyFromID(const std::string& company_id)

View file

@ -5,6 +5,7 @@
#include "DiscIO/VolumeVerifier.h"
#include <algorithm>
#include <cassert>
#include <cinttypes>
#include <future>
#include <limits>
@ -678,38 +679,47 @@ bool VolumeVerifier::IsDebugSigned() const
bool VolumeVerifier::ShouldHaveChannelPartition() const
{
const std::unordered_set<std::string> channel_discs{
static constexpr std::array<std::string_view, 18> channel_discs = {
"RFNE01", "RFNJ01", "RFNK01", "RFNP01", "RFNW01", "RFPE01", "RFPJ01", "RFPK01", "RFPP01",
"RFPW01", "RGWE41", "RGWJ41", "RGWP41", "RGWX41", "RMCE01", "RMCJ01", "RMCK01", "RMCP01",
};
assert(std::is_sorted(channel_discs.cbegin(), channel_discs.cend()));
return channel_discs.find(m_volume.GetGameID()) != channel_discs.end();
return std::binary_search(channel_discs.cbegin(), channel_discs.cend(),
std::string_view(m_volume.GetGameID()));
}
bool VolumeVerifier::ShouldHaveInstallPartition() const
{
const std::unordered_set<std::string> dragon_quest_x{"S4MJGD", "S4SJGD", "S6TJGD", "SDQJGD"};
return dragon_quest_x.find(m_volume.GetGameID()) != dragon_quest_x.end();
static constexpr std::array<std::string_view, 4> dragon_quest_x = {"S4MJGD", "S4SJGD", "S6TJGD",
"SDQJGD"};
const std::string& game_id = m_volume.GetGameID();
return std::any_of(dragon_quest_x.cbegin(), dragon_quest_x.cend(),
[&game_id](std::string_view x) { return x == game_id; });
}
bool VolumeVerifier::ShouldHaveMasterpiecePartitions() const
{
const std::unordered_set<std::string> ssbb{"RSBE01", "RSBJ01", "RSBK01", "RSBP01"};
return ssbb.find(m_volume.GetGameID()) != ssbb.end();
static constexpr std::array<std::string_view, 4> ssbb = {"RSBE01", "RSBJ01", "RSBK01", "RSBP01"};
const std::string& game_id = m_volume.GetGameID();
return std::any_of(ssbb.cbegin(), ssbb.cend(),
[&game_id](std::string_view x) { return x == game_id; });
}
bool VolumeVerifier::ShouldBeDualLayer() const
{
// The Japanese versions of Xenoblade and The Last Story are single-layer
// (unlike the other versions) and must not be added to this list.
const std::unordered_set<std::string> dual_layer_discs{
static constexpr std::array<std::string_view, 33> dual_layer_discs = {
"R3ME01", "R3MP01", "R3OE01", "R3OJ01", "R3OP01", "RSBE01", "RSBJ01", "RSBK01", "RSBP01",
"RXMJ8P", "S59E01", "S59JC8", "S59P01", "S5QJC8", "SK8X52", "SAKENS", "SAKPNS", "SK8V52",
"SK8X52", "SLSEXJ", "SLSP01", "SQIE4Q", "SQIP4Q", "SQIY4Q", "SR5E41", "SR5P41", "SUOE41",
"SUOP41", "SVXX52", "SVXY52", "SX4E01", "SX4P01", "SZ3EGT", "SZ3PGT",
"RXMJ8P", "S59E01", "S59JC8", "S59P01", "S5QJC8", "SAKENS", "SAKPNS", "SK8V52", "SK8X52",
"SLSEXJ", "SLSP01", "SQIE4Q", "SQIP4Q", "SQIY4Q", "SR5E41", "SR5P41", "SUOE41", "SUOP41",
"SVXX52", "SVXY52", "SX4E01", "SX4P01", "SZ3EGT", "SZ3PGT",
};
assert(std::is_sorted(dual_layer_discs.cbegin(), dual_layer_discs.cend()));
return dual_layer_discs.find(m_volume.GetGameID()) != dual_layer_discs.end();
return std::binary_search(dual_layer_discs.cbegin(), dual_layer_discs.cend(),
std::string_view(m_volume.GetGameID()));
}
void VolumeVerifier::CheckDiscSize()

View file

@ -30,7 +30,7 @@ bool InputConfig::LoadConfig(bool isGC)
{
IniFile inifile;
bool useProfile[MAX_BBMOTES] = {false, false, false, false, false};
std::string num[MAX_BBMOTES] = {"1", "2", "3", "4", "BB"};
static constexpr std::array<std::string_view, MAX_BBMOTES> num = {"1", "2", "3", "4", "BB"};
std::string profile[MAX_BBMOTES];
std::string path;
@ -58,10 +58,10 @@ bool InputConfig::LoadConfig(bool isGC)
for (int i = 0; i < 4; i++)
{
if (control_section->Exists(type + "Profile" + num[i]))
if (control_section->Exists(type + "Profile" + std::string(num[i])))
{
std::string profile_setting;
if (control_section->Get(type + "Profile" + num[i], &profile_setting))
if (control_section->Get(type + "Profile" + std::string(num[i]), &profile_setting))
{
auto profiles = InputProfile::GetProfilesFromSetting(
profile_setting, File::GetUserPath(D_CONFIG_IDX) + path);

View file

@ -76,7 +76,7 @@ std::vector<ResourcePack>& GetPacks()
std::vector<ResourcePack*> GetLowerPriorityPacks(ResourcePack& pack)
{
std::vector<ResourcePack*> list;
for (auto it = std::find(packs.begin(), packs.end(), pack) + 1; it != packs.end(); it++)
for (auto it = std::find(packs.begin(), packs.end(), pack) + 1; it != packs.end(); ++it)
{
auto& entry = *it;
if (!IsInstalled(pack))
@ -93,7 +93,7 @@ std::vector<ResourcePack*> GetHigherPriorityPacks(ResourcePack& pack)
std::vector<ResourcePack*> list;
auto end = std::find(packs.begin(), packs.end(), pack);
for (auto it = packs.begin(); it != end; it++)
for (auto it = packs.begin(); it != end; ++it)
{
auto& entry = *it;
if (!IsInstalled(entry))

View file

@ -464,7 +464,7 @@ std::string FormatSize(u64 bytes)
// Don't need exact values, only 5 most significant digits
const double unit_size = std::pow(2, unit * 10);
std::stringstream ss;
std::ostringstream ss;
ss << std::fixed << std::setprecision(2);
ss << bytes / unit_size << ' ' << Common::GetStringT(unit_symbols[unit]);
return ss.str();

View file

@ -178,7 +178,7 @@ bool StreamBuffer::WaitForClearSpace(u32 num_bytes)
u32 new_gpu_position = 0;
auto iter = m_tracked_fences.begin();
for (; iter != m_tracked_fences.end(); iter++)
for (; iter != m_tracked_fences.end(); ++iter)
{
// Would this fence bring us in line with the GPU?
// This is the "last resort" case, where a command buffer execution has been forced

View file

@ -144,28 +144,35 @@ static void APIENTRY ClearDepthf(GLfloat depthval)
static void InitDriverInfo()
{
std::string svendor = std::string(g_ogl_config.gl_vendor);
std::string srenderer = std::string(g_ogl_config.gl_renderer);
std::string sversion = std::string(g_ogl_config.gl_version);
const std::string_view svendor(g_ogl_config.gl_vendor);
const std::string_view srenderer(g_ogl_config.gl_renderer);
const std::string_view sversion(g_ogl_config.gl_version);
DriverDetails::Vendor vendor = DriverDetails::VENDOR_UNKNOWN;
DriverDetails::Driver driver = DriverDetails::DRIVER_UNKNOWN;
DriverDetails::Family family = DriverDetails::Family::UNKNOWN;
double version = 0.0;
// Get the vendor first
if (svendor == "NVIDIA Corporation" && srenderer != "NVIDIA Tegra")
if (svendor == "NVIDIA Corporation")
{
vendor = DriverDetails::VENDOR_NVIDIA;
if (srenderer != "NVIDIA Tegra")
{
vendor = DriverDetails::VENDOR_NVIDIA;
}
else
{
vendor = DriverDetails::VENDOR_TEGRA;
}
}
else if (svendor == "ATI Technologies Inc." || svendor == "Advanced Micro Devices, Inc.")
{
vendor = DriverDetails::VENDOR_ATI;
}
else if (std::string::npos != sversion.find("Mesa"))
else if (sversion.find("Mesa") != std::string::npos)
{
vendor = DriverDetails::VENDOR_MESA;
}
else if (std::string::npos != svendor.find("Intel"))
else if (svendor.find("Intel") != std::string::npos)
{
vendor = DriverDetails::VENDOR_INTEL;
}
@ -186,10 +193,6 @@ static void InitDriverInfo()
{
vendor = DriverDetails::VENDOR_IMGTEC;
}
else if (svendor == "NVIDIA Corporation" && srenderer == "NVIDIA Tegra")
{
vendor = DriverDetails::VENDOR_TEGRA;
}
else if (svendor == "Vivante Corporation")
{
vendor = DriverDetails::VENDOR_VIVANTE;
@ -238,8 +241,8 @@ static void InitDriverInfo()
else if (srenderer.find("Ivybridge") != std::string::npos)
family = DriverDetails::Family::INTEL_IVY;
}
else if (std::string::npos != srenderer.find("AMD") ||
std::string::npos != srenderer.find("ATI"))
else if (srenderer.find("AMD") != std::string::npos ||
srenderer.find("ATI") != std::string::npos)
{
driver = DriverDetails::DRIVER_R600;
}

View file

@ -254,7 +254,7 @@ bool StreamBuffer::WaitForClearSpace(u32 num_bytes)
u32 new_gpu_position = 0;
auto iter = m_tracked_fences.begin();
for (; iter != m_tracked_fences.end(); iter++)
for (; iter != m_tracked_fences.end(); ++iter)
{
// Would this fence bring us in line with the GPU?
// This is the "last resort" case, where a command buffer execution has been forced

View file

@ -434,7 +434,7 @@ void PostProcessing::BlitFromTexture(const MathUtil::Rectangle<int>& dst,
std::string PostProcessing::GetUniformBufferHeader() const
{
std::stringstream ss;
std::ostringstream ss;
u32 unused_counter = 1;
if (g_ActiveConfig.backend_info.api_type == APIType::D3D)
ss << "cbuffer PSBlock : register(b0) {\n";
@ -493,7 +493,7 @@ std::string PostProcessing::GetUniformBufferHeader() const
std::string PostProcessing::GetHeader() const
{
std::stringstream ss;
std::ostringstream ss;
ss << GetUniformBufferHeader();
if (g_ActiveConfig.backend_info.api_type == APIType::D3D)
{
@ -602,7 +602,7 @@ void main(in float3 v_tex0_ : TEXCOORD0, out float4 ocol0_ : SV_Target)
bool PostProcessing::CompileVertexShader()
{
std::stringstream ss;
std::ostringstream ss;
ss << GetUniformBufferHeader();
if (g_ActiveConfig.backend_info.api_type == APIType::D3D)

View file

@ -1392,7 +1392,7 @@ std::string GenerateDecodingShader(TextureFormat format, TLUTFormat palette_form
if (!info)
return "";
std::stringstream ss;
std::ostringstream ss;
switch (palette_format)
{
case TLUTFormat::IA8:
@ -1414,7 +1414,7 @@ std::string GenerateDecodingShader(TextureFormat format, TLUTFormat palette_form
std::string GeneratePaletteConversionShader(TLUTFormat palette_format, APIType api_type)
{
std::stringstream ss;
std::ostringstream ss;
ss << R"(
int Convert3To8(int v)

View file

@ -768,12 +768,12 @@ void VertexManagerBase::OnEndFrame()
#if 0
{
std::stringstream ss;
std::ostringstream ss;
std::for_each(m_cpu_accesses_this_frame.begin(), m_cpu_accesses_this_frame.end(), [&ss](u32 idx) { ss << idx << ","; });
WARN_LOG(VIDEO, "CPU EFB accesses in last frame: %s", ss.str().c_str());
}
{
std::stringstream ss;
std::ostringstream ss;
std::for_each(m_scheduled_command_buffer_kicks.begin(), m_scheduled_command_buffer_kicks.end(), [&ss](u32 idx) { ss << idx << ","; });
WARN_LOG(VIDEO, "Scheduled command buffer kicks: %s", ss.str().c_str());
}