Convert 'const string&' to 'string_view', as per C++17 recommendations. WIP.

This commit is contained in:
Stephen Anthony 2022-12-16 19:15:30 -03:30
parent e1ef0045ac
commit 31cc0884db
172 changed files with 668 additions and 655 deletions

View File

@ -21,11 +21,11 @@
#include "BankRomCheat.hxx" #include "BankRomCheat.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BankRomCheat::BankRomCheat(OSystem& os, const string& name, const string& code) BankRomCheat::BankRomCheat(OSystem& os, string_view name, string_view code)
: Cheat(os, name, code) : Cheat(os, name, code)
{ {
if(myCode.length() == 7) if(myCode.length() == 7)
myCode = "0" + code; myCode = "0" + string{code};
bank = unhex(myCode.substr(0, 2)); bank = unhex(myCode.substr(0, 2));
address = 0xf000 + unhex(myCode.substr(2, 3)); address = 0xf000 + unhex(myCode.substr(2, 3));

View File

@ -23,7 +23,7 @@
class BankRomCheat : public Cheat class BankRomCheat : public Cheat
{ {
public: public:
BankRomCheat(OSystem& os, const string& name, const string& code); BankRomCheat(OSystem& os, string_view name, string_view code);
~BankRomCheat() override = default; ~BankRomCheat() override = default;
bool enable() override; bool enable() override;

View File

@ -25,7 +25,7 @@ class OSystem;
class Cheat class Cheat
{ {
public: public:
Cheat(OSystem& osystem, const string& name, const string& code) Cheat(OSystem& osystem, string_view name, string_view code)
: myOSystem{osystem}, : myOSystem{osystem},
myName{name == "" ? code : name}, myName{name == "" ? code : name},
myCode{code} { } myCode{code} { }
@ -41,7 +41,7 @@ class Cheat
virtual void evaluate() = 0; virtual void evaluate() = 0;
protected: protected:
static uInt16 unhex(const string& hex) static uInt16 unhex(string_view hex)
{ {
int ret = 0; int ret = 0;
for(const auto c: hex) for(const auto c: hex)

View File

@ -33,7 +33,7 @@ CheatManager::CheatManager(OSystem& osystem)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CheatManager::add(const string& name, const string& code, bool CheatManager::add(string_view name, string_view code,
bool enable, int idx) bool enable, int idx)
{ {
const shared_ptr<Cheat> cheat = createCheat(name, code); const shared_ptr<Cheat> cheat = createCheat(name, code);
@ -79,7 +79,7 @@ void CheatManager::remove(int idx)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CheatManager::addPerFrame(const string& name, const string& code, bool enable) void CheatManager::addPerFrame(string_view name, string_view code, bool enable)
{ {
// The actual cheat will always be in the main list; we look there first // The actual cheat will always be in the main list; we look there first
shared_ptr<Cheat> cheat; shared_ptr<Cheat> cheat;
@ -117,7 +117,7 @@ void CheatManager::addPerFrame(const string& name, const string& code, bool enab
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CheatManager::addOneShot(const string& name, const string& code) void CheatManager::addOneShot(string_view name, string_view code)
{ {
// Evaluate this cheat once, and then immediately discard it // Evaluate this cheat once, and then immediately discard it
const shared_ptr<Cheat> cheat = createCheat(name, code); const shared_ptr<Cheat> cheat = createCheat(name, code);
@ -126,7 +126,7 @@ void CheatManager::addOneShot(const string& name, const string& code)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
shared_ptr<Cheat> CheatManager::createCheat(const string& name, const string& code) const shared_ptr<Cheat> CheatManager::createCheat(string_view name, string_view code) const
{ {
if(!isValidCode(code)) if(!isValidCode(code))
return nullptr; return nullptr;
@ -143,7 +143,7 @@ shared_ptr<Cheat> CheatManager::createCheat(const string& name, const string& co
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CheatManager::parse(const string& cheats) void CheatManager::parse(string_view cheats)
{ {
StringList s; StringList s;
string::size_type lastPos = cheats.find_first_not_of(',', 0); string::size_type lastPos = cheats.find_first_not_of(',', 0);
@ -198,7 +198,7 @@ void CheatManager::parse(const string& cheats)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CheatManager::enable(const string& code, bool enable) void CheatManager::enable(string_view code, bool enable)
{ {
for(const auto& cheat: myCheatList) for(const auto& cheat: myCheatList)
{ {
@ -263,7 +263,7 @@ void CheatManager::saveCheatDatabase()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CheatManager::loadCheats(const string& md5sum) void CheatManager::loadCheats(string_view md5sum)
{ {
myPerFrameList.clear(); myPerFrameList.clear();
myCheatList.clear(); myCheatList.clear();
@ -287,7 +287,7 @@ void CheatManager::loadCheats(const string& md5sum)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CheatManager::saveCheats(const string& md5sum) void CheatManager::saveCheats(string_view md5sum)
{ {
ostringstream cheats; ostringstream cheats;
for(uInt32 i = 0; i < myCheatList.size(); ++i) for(uInt32 i = 0; i < myCheatList.size(); ++i)
@ -322,7 +322,7 @@ void CheatManager::saveCheats(const string& md5sum)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CheatManager::isValidCode(const string& code) bool CheatManager::isValidCode(string_view code)
{ {
for(const auto c: code) for(const auto c: code)
if(!isxdigit(c)) if(!isxdigit(c))

View File

@ -49,7 +49,7 @@ class CheatManager
@return Whether the cheat was created and enabled. @return Whether the cheat was created and enabled.
*/ */
bool add(const string& name, const string& code, bool add(string_view name, string_view code,
bool enable = true, int idx = -1); bool enable = true, int idx = -1);
/** /**
@ -68,7 +68,7 @@ class CheatManager
@param code The actual cheatcode @param code The actual cheatcode
@param enable Add or remove the cheat to the per-frame list @param enable Add or remove the cheat to the per-frame list
*/ */
void addPerFrame(const string& name, const string& code, bool enable); void addPerFrame(string_view name, string_view code, bool enable);
/** /**
Creates and enables a one-shot cheat. One-shot cheats are the Creates and enables a one-shot cheat. One-shot cheats are the
@ -78,7 +78,7 @@ class CheatManager
@param name Name of the cheat (not absolutely required) @param name Name of the cheat (not absolutely required)
@param code The actual cheatcode (in hex) @param code The actual cheatcode (in hex)
*/ */
void addOneShot(const string& name, const string& code); void addOneShot(string_view name, string_view code);
/** /**
Enable/disabled the cheat specified by the given code. Enable/disabled the cheat specified by the given code.
@ -86,7 +86,7 @@ class CheatManager
@param code The actual cheatcode to search for @param code The actual cheatcode to search for
@param enable Enable/disable the cheat @param enable Enable/disable the cheat
*/ */
void enable(const string& code, bool enable); void enable(string_view code, bool enable);
/** /**
Returns the game cheatlist. Returns the game cheatlist.
@ -111,17 +111,17 @@ class CheatManager
/** /**
Load cheats for ROM with given MD5sum to cheatlist(s). Load cheats for ROM with given MD5sum to cheatlist(s).
*/ */
void loadCheats(const string& md5sum); void loadCheats(string_view md5sum);
/** /**
Saves cheats for ROM with given MD5sum to cheat map. Saves cheats for ROM with given MD5sum to cheat map.
*/ */
void saveCheats(const string& md5sum); void saveCheats(string_view md5sum);
/** /**
Checks if a code is valid. Checks if a code is valid.
*/ */
static bool isValidCode(const string& code); static bool isValidCode(string_view code);
private: private:
/** /**
@ -132,14 +132,14 @@ class CheatManager
@return The cheat (if was created), else nullptr. @return The cheat (if was created), else nullptr.
*/ */
shared_ptr<Cheat> createCheat(const string& name, const string& code) const; shared_ptr<Cheat> createCheat(string_view name, string_view code) const;
/** /**
Parses a list of cheats and adds/enables each one. Parses a list of cheats and adds/enables each one.
@param cheats Comma-separated list of cheats (without any names) @param cheats Comma-separated list of cheats (without any names)
*/ */
void parse(const string& cheats); void parse(string_view cheats);
private: private:
OSystem& myOSystem; OSystem& myOSystem;
@ -147,7 +147,7 @@ class CheatManager
CheatList myCheatList; CheatList myCheatList;
CheatList myPerFrameList; CheatList myPerFrameList;
std::map<string,string> myCheatMap; std::map<string,string, std::less<>> myCheatMap;
string myCheatFile; string myCheatFile;
// This is set each time a new cheat/ROM is loaded, for later // This is set each time a new cheat/ROM is loaded, for later

View File

@ -21,7 +21,7 @@
#include "CheetahCheat.hxx" #include "CheetahCheat.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CheetahCheat::CheetahCheat(OSystem& os, const string& name, const string& code) CheetahCheat::CheetahCheat(OSystem& os, string_view name, string_view code)
: Cheat(os, name, code), : Cheat(os, name, code),
address{static_cast<uInt16>(0xf000 + unhex(code.substr(0, 3)))}, address{static_cast<uInt16>(0xf000 + unhex(code.substr(0, 3)))},
value{static_cast<uInt8>(unhex(code.substr(3, 2)))}, value{static_cast<uInt8>(unhex(code.substr(3, 2)))},

View File

@ -23,7 +23,7 @@
class CheetahCheat : public Cheat class CheetahCheat : public Cheat
{ {
public: public:
CheetahCheat(OSystem& os, const string& name, const string& code); CheetahCheat(OSystem& os, string_view name, string_view code);
~CheetahCheat() override = default; ~CheetahCheat() override = default;
bool enable() override; bool enable() override;

View File

@ -23,7 +23,7 @@
#include "RamCheat.hxx" #include "RamCheat.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RamCheat::RamCheat(OSystem& os, const string& name, const string& code) RamCheat::RamCheat(OSystem& os, string_view name, string_view code)
: Cheat(os, name, code), : Cheat(os, name, code),
address{static_cast<uInt16>(unhex(myCode.substr(0, 2)))}, address{static_cast<uInt16>(unhex(myCode.substr(0, 2)))},
value{static_cast<uInt8>(unhex(myCode.substr(2, 2)))} value{static_cast<uInt8>(unhex(myCode.substr(2, 2)))}

View File

@ -23,7 +23,7 @@
class RamCheat : public Cheat class RamCheat : public Cheat
{ {
public: public:
RamCheat(OSystem& os, const string& name, const string& code); RamCheat(OSystem& os, string_view name, string_view code);
~RamCheat() override = default; ~RamCheat() override = default;
bool enable() override; bool enable() override;

View File

@ -454,14 +454,14 @@ bool FBBackendSDL2::createRenderer()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FBBackendSDL2::setTitle(const string& title) void FBBackendSDL2::setTitle(string_view title)
{ {
ASSERT_MAIN_THREAD; ASSERT_MAIN_THREAD;
myScreenTitle = title; myScreenTitle = title;
if(myWindow) if(myWindow)
SDL_SetWindowTitle(myWindow, title.c_str()); SDL_SetWindowTitle(myWindow, string{title}.c_str());
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -78,7 +78,7 @@ class FBBackendSDL2 : public FBBackend
@param title The title of the application / window @param title The title of the application / window
*/ */
void setTitle(const string& title) override; void setTitle(string_view title) override;
/** /**
Shows or hides the cursor based on the given boolean value. Shows or hides the cursor based on the given boolean value.

View File

@ -44,7 +44,7 @@ class FSNodeFactory
enum class Type { SYSTEM, ZIP }; enum class Type { SYSTEM, ZIP };
public: public:
static unique_ptr<AbstractFSNode> create(const string& path, Type type) static unique_ptr<AbstractFSNode> create(string_view path, Type type)
{ {
switch(type) switch(type)
{ {

View File

@ -26,7 +26,7 @@
#include "FSNodeZIP.hxx" #include "FSNodeZIP.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FSNodeZIP::FSNodeZIP(const string& p) FSNodeZIP::FSNodeZIP(string_view p)
{ {
// Extract ZIP file and virtual file (if specified) // Extract ZIP file and virtual file (if specified)
const size_t pos = BSPF::findIgnoreCase(p, ".zip"); const size_t pos = BSPF::findIgnoreCase(p, ".zip");

View File

@ -40,11 +40,11 @@ class FSNodeZIP : public AbstractFSNode
* *
* @param path String with the path the new node should point to. * @param path String with the path the new node should point to.
*/ */
explicit FSNodeZIP(const string& path); explicit FSNodeZIP(string_view path);
bool exists() const override; bool exists() const override;
const string& getName() const override { return _name; } const string& getName() const override { return _name; }
void setName(const string& name) override { _name = name; } void setName(string_view name) override { _name = name; }
const string& getPath() const override { return _path; } const string& getPath() const override { return _path; }
string getShortPath() const override { return _shortPath; } string getShortPath() const override { return _shortPath; }
bool hasParent() const override { return true; } bool hasParent() const override { return true; }
@ -56,7 +56,7 @@ class FSNodeZIP : public AbstractFSNode
////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
// For now, ZIP files cannot be modified in any way // For now, ZIP files cannot be modified in any way
bool makeDir() override { return false; } bool makeDir() override { return false; }
bool rename(const string& newfile) override { return false; } bool rename(string_view) override { return false; }
////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
size_t getSize() const override { return _size; } size_t getSize() const override { return _size; }

View File

@ -537,9 +537,9 @@ HSM::ScoreAddresses HighScoresManager::getPropScoreAddr(const json& jprops)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt16 HighScoresManager::fromHexStr(const string& addr) uInt16 HighScoresManager::fromHexStr(string_view addr)
{ {
string naked = addr; string naked{addr};
if(const int pos = naked.find("0x") != std::string::npos) if(const int pos = naked.find("0x") != std::string::npos)
naked = naked.substr(pos + 1); naked = naked.substr(pos + 1);

View File

@ -232,7 +232,7 @@ class HighScoresManager
uInt16 defVal = 0); uInt16 defVal = 0);
static HSM::ScoreAddresses getPropScoreAddr(const json& jprops); static HSM::ScoreAddresses getPropScoreAddr(const json& jprops);
static uInt16 fromHexStr(const string& addr); static uInt16 fromHexStr(string_view addr);
static Int32 fromBCD(uInt8 bcd); static Int32 fromBCD(uInt8 bcd);
string hash(const HSM::ScoresData& data) const; string hash(const HSM::ScoresData& data) const;

View File

@ -26,44 +26,46 @@ Logger& Logger::instance()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Logger::log(const string& message, Level level) void Logger::log(string_view message, Level level)
{ {
instance().logMessage(message, level); instance().logMessage(message, level);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Logger::error(const string& message) void Logger::error(string_view message)
{ {
instance().logMessage(message, Level::ERR); instance().logMessage(message, Level::ERR);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Logger::info(const string& message) void Logger::info(string_view message)
{ {
instance().logMessage(message, Level::INFO); instance().logMessage(message, Level::INFO);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Logger::debug(const string& message) void Logger::debug(string_view message)
{ {
instance().logMessage(message, Level::DEBUG); instance().logMessage(message, Level::DEBUG);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Logger::logMessage(const string& message, Level level) void Logger::logMessage(string_view message, Level level)
{ {
const std::lock_guard<std::mutex> lock(mutex); const std::lock_guard<std::mutex> lock(mutex);
if(level == Logger::Level::ERR) if(level == Logger::Level::ERR)
{ {
cout << message << endl << std::flush; cout << message << endl << std::flush;
myLogMessages += message + "\n"; myLogMessages += message;
myLogMessages += "\n";
} }
else if(static_cast<int>(level) <= myLogLevel || else if(static_cast<int>(level) <= myLogLevel ||
level == Logger::Level::ALWAYS) level == Logger::Level::ALWAYS)
{ {
if(myLogToConsole) if(myLogToConsole)
cout << message << endl << std::flush; cout << message << endl << std::flush;
myLogMessages += message + "\n"; myLogMessages += message;
myLogMessages += "\n";
} }
} }

View File

@ -40,13 +40,13 @@ class Logger {
static Logger& instance(); static Logger& instance();
static void log(const string& message, Level level = Level::ALWAYS); static void log(string_view message, Level level = Level::ALWAYS);
static void error(const string& message); static void error(string_view message);
static void info(const string& message); static void info(string_view message);
static void debug(const string& message); static void debug(string_view message);
void setLogParameters(int logLevel, bool logToConsole); void setLogParameters(int logLevel, bool logToConsole);
void setLogParameters(Level logLevel, bool logToConsole); void setLogParameters(Level logLevel, bool logToConsole);
@ -66,7 +66,7 @@ class Logger {
std::mutex mutex; std::mutex mutex;
private: private:
void logMessage(const string& message, Level level); void logMessage(string_view message, Level level);
Logger(const Logger&) = delete; Logger(const Logger&) = delete;
Logger(Logger&&) = delete; Logger(Logger&&) = delete;

View File

@ -23,12 +23,12 @@
#include "MouseControl.hxx" #include "MouseControl.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MouseControl::MouseControl(Console& console, const string& mode) MouseControl::MouseControl(Console& console, string_view mode)
: myProps{console.properties()}, : myProps{console.properties()},
myLeftController{console.leftController()}, myLeftController{console.leftController()},
myRightController{console.rightController()} myRightController{console.rightController()}
{ {
istringstream m_axis(mode); istringstream m_axis(string{mode}); // TODO: fixed in C++20
string m_mode; string m_mode;
m_axis >> m_mode; m_axis >> m_mode;

View File

@ -55,7 +55,7 @@ class MouseControl
@param console The console in use by the system @param console The console in use by the system
@param mode Contains information about how to use the mouse axes/buttons @param mode Contains information about how to use the mouse axes/buttons
*/ */
MouseControl(Console& console, const string& mode); MouseControl(Console& console, string_view mode);
/** /**
Cycle through each available mouse control mode Cycle through each available mouse control mode
@ -85,10 +85,10 @@ class MouseControl
int xid{-1}, yid{-1}; int xid{-1}, yid{-1};
string message; string message;
explicit MouseMode(const string& msg = "") : message{msg} { } explicit MouseMode(string_view msg = "") : message{msg} { }
MouseMode(Controller::Type xt, int xi, MouseMode(Controller::Type xt, int xi,
Controller::Type yt, int yi, Controller::Type yt, int yi,
const string& msg) string_view msg)
: xtype{xt}, ytype{yt}, xid{xi}, yid{yi}, message{msg} { } : xtype{xt}, ytype{yt}, xid{xi}, yid{yi}, message{msg} { }
friend ostream& operator<<(ostream& os, const MouseMode& mm) friend ostream& operator<<(ostream& os, const MouseMode& mm)

View File

@ -217,7 +217,7 @@ bool PhysicalJoystickHandler::remove(int id)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool PhysicalJoystickHandler::remove(const string& name) bool PhysicalJoystickHandler::remove(string_view name)
{ {
const auto it = myDatabase.find(name); const auto it = myDatabase.find(name);
if(it != myDatabase.end() && it->second.joy == nullptr) if(it != myDatabase.end() && it->second.joy == nullptr)
@ -229,7 +229,7 @@ bool PhysicalJoystickHandler::remove(const string& name)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool PhysicalJoystickHandler::mapStelladaptors(const string& saport, int ID) bool PhysicalJoystickHandler::mapStelladaptors(string_view saport, int ID)
{ {
bool erased = false; bool erased = false;
// saport will have two values: // saport will have two values:

View File

@ -73,8 +73,8 @@ class PhysicalJoystickHandler
/** Return stick ID on success, -1 on failure. */ /** Return stick ID on success, -1 on failure. */
int add(const PhysicalJoystickPtr& stick); int add(const PhysicalJoystickPtr& stick);
bool remove(int id); bool remove(int id);
bool remove(const string& name); bool remove(string_view name);
bool mapStelladaptors(const string& saport, int ID = -1); bool mapStelladaptors(string_view saport, int ID = -1);
bool hasStelladaptors() const; bool hasStelladaptors() const;
void setDefaultMapping(Event::Type event, EventMode mode); void setDefaultMapping(Event::Type event, EventMode mode);
@ -126,7 +126,7 @@ class PhysicalJoystickHandler
void changeDrivingSensitivity(int direction = +1); void changeDrivingSensitivity(int direction = +1);
private: private:
using StickDatabase = std::map<string,StickInfo>; using StickDatabase = std::map<string, StickInfo, std::less<>>;
using StickList = std::map<int, PhysicalJoystickPtr>; using StickList = std::map<int, PhysicalJoystickPtr>;
OSystem& myOSystem; OSystem& myOSystem;

View File

@ -29,7 +29,7 @@ PaletteHandler::PaletteHandler(OSystem& system)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PaletteHandler::PaletteType PaletteHandler::toPaletteType(const string& name) const PaletteHandler::PaletteType PaletteHandler::toPaletteType(string_view name) const
{ {
if(name == SETTING_Z26) if(name == SETTING_Z26)
return PaletteType::Z26; return PaletteType::Z26;
@ -301,7 +301,7 @@ void PaletteHandler::getAdjustables(Adjustable& adjustable) const
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void PaletteHandler::setPalette(const string& name) void PaletteHandler::setPalette(string_view name)
{ {
myOSystem.settings().setValue("palette", name); myOSystem.settings().setValue("palette", name);

View File

@ -113,7 +113,7 @@ class PaletteHandler
@param name The palette to switch to @param name The palette to switch to
*/ */
void setPalette(const string& name); void setPalette(string_view name);
/** /**
Sets the palette from current settings. Sets the palette from current settings.
@ -178,7 +178,7 @@ class PaletteHandler
@return The palette type @return The palette type
*/ */
PaletteType toPaletteType(const string& name) const; PaletteType toPaletteType(string_view name) const;
/** /**
Convert enumeration to palette settings name. Convert enumeration to palette settings name.

View File

@ -37,9 +37,9 @@ struct Point
constexpr Point() = default; constexpr Point() = default;
explicit constexpr Point(Int32 x1, Int32 y1) : x{x1}, y{y1} { } explicit constexpr Point(Int32 x1, Int32 y1) : x{x1}, y{y1} { }
explicit Point(const string& p) { explicit Point(string_view p) {
char c = '\0'; char c = '\0';
istringstream buf(p); istringstream buf(string{p}); // TODO: fixed in C++20
buf >> x >> c >> y; buf >> x >> c >> y;
if(c != 'x') if(c != 'x')
x = y = 0; x = y = 0;
@ -60,9 +60,9 @@ struct Size
constexpr Size() = default; constexpr Size() = default;
explicit constexpr Size(uInt32 w1, uInt32 h1) : w{w1}, h{h1} { } explicit constexpr Size(uInt32 w1, uInt32 h1) : w{w1}, h{h1} { }
explicit Size(const string& s) { explicit Size(string_view s) {
char c = '\0'; char c = '\0';
istringstream buf(s); istringstream buf(string{s}); // TODO: fixed in C++20
buf >> w >> c >> h; buf >> w >> c >> h;
if(c != 'x') if(c != 'x')
w = h = 0; w = h = 0;

View File

@ -96,7 +96,7 @@ void RewindManager::setup()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool RewindManager::addState(const string& message, bool timeMachine) bool RewindManager::addState(string_view message, bool timeMachine)
{ {
// only check for Time Machine states, ignore for debugger // only check for Time Machine states, ignore for debugger
if(timeMachine && myStateList.currentIsValid()) if(timeMachine && myStateList.currentIsValid())

View File

@ -107,7 +107,7 @@ class RewindManager
@param message Message to display when replaying this state @param message Message to display when replaying this state
*/ */
bool addState(const string& message, bool timeMachine = false); bool addState(string_view message, bool timeMachine = false);
/** /**
Rewind numStates levels of the state list, and display the message associated Rewind numStates levels of the state list, and display the message associated

View File

@ -36,7 +36,7 @@ namespace {
} // namespace } // namespace
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StaggeredLogger::StaggeredLogger(const string& message, Logger::Level level) StaggeredLogger::StaggeredLogger(string_view message, Logger::Level level)
: myMessage{message}, : myMessage{message},
myLevel{level} myLevel{level}
{ {

View File

@ -38,7 +38,7 @@ class StaggeredLogger
{ {
public: public:
StaggeredLogger(const string& message, Logger::Level level); StaggeredLogger(string_view message, Logger::Level level);
~StaggeredLogger(); ~StaggeredLogger();
void log(); void log();

View File

@ -139,7 +139,7 @@ void StateManager::toggleTimeMachine()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool StateManager::addExtraState(const string& message) bool StateManager::addExtraState(string_view message)
{ {
if(myActiveMode == Mode::TimeMachine) if(myActiveMode == Mode::TimeMachine)
{ {

View File

@ -77,7 +77,7 @@ class StateManager
Optionally adds one extra state when entering the Time Machine dialog; Optionally adds one extra state when entering the Time Machine dialog;
this uses the RewindManager for its functionality. this uses the RewindManager for its functionality.
*/ */
bool addExtraState(const string& message); bool addExtraState(string_view message);
/** /**
Rewinds states; this uses the RewindManager for its functionality. Rewinds states; this uses the RewindManager for its functionality.

View File

@ -34,9 +34,9 @@ class StringParser
@param str The string to split @param str The string to split
*/ */
explicit StringParser(const string& str) explicit StringParser(string_view str)
{ {
istringstream buf(str); istringstream buf(string{str}); // TODO: fixed in C++20
string line; string line;
while(std::getline(buf, line, '\n')) while(std::getline(buf, line, '\n'))

View File

@ -45,6 +45,7 @@ class Variant
Variant() = default; // NOLINT Variant() = default; // NOLINT
Variant(const string& s) : data{s} { } Variant(const string& s) : data{s} { }
Variant(string_view s) : data{s} { }
Variant(const char* s) : data{s} { } Variant(const char* s) : data{s} { }
Variant(Int32 i) { buf().str(""); buf() << i; data = buf().str(); } Variant(Int32 i) { buf().str(""); buf() << i; data = buf().str(); }

View File

@ -193,6 +193,12 @@ namespace BSPF
} }
// Convert string to integer, using default value on any error // Convert string to integer, using default value on any error
inline int stringToInt(string_view s, const int defaultValue = 0)
{
try { return std::stoi(string{s}); }
catch(...) { return defaultValue; }
}
// TODO: remove this once we reimplement stoi
inline int stringToInt(const string& s, const int defaultValue = 0) inline int stringToInt(const string& s, const int defaultValue = 0)
{ {
try { return std::stoi(s); } try { return std::stoi(s); }
@ -285,7 +291,7 @@ namespace BSPF
// (case sensitive for upper case characters in second string, except first one) // (case sensitive for upper case characters in second string, except first one)
// - the first character must match // - the first character must match
// - the following characters must appear in the order of the first string // - the following characters must appear in the order of the first string
inline bool matchesCamelCase(const string_view s1, const string_view s2) inline bool matchesCamelCase(string_view s1, string_view s2)
{ {
// skip leading '_' for matching // skip leading '_' for matching
const uInt32 ofs = (s1[0] == '_' && s2[0] == '_') ? 1 : 0; const uInt32 ofs = (s1[0] == '_' && s2[0] == '_') ? 1 : 0;
@ -330,7 +336,7 @@ namespace BSPF
// @param str The searched string // @param str The searched string
// @param pattern The pattern to search for // @param pattern The pattern to search for
// @return Position of pattern in string. // @return Position of pattern in string.
inline size_t matchWithJoker(const string& str, const string& pattern) inline size_t matchWithJoker(string_view str, string_view pattern)
{ {
if(str.length() >= pattern.length()) if(str.length() >= pattern.length())
{ {
@ -361,9 +367,9 @@ namespace BSPF
// @param str The searched string // @param str The searched string
// @param pattern The pattern to search for // @param pattern The pattern to search for
// @return True if pattern was found. // @return True if pattern was found.
inline bool matchWithWildcards(const string& str, const string& pattern) inline bool matchWithWildcards(string_view str, string_view pattern)
{ {
string pat = pattern; string pat{pattern}; // TODO: don't use copy
// remove leading and trailing '*' // remove leading and trailing '*'
size_t i = 0; size_t i = 0;
@ -394,7 +400,7 @@ namespace BSPF
} }
// Modify 'str', replacing all occurrences of 'from' with 'to' // Modify 'str', replacing all occurrences of 'from' with 'to'
inline void replaceAll(string& str, const string& from, const string& to) inline void replaceAll(string& str, string_view from, string_view to)
{ {
if(from.empty()) return; if(from.empty()) return;
size_t start_pos = 0; size_t start_pos = 0;
@ -407,11 +413,11 @@ namespace BSPF
} }
// Trim leading and trailing whitespace from a string // Trim leading and trailing whitespace from a string
inline string trim(const string& str) inline string trim(string_view str)
{ {
const auto first = str.find_first_not_of(' '); const auto first = str.find_first_not_of(' ');
return (first == string::npos) ? EmptyString : return (first == string::npos) ? EmptyString :
str.substr(first, str.find_last_not_of(' ')-first+1); string{str.substr(first, str.find_last_not_of(' ')-first+1)};
} }
// C++11 way to get local time // C++11 way to get local time

View File

@ -119,8 +119,8 @@ FBInitStatus Debugger::initializeVideo()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool Debugger::start(const string& message, int address, bool read, bool Debugger::start(string_view message, int address, bool read,
const string& toolTip) string_view toolTip)
{ {
if(myOSystem.eventHandler().enterDebugMode()) if(myOSystem.eventHandler().enterDebugMode())
{ {
@ -139,7 +139,7 @@ bool Debugger::start(const string& message, int address, bool read,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool Debugger::startWithFatalError(const string& message) bool Debugger::startWithFatalError(string_view message)
{ {
if(myOSystem.eventHandler().enterDebugMode()) if(myOSystem.eventHandler().enterDebugMode())
{ {
@ -218,7 +218,7 @@ TrapArray& Debugger::writeTraps() const
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string Debugger::run(const string& command) string Debugger::run(string_view command)
{ {
return myParser->run(command); return myParser->run(command);
} }
@ -450,7 +450,7 @@ bool Debugger::writeTrap(uInt16 t) const
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Debugger::log(const string& triggerMsg) void Debugger::log(string_view triggerMsg)
{ {
const CartDebug::Disassembly& disasm = myCartDebug->disassembly(); const CartDebug::Disassembly& disasm = myCartDebug->disassembly();
const int pc = myCpuDebug->pc(); const int pc = myCpuDebug->pc();
@ -719,7 +719,7 @@ string Debugger::showWatches()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int Debugger::stringToValue(const string& stringval) int Debugger::stringToValue(string_view stringval)
{ {
return myParser->decipher_arg(stringval); return myParser->decipher_arg(stringval);
} }
@ -745,7 +745,7 @@ void Debugger::saveOldState(bool clearDirtyPages)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Debugger::addState(const string& rewindMsg) void Debugger::addState(string_view rewindMsg)
{ {
// Add another rewind level to the Time Machine buffer // Add another rewind level to the Time Machine buffer
RewindManager& r = myOSystem.state().rewindManager(); RewindManager& r = myOSystem.state().rewindManager();
@ -788,7 +788,7 @@ void Debugger::setQuitState()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool Debugger::addFunction(const string& name, const string& definition, bool Debugger::addFunction(string_view name, string_view definition,
Expression* exp, bool builtin) Expression* exp, bool builtin)
{ {
myFunctions.emplace(name, unique_ptr<Expression>(exp)); myFunctions.emplace(name, unique_ptr<Expression>(exp));
@ -798,14 +798,14 @@ bool Debugger::addFunction(const string& name, const string& definition,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool Debugger::isBuiltinFunction(const string& name) bool Debugger::isBuiltinFunction(string_view name)
{ {
return std::any_of(ourBuiltinFunctions.cbegin(), ourBuiltinFunctions.cend(), return std::any_of(ourBuiltinFunctions.cbegin(), ourBuiltinFunctions.cend(),
[&](const auto& func) { return name == func.name; }); [&](const auto& func) { return name == func.name; });
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool Debugger::delFunction(const string& name) bool Debugger::delFunction(string_view name)
{ {
const auto& iter = myFunctions.find(name); const auto& iter = myFunctions.find(name);
if(iter == myFunctions.end()) if(iter == myFunctions.end())
@ -815,25 +815,25 @@ bool Debugger::delFunction(const string& name)
if(isBuiltinFunction(name)) if(isBuiltinFunction(name))
return false; return false;
myFunctions.erase(name); myFunctions.erase(string{name});
const auto& def_iter = myFunctionDefs.find(name); const auto& def_iter = myFunctionDefs.find(name);
if(def_iter == myFunctionDefs.end()) if(def_iter == myFunctionDefs.end())
return false; return false;
myFunctionDefs.erase(name); myFunctionDefs.erase(string{name});
return true; return true;
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
const Expression& Debugger::getFunction(const string& name) const const Expression& Debugger::getFunction(string_view name) const
{ {
const auto& iter = myFunctions.find(name); const auto& iter = myFunctions.find(name);
return iter != myFunctions.end() ? *(iter->second) : EmptyExpression; return iter != myFunctions.end() ? *(iter->second) : EmptyExpression;
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
const string& Debugger::getFunctionDef(const string& name) const const string& Debugger::getFunctionDef(string_view name) const
{ {
const auto& iter = myFunctionDefs.find(name); const auto& iter = myFunctionDefs.find(name);
return iter != myFunctionDefs.end() ? iter->second : EmptyString; return iter != myFunctionDefs.end() ? iter->second : EmptyString;

View File

@ -67,8 +67,8 @@ class Debugger : public DialogContainer
friend class M6502; friend class M6502;
public: public:
using FunctionMap = std::map<string, unique_ptr<Expression>>; using FunctionMap = std::map<string, unique_ptr<Expression>, std::less<>>;
using FunctionDefMap = std::map<string, string>; using FunctionDefMap = std::map<string, string, std::less<>>;
/** /**
Create a new debugger parent object Create a new debugger parent object
@ -94,9 +94,9 @@ class Debugger : public DialogContainer
@param message Message to display when entering debugger @param message Message to display when entering debugger
@param address An address associated with the message @param address An address associated with the message
*/ */
bool start(const string& message = "", int address = -1, bool read = true, bool start(string_view message = "", int address = -1, bool read = true,
const string& toolTip = ""); string_view toolTip = "");
bool startWithFatalError(const string& message = ""); bool startWithFatalError(string_view message = "");
/** /**
Wrapper method for EventHandler::leaveDebugMode() for those classes Wrapper method for EventHandler::leaveDebugMode() for those classes
@ -109,13 +109,13 @@ class Debugger : public DialogContainer
*/ */
void quit(); void quit();
bool addFunction(const string& name, const string& def, bool addFunction(string_view name, string_view def,
Expression* exp, bool builtin = false); Expression* exp, bool builtin = false);
static bool isBuiltinFunction(const string& name); static bool isBuiltinFunction(string_view name);
bool delFunction(const string& name); bool delFunction(string_view name);
const Expression& getFunction(const string& name) const; const Expression& getFunction(string_view name) const;
const string& getFunctionDef(const string& name) const; const string& getFunctionDef(string_view name) const;
FunctionDefMap getFunctionDefMap() const; FunctionDefMap getFunctionDefMap() const;
static string builtinHelp(); static string builtinHelp();
@ -194,7 +194,7 @@ class Debugger : public DialogContainer
/** /**
Run the debugger command and return the result. Run the debugger command and return the result.
*/ */
string run(const string& command); string run(string_view command);
string autoExec(StringList* history); string autoExec(StringList* history);
@ -204,7 +204,7 @@ class Debugger : public DialogContainer
Convert between string->integer and integer->string, taking into Convert between string->integer and integer->string, taking into
account the current base format. account the current base format.
*/ */
int stringToValue(const string& stringval); int stringToValue(string_view stringval);
/* Convenience methods to get/set bit(s) in an 8-bit register */ /* Convenience methods to get/set bit(s) in an 8-bit register */
static uInt8 set_bit(uInt8 input, uInt8 bit, bool on) static uInt8 set_bit(uInt8 input, uInt8 bit, bool on)
@ -296,7 +296,7 @@ class Debugger : public DialogContainer
/** /**
Saves a rewind state with the given message. Saves a rewind state with the given message.
*/ */
void addState(const string& rewindMsg); void addState(string_view rewindMsg);
/** /**
Set initial state before entering the debugger. Set initial state before entering the debugger.
@ -326,7 +326,7 @@ class Debugger : public DialogContainer
bool readTrap(uInt16 t) const; bool readTrap(uInt16 t) const;
bool writeTrap(uInt16 t) const; bool writeTrap(uInt16 t) const;
void clearAllTraps() const; void clearAllTraps() const;
void log(const string& triggerMsg); void log(string_view triggerMsg);
// Set a bunch of RAM locations at once // Set a bunch of RAM locations at once
string setRAM(IntArray& args); string setRAM(IntArray& args);

View File

@ -134,7 +134,7 @@ class EqualsExpression : public Expression
class EquateExpression : public Expression class EquateExpression : public Expression
{ {
public: public:
EquateExpression(const string& label) : Expression(), myLabel{label} { } EquateExpression(string_view label) : Expression(), myLabel{label} { }
Int32 evaluate() const override Int32 evaluate() const override
{ return Debugger::debugger().cartDebug().getAddress(myLabel); } { return Debugger::debugger().cartDebug().getAddress(myLabel); }
@ -146,7 +146,7 @@ class EquateExpression : public Expression
class FunctionExpression : public Expression class FunctionExpression : public Expression
{ {
public: public:
FunctionExpression(const string& label) : Expression(), myLabel{label} { } FunctionExpression(string_view label) : Expression(), myLabel{label} { }
Int32 evaluate() const override Int32 evaluate() const override
{ return Debugger::debugger().getFunction(myLabel).evaluate(); } { return Debugger::debugger().getFunction(myLabel).evaluate(); }

View File

@ -66,7 +66,7 @@ DebuggerParser::DebuggerParser(Debugger& d, Settings& s)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// main entry point: PromptWidget calls this method. // main entry point: PromptWidget calls this method.
string DebuggerParser::run(const string& command) string DebuggerParser::run(string_view command)
{ {
#if 0 #if 0
// this was our parser test code. Left for reference. // this was our parser test code. Left for reference.
@ -163,7 +163,7 @@ string DebuggerParser::exec(const FSNode& file, StringList* history)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DebuggerParser::outputCommandError(const string& errorMsg, int command) void DebuggerParser::outputCommandError(string_view errorMsg, int command)
{ {
const string example = commands[command].extendedDesc.substr(commands[command].extendedDesc.find("Example:")); const string example = commands[command].extendedDesc.substr(commands[command].extendedDesc.find("Example:"));
@ -190,10 +190,10 @@ void DebuggerParser::getCompletions(const char* in, StringList& completions)
// they're valid, or -1 if they're not. // they're valid, or -1 if they're not.
// decipher_arg may be called by the GUI as needed. It is also called // decipher_arg may be called by the GUI as needed. It is also called
// internally by DebuggerParser::run() // internally by DebuggerParser::run()
int DebuggerParser::decipher_arg(const string& str) int DebuggerParser::decipher_arg(string_view str)
{ {
bool derefByte=false, derefWord=false, lobyte=false, hibyte=false, bin=false, dec=false; bool derefByte=false, derefWord=false, lobyte=false, hibyte=false, bin=false, dec=false;
string arg = str; string arg{str};
const Base::Fmt defaultBase = Base::format(); const Base::Fmt defaultBase = Base::format();
@ -330,7 +330,7 @@ string DebuggerParser::showWatches()
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool DebuggerParser::getArgs(const string& command, string& verb) bool DebuggerParser::getArgs(string_view command, string& verb)
{ {
ParseState state = ParseState::IN_COMMAND; ParseState state = ParseState::IN_COMMAND;
size_t i = 0; size_t i = 0;
@ -2456,7 +2456,7 @@ void DebuggerParser::executeTrapWriteIf()
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Wrapper function for trap(if)s // Wrapper function for trap(if)s
void DebuggerParser::executeTraps(bool read, bool write, const string& command, void DebuggerParser::executeTraps(bool read, bool write, string_view command,
bool hasCond) bool hasCond)
{ {
const uInt32 ofs = hasCond ? 1 : 0, const uInt32 ofs = hasCond ? 1 : 0,

View File

@ -35,7 +35,7 @@ class DebuggerParser
DebuggerParser(Debugger& debugger, Settings& settings); DebuggerParser(Debugger& debugger, Settings& settings);
/** Run the given command, and return the result */ /** Run the given command, and return the result */
string run(const string& command); string run(string_view command);
/** Execute parser commands given in 'file' */ /** Execute parser commands given in 'file' */
string exec(const FSNode& file, StringList* history = nullptr); string exec(const FSNode& file, StringList* history = nullptr);
@ -45,23 +45,23 @@ class DebuggerParser
static void getCompletions(const char* in, StringList& completions); static void getCompletions(const char* in, StringList& completions);
/** Evaluate the given expression using operators, current base, etc */ /** Evaluate the given expression using operators, current base, etc */
int decipher_arg(const string& str); int decipher_arg(string_view str);
/** String representation of all watches currently defined */ /** String representation of all watches currently defined */
string showWatches(); string showWatches();
static inline string red(const string& msg = "") static inline string red(string_view msg = "")
{ {
return char(kDbgColorRed & 0xff) + msg; return char(kDbgColorRed & 0xff) + string{msg};
} }
static inline string inverse(const string& msg = "") static inline string inverse(string_view msg = "")
{ {
// ASCII DEL char, decimal 127 // ASCII DEL char, decimal 127
return "\177" + msg; return "\177" + string{msg};
} }
private: private:
bool getArgs(const string& command, string& verb); bool getArgs(string_view command, string& verb);
bool validateArgs(int cmd); bool validateArgs(int cmd);
string eval(); string eval();
string saveScriptFile(string file); string saveScriptFile(string file);
@ -112,7 +112,7 @@ class DebuggerParser
uInt32 end{0}; uInt32 end{0};
string condition; string condition;
Trap(bool r, bool w, uInt32 b, uInt32 e, const string& c) Trap(bool r, bool w, uInt32 b, uInt32 e, string_view c)
: read(r), write(w), begin(b), end(e), condition(c) {} : read(r), write(w), begin(b), end(e), condition(c) {}
}; };
@ -146,7 +146,7 @@ class DebuggerParser
void listTimers(); void listTimers();
// output the error with the example provided for the command // output the error with the example provided for the command
void outputCommandError(const string& errorMsg, int command); void outputCommandError(string_view errorMsg, int command);
void executeDirective(Device::AccessType type); void executeDirective(Device::AccessType type);
@ -252,7 +252,7 @@ class DebuggerParser
void executeTrapReadIf(); void executeTrapReadIf();
void executeTrapWrite(); void executeTrapWrite();
void executeTrapWriteIf(); void executeTrapWriteIf();
void executeTraps(bool read, bool write, const string& command, bool cond = false); void executeTraps(bool read, bool write, string_view command, bool cond = false);
void executeTrapRW(uInt32 addr, bool read, bool write, bool add = true); // not exposed by debugger void executeTrapRW(uInt32 addr, bool read, bool write, bool add = true); // not exposed by debugger
void executeType(); void executeType();
void executeUHex(); void executeUHex();

View File

@ -1037,7 +1037,7 @@ string TIADebug::audFreq(uInt8 dist, uInt8 div) const
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string TIADebug::stringOnly(const string& value, bool changed) string TIADebug::stringOnly(string_view value, bool changed)
{ {
ostringstream buf; ostringstream buf;
@ -1051,7 +1051,7 @@ string TIADebug::stringOnly(const string& value, bool changed)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string TIADebug::decWithLabel(const string& label, uInt16 value, string TIADebug::decWithLabel(string_view label, uInt16 value,
bool changed, uInt16 width) bool changed, uInt16 width)
{ {
ostringstream buf; ostringstream buf;
@ -1069,7 +1069,7 @@ string TIADebug::decWithLabel(const string& label, uInt16 value,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string TIADebug::hexWithLabel(const string& label, uInt16 value, string TIADebug::hexWithLabel(string_view label, uInt16 value,
bool changed, uInt16 width) bool changed, uInt16 width)
{ {
ostringstream buf; ostringstream buf;
@ -1087,7 +1087,7 @@ string TIADebug::hexWithLabel(const string& label, uInt16 value,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string TIADebug::binWithLabel(const string& label, uInt16 value, bool changed) string TIADebug::binWithLabel(string_view label, uInt16 value, bool changed)
{ {
ostringstream buf; ostringstream buf;
@ -1104,13 +1104,13 @@ string TIADebug::binWithLabel(const string& label, uInt16 value, bool changed)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string TIADebug::boolWithLabel(const string& label, bool value, bool changed) string TIADebug::boolWithLabel(string_view label, bool value, bool changed)
{ {
ostringstream buf; ostringstream buf;
if(value) if(value)
{ {
string l = label; string l{label};
buf << "\177" << BSPF::toUpperCase(l) << "\177"; buf << "\177" << BSPF::toUpperCase(l) << "\177";
//return "+" + BSPF::toUpperCase(label); //return "+" + BSPF::toUpperCase(label);
} }

View File

@ -188,14 +188,14 @@ class TIADebug : public DebuggerSystem
static string colorSwatch(uInt8 c); static string colorSwatch(uInt8 c);
string audFreq(uInt8 dist, uInt8 div) const; string audFreq(uInt8 dist, uInt8 div) const;
static string stringOnly(const string& value, bool changed = false); static string stringOnly(string_view value, bool changed = false);
static string decWithLabel(const string& label, uInt16 value, static string decWithLabel(string_view label, uInt16 value,
bool changed = false, uInt16 width = 3); bool changed = false, uInt16 width = 3);
static string hexWithLabel(const string& label, uInt16 value, static string hexWithLabel(string_view label, uInt16 value,
bool changed = false, uInt16 width = 2); bool changed = false, uInt16 width = 2);
static string binWithLabel(const string& label, uInt16 value, static string binWithLabel(string_view label, uInt16 value,
bool changed = false); bool changed = false);
static string boolWithLabel(const string& label, bool value, static string boolWithLabel(string_view label, bool value,
bool changed = false); bool changed = false);
private: private:

View File

@ -582,7 +582,7 @@ void DataGridWidget::handleCommand(CommandSender* sender, int cmd,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DataGridWidget::setToolTip(int column, int row, const string& text) void DataGridWidget::setToolTip(int column, int row, string_view text)
{ {
if(row >= 0 && row < _rows && column >= 0 && column < _cols) if(row >= 0 && row < _rows && column >= 0 && column < _cols)
_toolTipList[row * _cols + column] = text; _toolTipList[row * _cols + column] = text;

View File

@ -85,7 +85,7 @@ class DataGridWidget : public EditableWidget
void setCrossed(bool enable); void setCrossed(bool enable);
using EditableWidget::setToolTip; using EditableWidget::setToolTip;
void setToolTip(int column, int row, const string& text); void setToolTip(int column, int row, string_view text);
string getToolTip(const Common::Point& pos) const override; string getToolTip(const Common::Point& pos) const override;
bool changedToolTip(const Common::Point& oldPos, const Common::Point& newPos) const override; bool changedToolTip(const Common::Point& oldPos, const Common::Point& newPos) const override;

View File

@ -434,7 +434,7 @@ void DebuggerDialog::createFont()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DebuggerDialog::showFatalMessage(const string& msg) void DebuggerDialog::showFatalMessage(string_view msg)
{ {
myFatalError = make_unique<GUI::MessageBox>(this, *myLFont, msg, _w-20, _h-20, myFatalError = make_unique<GUI::MessageBox>(this, *myLFont, msg, _w-20, _h-20,
kDDExitFatalCmd, "Exit ROM", "Continue", "Fatal error"); kDDExitFatalCmd, "Exit ROM", "Continue", "Fatal error");

View File

@ -49,7 +49,7 @@ class DebuggerDialog : public Dialog
{ {
public: public:
// Note: these sizes make sure that all major tabs are fully visible // Note: these sizes make sure that all major tabs are fully visible
// cart dependend information (e.g. DPC+) may require more space // cart dependend information (e.g. DPC+) may require more space
enum { enum {
kSmallFontMinW = 1090, kSmallFontMinH = 720, kSmallFontMinW = 1090, kSmallFontMinH = 720,
kMediumFontMinW = 1160, kMediumFontMinH = 770, kMediumFontMinW = 1160, kMediumFontMinH = 770,
@ -73,7 +73,7 @@ class DebuggerDialog : public Dialog
ButtonWidget& rewindButton() const { return *myRewindButton; } ButtonWidget& rewindButton() const { return *myRewindButton; }
ButtonWidget& unwindButton() const { return *myUnwindButton; } ButtonWidget& unwindButton() const { return *myUnwindButton; }
void showFatalMessage(const string& msg); void showFatalMessage(string_view msg);
void saveConfig() override; void saveConfig() override;
private: private:

View File

@ -569,10 +569,10 @@ int PromptWidget::historyDir(int& index, int direction)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void PromptWidget::historyAdd(const string& entry) void PromptWidget::historyAdd(string_view entry)
{ {
if(_historyIndex >= static_cast<int>(_history.size())) if(_historyIndex >= static_cast<int>(_history.size()))
_history.push_back(entry); _history.emplace_back(entry);
else else
_history[_historyIndex] = entry; _history[_historyIndex] = entry;
} }
@ -882,7 +882,7 @@ void PromptWidget::putcharIntern(int c)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void PromptWidget::print(const string& str) void PromptWidget::print(string_view str)
{ {
for(const auto c: str) for(const auto c: str)
putcharIntern(c); putcharIntern(c);

View File

@ -42,7 +42,7 @@ class PromptWidget : public Widget, public CommandSender
~PromptWidget() override = default; ~PromptWidget() override = default;
public: public:
void print(const string& str); void print(string_view str);
void printPrompt(); void printPrompt();
string saveBuffer(const FSNode& file); string saveBuffer(const FSNode& file);
@ -134,7 +134,7 @@ class PromptWidget : public Widget, public CommandSender
bool _exitedEarly{false}; bool _exitedEarly{false};
int historyDir(int& index, int direction); int historyDir(int& index, int direction);
void historyAdd(const string& entry); void historyAdd(string_view entry);
private: private:
// Following constructors and assignment operators not supported // Following constructors and assignment operators not supported

View File

@ -31,7 +31,7 @@
RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& nfont, RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& nfont,
int x, int y, int w, int h, int x, int y, int w, int h,
uInt32 ramsize, uInt32 numrows, uInt32 pagesize, uInt32 ramsize, uInt32 numrows, uInt32 pagesize,
const string& helpAnchor) string_view helpAnchor)
: Widget(boss, lfont, x, y, w, h), : Widget(boss, lfont, x, y, w, h),
CommandSender(boss), CommandSender(boss),
_nfont{nfont}, _nfont{nfont},
@ -393,7 +393,7 @@ void RamWidget::showInputBox(int cmd)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string RamWidget::doSearch(const string& str) string RamWidget::doSearch(string_view str)
{ {
bool comparisonSearch = true; bool comparisonSearch = true;
@ -450,7 +450,7 @@ string RamWidget::doSearch(const string& str)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string RamWidget::doCompare(const string& str) string RamWidget::doCompare(string_view str)
{ {
bool comparativeSearch = false; bool comparativeSearch = false;
int searchVal = 0, offset = 0; int searchVal = 0, offset = 0;
@ -475,7 +475,7 @@ string RamWidget::doCompare(const string& str)
if(str[0] == '-') if(str[0] == '-')
negative = true; negative = true;
string tmp = str; string tmp{str};
tmp.erase(0, 1); // remove the operator tmp.erase(0, 1); // remove the operator
offset = instance().debugger().stringToValue(tmp); offset = instance().debugger().stringToValue(tmp);
if(negative) if(negative)

View File

@ -36,7 +36,7 @@ class RamWidget : public Widget, public CommandSender
RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& nfont, RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& nfont,
int x, int y, int w, int h, int x, int y, int w, int h,
uInt32 ramsize, uInt32 numrows, uInt32 pagesize, uInt32 ramsize, uInt32 numrows, uInt32 pagesize,
const string& helpAnchor); string_view helpAnchor);
~RamWidget() override; ~RamWidget() override;
void loadConfig() override; void loadConfig() override;
@ -60,8 +60,8 @@ class RamWidget : public Widget, public CommandSender
void fillGrid(bool updateOld); void fillGrid(bool updateOld);
void showInputBox(int cmd); void showInputBox(int cmd);
string doSearch(const string& str); string doSearch(string_view str);
string doCompare(const string& str); string doCompare(string_view str);
void doRestart(); void doRestart();
void showSearchResults(); void showSearchResults();

View File

@ -27,12 +27,12 @@
#include "Cart.hxx" #include "Cart.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cartridge::Cartridge(const Settings& settings, const string& md5) Cartridge::Cartridge(const Settings& settings, string_view md5)
: mySettings{settings} : mySettings{settings}
{ {
const auto to_uInt32 = [](const string& s, uInt32 pos) { const auto to_uInt32 = [](string_view s, uInt32 pos) {
return static_cast<uInt32>(std::stoul(s.substr(pos, 8), nullptr, 16)); return static_cast<uInt32>(std::stoul(string{s.substr(pos, 8)}, nullptr, 16));
}; }; // FIXME: convert to string_view by replacing std::stoul
const uInt32 seed = to_uInt32(md5, 0) ^ to_uInt32(md5, 8) ^ const uInt32 seed = to_uInt32(md5, 0) ^ to_uInt32(md5, 8) ^
to_uInt32(md5, 16) ^ to_uInt32(md5, 24); to_uInt32(md5, 16) ^ to_uInt32(md5, 24);
@ -44,8 +44,7 @@ Cartridge::Cartridge(const Settings& settings, const string& md5)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Cartridge::setAbout(const string& about, const string& type, void Cartridge::setAbout(string_view about, string_view type, string_view id)
const string& id)
{ {
myAbout = about; myAbout = about;
myDetectedType = type; myDetectedType = type;

View File

@ -63,13 +63,13 @@ class Cartridge : public Device
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
@param md5 The md5sum of the cart image @param md5 The md5sum of the cart image
*/ */
Cartridge(const Settings& settings, const string& md5); Cartridge(const Settings& settings, string_view md5);
~Cartridge() override = default; ~Cartridge() override = default;
/** /**
Set/query some information about this cartridge. Set/query some information about this cartridge.
*/ */
void setAbout(const string& about, const string& type, const string& id); void setAbout(string_view about, string_view type, string_view id);
const string& about() const { return myAbout; } const string& about() const { return myAbout; }
const string& detectedType() const { return myDetectedType; } const string& detectedType() const { return myDetectedType; }
const string& multiCartID() const { return myMultiCartID; } const string& multiCartID() const { return myMultiCartID; }
@ -295,10 +295,9 @@ class Cartridge : public Device
Informs the cartridge about the name of the nvram file it will Informs the cartridge about the name of the nvram file it will
use; not all carts support this. use; not all carts support this.
@param nvramdir The full path of the nvram directory @param path The full path of the nvram file
@param romfile The name of the cart from ROM properties
*/ */
virtual void setNVRamFile(const string& nvramdir, const string& romfile) { } virtual void setNVRamFile(string_view path) { }
/** /**
Thumbulator only supports 16-bit ARM code. Some Harmony/Melody drivers, Thumbulator only supports 16-bit ARM code. Some Harmony/Melody drivers,

View File

@ -20,7 +20,7 @@
#include "CartARM.hxx" #include "CartARM.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeARM::CartridgeARM(const string& md5, const Settings& settings) CartridgeARM::CartridgeARM(const Settings& settings, string_view md5)
: Cartridge(settings, md5) : Cartridge(settings, md5)
{ {
} }

View File

@ -32,7 +32,7 @@ class CartridgeARM : public Cartridge
friend class CartridgeARMWidget; friend class CartridgeARMWidget;
public: public:
CartridgeARM(const string& md5, const Settings& settings); CartridgeARM(const Settings& settings, string_view md5);
~CartridgeARM() override = default; ~CartridgeARM() override = default;
/** /**

View File

@ -46,8 +46,8 @@ static constexpr uInt32 getUInt32(const uInt8* _array, size_t _address) {
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeBUS::CartridgeBUS(const ByteBuffer& image, size_t size, CartridgeBUS::CartridgeBUS(const ByteBuffer& image, size_t size,
const string& md5, const Settings& settings) string_view md5, const Settings& settings)
: CartridgeARM(md5, settings), : CartridgeARM(settings, md5),
myImage{make_unique<uInt8[]>(32_KB)} myImage{make_unique<uInt8[]>(32_KB)}
{ {
// Copy the ROM image into my buffer // Copy the ROM image into my buffer

View File

@ -59,7 +59,7 @@ class CartridgeBUS : public CartridgeARM
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeBUS(const ByteBuffer& image, size_t size, const string& md5, CartridgeBUS(const ByteBuffer& image, size_t size, string_view md5,
const Settings& settings); const Settings& settings);
~CartridgeBUS() override = default; ~CartridgeBUS() override = default;

View File

@ -62,8 +62,8 @@ namespace {
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeCDF::CartridgeCDF(const ByteBuffer& image, size_t size, CartridgeCDF::CartridgeCDF(const ByteBuffer& image, size_t size,
const string& md5, const Settings& settings) string_view md5, const Settings& settings)
: CartridgeARM(md5, settings) : CartridgeARM(settings, md5)
{ {
// Copy the ROM image into my buffer // Copy the ROM image into my buffer
mySize = std::min(size, 512_KB); mySize = std::min(size, 512_KB);

View File

@ -82,7 +82,7 @@ class CartridgeCDF : public CartridgeARM
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeCDF(const ByteBuffer& image, size_t size, const string& md5, CartridgeCDF(const ByteBuffer& image, size_t size, string_view md5,
const Settings& settings); const Settings& settings);
~CartridgeCDF() override = default; ~CartridgeCDF() override = default;

View File

@ -357,9 +357,9 @@ bool CartridgeCTY::load(Serializer& in)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CartridgeCTY::setNVRamFile(const string& nvramdir, const string& romfile) void CartridgeCTY::setNVRamFile(string_view path)
{ {
myEEPROMFile = nvramdir + romfile + "_eeprom.dat"; myEEPROMFile = string{path} + "_eeprom.dat";
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -210,10 +210,9 @@ class CartridgeCTY : public Cartridge
/** /**
Informs the cartridge about the name of the nvram file it will use. Informs the cartridge about the name of the nvram file it will use.
@param nvramdir The full path of the nvram directory @param path The full path of the nvram file
@param romfile The name of the cart from ROM properties
*/ */
void setNVRamFile(const string& nvramdir, const string& romfile) override; void setNVRamFile(string_view path) override;
#ifdef DEBUGGER_SUPPORT #ifdef DEBUGGER_SUPPORT
/** /**

View File

@ -26,8 +26,8 @@
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeDPCPlus::CartridgeDPCPlus(const ByteBuffer& image, size_t size, CartridgeDPCPlus::CartridgeDPCPlus(const ByteBuffer& image, size_t size,
const string& md5, const Settings& settings) string_view md5, const Settings& settings)
: CartridgeARM(md5, settings), : CartridgeARM(settings, md5),
myImage{make_unique<uInt8[]>(32_KB)}, myImage{make_unique<uInt8[]>(32_KB)},
mySize{std::min(size, 32_KB)} mySize{std::min(size, 32_KB)}
{ {

View File

@ -55,7 +55,7 @@ class CartridgeDPCPlus : public CartridgeARM
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeDPCPlus(const ByteBuffer& image, size_t size, const string& md5, CartridgeDPCPlus(const ByteBuffer& image, size_t size, string_view md5,
const Settings& settings); const Settings& settings);
~CartridgeDPCPlus() override = default; ~CartridgeDPCPlus() override = default;

View File

@ -79,9 +79,9 @@ bool CartridgeFA2::poke(uInt16 address, uInt8 value)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CartridgeFA2::setNVRamFile(const string& nvramdir, const string& romfile) void CartridgeFA2::setNVRamFile(string_view path)
{ {
myFlashFile = nvramdir + romfile + "_flash.dat"; myFlashFile = string{path} + "_flash.dat";
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -74,10 +74,9 @@ class CartridgeFA2 : public CartridgeFA
/** /**
Informs the cartridge about the name of the nvram file it will use. Informs the cartridge about the name of the nvram file it will use.
@param nvramdir The full path of the nvram directory @param path The full path of the nvram file
@param romfile The name of the cart from ROM properties
*/ */
void setNVRamFile(const string& nvramdir, const string& romfile) override; void setNVRamFile(string_view path) override;
#ifdef DEBUGGER_SUPPORT #ifdef DEBUGGER_SUPPORT
/** /**

View File

@ -56,7 +56,7 @@ class StreamReader : public Serializable
public: public:
StreamReader() { myBuffer1.fill(0); myBuffer2.fill(0); } StreamReader() { myBuffer1.fill(0); myBuffer2.fill(0); }
bool open(const string& path) { bool open(string_view path) {
myFile = Serializer(path, Serializer::Mode::ReadOnly); myFile = Serializer(path, Serializer::Mode::ReadOnly);
if(myFile) if(myFile)
myFileSize = myFile.size(); myFileSize = myFile.size();
@ -738,7 +738,7 @@ class MovieCart : public Serializable
public: public:
MovieCart() { myROM.fill(0); } MovieCart() { myROM.fill(0); }
bool init(const string& path); bool init(string_view path);
bool process(uInt16 address); bool process(uInt16 address);
bool save(Serializer& out) const override; bool save(Serializer& out) const override;
@ -837,7 +837,7 @@ class MovieCart : public Serializable
}; };
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool MovieCart::init(const string& path) bool MovieCart::init(string_view path)
{ {
std::copy_n(kernelROM, 1_KB, myROM.data()); std::copy_n(kernelROM, 1_KB, myROM.data());

View File

@ -149,7 +149,7 @@ Console::Console(OSystem& osystem, unique_ptr<Cartridge>& cart,
// Let the cart know how to query for the 'Cartridge.StartBank' property // Let the cart know how to query for the 'Cartridge.StartBank' property
myCart->setStartBankFromPropsFunc([this]() { myCart->setStartBankFromPropsFunc([this]() {
const string& startbank = myProperties.get(PropType::Cart_StartBank); const string_view startbank = myProperties.get(PropType::Cart_StartBank);
return (startbank == EmptyString || BSPF::equalsIgnoreCase(startbank, "AUTO")) return (startbank == EmptyString || BSPF::equalsIgnoreCase(startbank, "AUTO"))
? -1 : BSPF::stringToInt(startbank); ? -1 : BSPF::stringToInt(startbank);
}); });
@ -169,8 +169,7 @@ Console::Console(OSystem& osystem, unique_ptr<Cartridge>& cart,
// Add the real controllers for this system // Add the real controllers for this system
// This must be done before the debugger is initialized // This must be done before the debugger is initialized
const string& md5 = myProperties.get(PropType::Cart_MD5); setControllers(myProperties.get(PropType::Cart_MD5));
setControllers(md5);
// Pause audio and clear framebuffer while autodetection runs // Pause audio and clear framebuffer while autodetection runs
myOSystem.sound().pause(true); myOSystem.sound().pause(true);
@ -238,7 +237,7 @@ Console::Console(OSystem& osystem, unique_ptr<Cartridge>& cart,
myConsoleInfo.BankSwitch = myCart->about(); myConsoleInfo.BankSwitch = myCart->about();
// Some carts have an associated nvram file // Some carts have an associated nvram file
myCart->setNVRamFile(myOSystem.nvramDir().getPath(), myConsoleInfo.CartName); myCart->setNVRamFile(myOSystem.nvramDir().getPath() + myConsoleInfo.CartName);
// Let the other devices know about the new console // Let the other devices know about the new console
mySystem->consoleChanged(myConsoleTiming); mySystem->consoleChanged(myConsoleTiming);
@ -360,13 +359,13 @@ string Console::formatFromFilename() const
}}; }};
// Get filename, and search using regex's above // Get filename, and search using regex's above
const string& filename = myOSystem.romFile().getName(); const string_view filename = myOSystem.romFile().getName();
for(const auto& pat: Pattern) for(const auto& pat: Pattern)
{ {
try try
{ {
const std::regex rgx(pat[0], std::regex_constants::icase); const std::regex rgx(pat[0], std::regex_constants::icase);
if(std::regex_search(filename, rgx)) if(std::regex_search(filename.cbegin(), filename.cend(), rgx))
return pat[1]; return pat[1];
} }
catch(...) catch(...)
@ -676,7 +675,7 @@ FBInitStatus Console::initializeVideo(bool full)
Common::Size(2 * myTIA->width(), myTIA->height()); Common::Size(2 * myTIA->width(), myTIA->height());
const bool devSettings = myOSystem.settings().getBool("dev.settings"); const bool devSettings = myOSystem.settings().getBool("dev.settings");
const string& title = string("Stella ") + STELLA_VERSION + const string title = string{"Stella "} + STELLA_VERSION +
": \"" + myProperties.get(PropType::Cart_Name) + "\""; ": \"" + myProperties.get(PropType::Cart_Name) + "\"";
fbstatus = myOSystem.frameBuffer().createDisplay(title, fbstatus = myOSystem.frameBuffer().createDisplay(title,
BufferType::Emulator, size, false); BufferType::Emulator, size, false);
@ -837,7 +836,7 @@ void Console::createAudioQueue()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Console::setControllers(const string& romMd5) void Console::setControllers(string_view romMd5)
{ {
// Check for CompuMate scheme; it is special in that a handler creates both // Check for CompuMate scheme; it is special in that a handler creates both
// controllers for us, and associates them with the bankswitching class // controllers for us, and associates them with the bankswitching class
@ -942,9 +941,8 @@ void Console::changeRightController(int direction)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
unique_ptr<Controller> Console::getControllerPort(const Controller::Type type, unique_ptr<Controller> Console::getControllerPort(
const Controller::Jack port, const Controller::Type type, const Controller::Jack port, string_view romMd5)
const string& romMd5)
{ {
unique_ptr<Controller> controller; unique_ptr<Controller> controller;
@ -1002,7 +1000,8 @@ unique_ptr<Controller> Console::getControllerPort(const Controller::Type type,
{ {
FSNode nvramfile = myOSystem.nvramDir(); FSNode nvramfile = myOSystem.nvramDir();
nvramfile /= "atarivox_eeprom.dat"; nvramfile /= "atarivox_eeprom.dat";
const Controller::onMessageCallback callback = [&os = myOSystem](const string& msg) const Controller::onMessageCallback callback = [&os = myOSystem]
(string_view msg)
{ {
const bool devSettings = os.settings().getBool("dev.settings"); const bool devSettings = os.settings().getBool("dev.settings");
if(os.settings().getBool(devSettings ? "dev.extaccess" : "plr.extaccess")) if(os.settings().getBool(devSettings ? "dev.extaccess" : "plr.extaccess"))
@ -1016,7 +1015,8 @@ unique_ptr<Controller> Console::getControllerPort(const Controller::Type type,
{ {
FSNode nvramfile = myOSystem.nvramDir(); FSNode nvramfile = myOSystem.nvramDir();
nvramfile /= "savekey_eeprom.dat"; nvramfile /= "savekey_eeprom.dat";
const Controller::onMessageCallback callback = [&os = myOSystem](const string& msg) const Controller::onMessageCallback callback = [&os = myOSystem]
(string_view msg)
{ {
const bool devSettings = os.settings().getBool("dev.settings"); const bool devSettings = os.settings().getBool("dev.settings");
if(os.settings().getBool(devSettings ? "dev.extaccess" : "plr.extaccess")) if(os.settings().getBool(devSettings ? "dev.extaccess" : "plr.extaccess"))
@ -1031,8 +1031,8 @@ unique_ptr<Controller> Console::getControllerPort(const Controller::Type type,
case Controller::Type::KidVid: case Controller::Type::KidVid:
{ {
const Controller::onMessageCallbackForced callback = const Controller::onMessageCallbackForced callback = [&os = myOSystem]
[&os = myOSystem](const string& msg, bool force) { (string_view msg, bool force) {
const bool devSettings = os.settings().getBool("dev.settings"); const bool devSettings = os.settings().getBool("dev.settings");
if(force || os.settings().getBool(devSettings ? "dev.extaccess" : "plr.extaccess")) if(force || os.settings().getBool(devSettings ? "dev.extaccess" : "plr.extaccess"))
os.frameBuffer().showTextMessage(msg); os.frameBuffer().showTextMessage(msg);
@ -1241,10 +1241,11 @@ void Console::toggleDeveloperSet(bool toggle)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Console::toggleTIABit(TIABit bit, const string& bitname, bool show, bool toggle) const void Console::toggleTIABit(TIABit bit, string_view bitname,
bool show, bool toggle) const
{ {
const bool result = myTIA->toggleBit(bit, toggle ? 2 : 3); const bool result = myTIA->toggleBit(bit, toggle ? 2 : 3);
const string message = bitname + (result ? " enabled" : " disabled"); const string message = string{bitname} + (result ? " enabled" : " disabled");
myOSystem.frameBuffer().showTextMessage(message); myOSystem.frameBuffer().showTextMessage(message);
} }
@ -1259,10 +1260,12 @@ void Console::toggleBits(bool toggle) const
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Console::toggleTIACollision(TIABit bit, const string& bitname, bool show, bool toggle) const void Console::toggleTIACollision(TIABit bit, string_view bitname,
bool show, bool toggle) const
{ {
const bool result = myTIA->toggleCollision(bit, toggle ? 2 : 3); const bool result = myTIA->toggleCollision(bit, toggle ? 2 : 3);
const string message = bitname + (result ? " collision enabled" : " collision disabled"); const string message = string{bitname} +
(result ? " collision enabled" : " collision disabled");
myOSystem.frameBuffer().showTextMessage(message); myOSystem.frameBuffer().showTextMessage(message);
} }

View File

@ -81,7 +81,7 @@ class Console : public Serializable, public ConsoleIO
/** /**
Sets the left and right controllers for the console. Sets the left and right controllers for the console.
*/ */
void setControllers(const string& romMd5); void setControllers(string_view romMd5);
/** /**
Get the controller plugged into the specified jack Get the controller plugged into the specified jack
@ -424,11 +424,12 @@ class Console : public Serializable, public ConsoleIO
Selects the left or right controller depending on ROM properties Selects the left or right controller depending on ROM properties
*/ */
unique_ptr<Controller> getControllerPort(const Controller::Type type, unique_ptr<Controller> getControllerPort(const Controller::Type type,
const Controller::Jack port, const string& romMd5); const Controller::Jack port,
string_view romMd5);
void toggleTIABit(TIABit bit, const string& bitname, void toggleTIABit(TIABit bit, string_view bitname,
bool show = true, bool toggle = true) const; bool show = true, bool toggle = true) const;
void toggleTIACollision(TIABit bit, const string& bitname, void toggleTIACollision(TIABit bit, string_view bitname,
bool show = true, bool toggle = true) const; bool show = true, bool toggle = true) const;
private: private:

View File

@ -134,15 +134,12 @@ string Controller::getPropName(const Type type)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Controller::Type Controller::getType(const string& propName) Controller::Type Controller::getType(string_view propName)
{ {
for(int i = 0; i < static_cast<int>(Type::LastType); ++i) for(int i = 0; i < static_cast<int>(Type::LastType); ++i)
{
if (BSPF::equalsIgnoreCase(propName, getPropName(Type{i}))) if (BSPF::equalsIgnoreCase(propName, getPropName(Type{i})))
{
return Type{i}; return Type{i};
}
}
// special case // special case
if(BSPF::equalsIgnoreCase(propName, "KEYPAD")) if(BSPF::equalsIgnoreCase(propName, "KEYPAD"))
return Type::Keyboard; return Type::Keyboard;

View File

@ -279,7 +279,7 @@ class Controller : public Serializable
/** /**
Returns the controller type of the given property name Returns the controller type of the given property name
*/ */
static Type getType(const string& propName); static Type getType(string_view propName);
/** /**
Sets the dead zone amount for real analog joysticks. Sets the dead zone amount for real analog joysticks.

View File

@ -31,8 +31,9 @@ void DispatchResult::setOk(uInt64 cycles)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DispatchResult::setDebugger(uInt64 cycles, const string& message, void DispatchResult::setDebugger(uInt64 cycles, string_view message,
const string& tooltip, int address, bool wasReadTrap) string_view tooltip, int address,
bool wasReadTrap)
{ {
myStatus = Status::debugger; myStatus = Status::debugger;
myCycles = cycles; myCycles = cycles;
@ -51,7 +52,7 @@ void DispatchResult::setFatal(uInt64 cycles)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DispatchResult::setMessage(const string& message) void DispatchResult::setMessage(string_view message)
{ {
myMessage = message; myMessage = message;
} }

View File

@ -31,34 +31,45 @@ class DispatchResult
uInt64 getCycles() const { return myCycles; } uInt64 getCycles() const { return myCycles; }
const string& getMessage() const { assertStatus(Status::debugger, Status::fatal); return myMessage; } const string& getMessage() const {
assertStatus(Status::debugger, Status::fatal);
return myMessage;
}
int getAddress() const { assertStatus(Status::debugger); return myAddress; } int getAddress() const {
assertStatus(Status::debugger);
return myAddress;
}
bool wasReadTrap() const { assertStatus(Status::debugger); return myWasReadTrap; } bool wasReadTrap() const {
assertStatus(Status::debugger);
return myWasReadTrap;
}
const string& getToolTip() const { assertStatus(Status::debugger, Status::fatal); return myToolTip; } const string& getToolTip() const {
assertStatus(Status::debugger, Status::fatal);
return myToolTip;
}
bool isSuccess() const; bool isSuccess() const;
void setOk(uInt64 cycles); void setOk(uInt64 cycles);
void setDebugger(uInt64 cycles, const string& message = "", void setDebugger(uInt64 cycles, string_view message = "",
const string& tooltip = "", int address = -1, bool wasReadTrap = true); string_view tooltip = "", int address = -1,
bool wasReadTrap = true);
void setFatal(uInt64 cycles); void setFatal(uInt64 cycles);
void setMessage(const string& message); void setMessage(string_view message);
private: private:
void assertStatus(Status status) const void assertStatus(Status status) const {
{
if (myStatus != status) throw runtime_error("invalid status for operation"); if (myStatus != status) throw runtime_error("invalid status for operation");
} }
template<typename ...Ts> void assertStatus(Status status, Ts... more) const template<typename ...Ts> void assertStatus(Status status, Ts... more) const {
{
if (myStatus == status) return; if (myStatus == status) return;
assertStatus(more...); assertStatus(more...);

View File

@ -181,7 +181,7 @@ void EventHandler::removePhysicalJoystick(int id)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void EventHandler::mapStelladaptors(const string& saport) void EventHandler::mapStelladaptors(string_view saport)
{ {
#ifdef JOYSTICK_SUPPORT #ifdef JOYSTICK_SUPPORT
myPJoyHandler->mapStelladaptors(saport); myPJoyHandler->mapStelladaptors(saport);
@ -1767,7 +1767,7 @@ void EventHandler::handleConsoleStartupEvents()
if(myOSystem.settings().getBool("holdselect")) if(myOSystem.settings().getBool("holdselect"))
handleEvent(Event::ConsoleSelect); handleEvent(Event::ConsoleSelect);
const string& holdjoy0 = myOSystem.settings().getString("holdjoy0"); const string_view holdjoy0 = myOSystem.settings().getString("holdjoy0");
if(BSPF::containsIgnoreCase(holdjoy0, "U")) if(BSPF::containsIgnoreCase(holdjoy0, "U"))
handleEvent(Event::LeftJoystickUp); handleEvent(Event::LeftJoystickUp);
@ -1780,7 +1780,7 @@ void EventHandler::handleConsoleStartupEvents()
if(BSPF::containsIgnoreCase(holdjoy0, "F")) if(BSPF::containsIgnoreCase(holdjoy0, "F"))
handleEvent(Event::LeftJoystickFire); handleEvent(Event::LeftJoystickFire);
const string& holdjoy1 = myOSystem.settings().getString("holdjoy1"); const string_view holdjoy1 = myOSystem.settings().getString("holdjoy1");
if(BSPF::containsIgnoreCase(holdjoy1, "U")) if(BSPF::containsIgnoreCase(holdjoy1, "U"))
handleEvent(Event::RightJoystickUp); handleEvent(Event::RightJoystickUp);
if(BSPF::containsIgnoreCase(holdjoy1, "D")) if(BSPF::containsIgnoreCase(holdjoy1, "D"))
@ -2056,7 +2056,7 @@ json EventHandler::convertLegacyComboMapping(string list)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void EventHandler::removePhysicalJoystickFromDatabase(const string& name) void EventHandler::removePhysicalJoystickFromDatabase(string_view name)
{ {
#ifdef JOYSTICK_SUPPORT #ifdef JOYSTICK_SUPPORT
myPJoyHandler->remove(name); myPJoyHandler->remove(name);
@ -2496,7 +2496,7 @@ string EventHandler::keyAtIndex(int idx, Event::Group group)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void EventHandler::setMouseControllerMode(const string& enable) void EventHandler::setMouseControllerMode(string_view enable)
{ {
if(myOSystem.hasConsole()) if(myOSystem.hasConsole())
{ {

View File

@ -79,7 +79,7 @@ class EventHandler
@param saport How to map the ports ('lr' or 'rl') @param saport How to map the ports ('lr' or 'rl')
*/ */
void mapStelladaptors(const string& saport); void mapStelladaptors(string_view saport);
/** /**
Toggles if all four joystick directions are allowed at once Toggles if all four joystick directions are allowed at once
@ -145,7 +145,7 @@ class EventHandler
Currently, this will be one of the following values: Currently, this will be one of the following values:
'always', 'analog', 'never' 'always', 'analog', 'never'
*/ */
void setMouseControllerMode(const string& enable); void setMouseControllerMode(string_view enable);
void changeMouseControllerMode(int direction = +1); void changeMouseControllerMode(int direction = +1);
void changeMouseCursor(int direction = +1); void changeMouseCursor(int direction = +1);
@ -338,7 +338,7 @@ class EventHandler
Remove the physical joystick identified by 'name' from the joystick Remove the physical joystick identified by 'name' from the joystick
database, only if it is not currently active. database, only if it is not currently active.
*/ */
void removePhysicalJoystickFromDatabase(const string& name); void removePhysicalJoystickFromDatabase(string_view name);
/** /**
Enable/disable text events (distinct from single-key events). Enable/disable text events (distinct from single-key events).

View File

@ -88,7 +88,7 @@ class FBBackend
@param title The title of the application / window @param title The title of the application / window
*/ */
virtual void setTitle(const string& title) = 0; virtual void setTitle(string_view title) = 0;
/** /**
Shows or hides the cursor based on the given boolean value. Shows or hides the cursor based on the given boolean value.

View File

@ -297,7 +297,7 @@ void FBSurface::frameRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FBSurface::splitString(const GUI::Font& font, const string& s, int w, void FBSurface::splitString(const GUI::Font& font, string_view s, int w,
string& left, string& right) string& left, string& right)
{ {
#ifdef GUI_SUPPORT #ifdef GUI_SUPPORT
@ -335,7 +335,7 @@ void FBSurface::splitString(const GUI::Font& font, const string& s, int w,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int FBSurface::drawString(const GUI::Font& font, const string& s, int FBSurface::drawString(const GUI::Font& font, string_view s,
int x, int y, int w, int h, int x, int y, int w, int h,
ColorId color, TextAlign align, ColorId color, TextAlign align,
int deltax, bool useEllipsis, ColorId shadowColor, int deltax, bool useEllipsis, ColorId shadowColor,
@ -344,7 +344,7 @@ int FBSurface::drawString(const GUI::Font& font, const string& s,
int lines = 0; int lines = 0;
#ifdef GUI_SUPPORT #ifdef GUI_SUPPORT
string inStr = s; string inStr{s};
// draw multiline string // draw multiline string
while(inStr.length() && h >= font.getFontHeight() * 2) while(inStr.length() && h >= font.getFontHeight() * 2)
@ -374,7 +374,7 @@ int FBSurface::drawString(const GUI::Font& font, const string& s,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int FBSurface::drawString(const GUI::Font& font, const string& s, int FBSurface::drawString(const GUI::Font& font, string_view s,
int x, int y, int w, int x, int y, int w,
ColorId color, TextAlign align, ColorId color, TextAlign align,
int deltax, bool useEllipsis, ColorId shadowColor, int deltax, bool useEllipsis, ColorId shadowColor,

View File

@ -228,10 +228,13 @@ class FBSurface
@return Number of lines drawn @return Number of lines drawn
*/ */
virtual int drawString(const GUI::Font& font, const string& s, int x, int y, int w, int h, virtual int drawString(const GUI::Font& font, string_view s, int x, int y,
ColorId color, TextAlign align = TextAlign::Left, int w, int h, ColorId color,
int deltax = 0, bool useEllipsis = true, ColorId shadowColor = kNone, TextAlign align = TextAlign::Left,
size_t linkStart = string::npos, size_t linkLen = string::npos, int deltax = 0, bool useEllipsis = true,
ColorId shadowColor = kNone,
size_t linkStart = string::npos,
size_t linkLen = string::npos,
bool underline = false); bool underline = false);
/** /**
@ -254,10 +257,12 @@ class FBSurface
@return x coordinate of end of string @return x coordinate of end of string
*/ */
virtual int drawString(const GUI::Font& font, const string& s, int x, int y, int w, virtual int drawString(const GUI::Font& font, string_view s, int x, int y,
ColorId color, TextAlign align = TextAlign::Left, int w, ColorId color, TextAlign align = TextAlign::Left,
int deltax = 0, bool useEllipsis = true, ColorId shadowColor = kNone, int deltax = 0, bool useEllipsis = true,
size_t linkStart = string::npos, size_t linkLen = string::npos, ColorId shadowColor = kNone,
size_t linkStart = string::npos,
size_t linkLen = string::npos,
bool underline = false); bool underline = false);
/** /**
@ -269,7 +274,7 @@ class FBSurface
@param left The left part of the split string @param left The left part of the split string
@param right The right part of the split string @param right The right part of the split string
*/ */
static void splitString(const GUI::Font& font, const string& s, int w, static void splitString(const GUI::Font& font, string_view s, int w,
string& left, string& right); string& left, string& right);
/** /**

View File

@ -26,13 +26,13 @@ FSNode::FSNode(const AbstractFSNodePtr& realNode)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FSNode::FSNode(const string& path) FSNode::FSNode(string_view path)
{ {
setPath(path); setPath(path);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FSNode::setPath(const string& path) void FSNode::setPath(string_view path)
{ {
// Only create a new object when necessary // Only create a new object when necessary
if (path == getPath()) if (path == getPath())
@ -48,7 +48,7 @@ void FSNode::setPath(const string& path)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FSNode& FSNode::operator/=(const string& path) FSNode& FSNode::operator/=(string_view path)
{ {
if (path != EmptyString) if (path != EmptyString)
{ {
@ -230,7 +230,7 @@ const string& FSNode::getName() const
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FSNode::setName(const string& name) void FSNode::setName(string_view name)
{ {
if (_realNode) if (_realNode)
_realNode->setName(name); _realNode->setName(name);
@ -249,7 +249,7 @@ string FSNode::getShortPath() const
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string FSNode::getNameWithExt(const string& ext) const string FSNode::getNameWithExt(string_view ext) const
{ {
if (!_realNode) if (!_realNode)
return EmptyString; return EmptyString;
@ -259,11 +259,13 @@ string FSNode::getNameWithExt(const string& ext) const
_realNode->getName().substr(pos+1); _realNode->getName().substr(pos+1);
pos = s.find_last_of('.'); pos = s.find_last_of('.');
return (pos != string::npos) ? s.replace(pos, string::npos, ext) : s + ext; return (pos != string::npos)
? s.replace(pos, string::npos, ext)
: s + string{ext};
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string FSNode::getPathWithExt(const string& ext) const string FSNode::getPathWithExt(string_view ext) const
{ {
if (!_realNode) if (!_realNode)
return EmptyString; return EmptyString;
@ -271,7 +273,9 @@ string FSNode::getPathWithExt(const string& ext) const
string s = _realNode->getPath(); string s = _realNode->getPath();
const size_t pos = s.find_last_of('.'); const size_t pos = s.find_last_of('.');
return (pos != string::npos) ? s.replace(pos, string::npos, ext) : s + ext; return (pos != string::npos)
? s.replace(pos, string::npos, ext)
: s + string{ext};
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -321,7 +325,7 @@ bool FSNode::makeDir()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool FSNode::rename(const string& newfile) bool FSNode::rename(string_view newfile)
{ {
return (_realNode && _realNode->exists()) ? _realNode->rename(newfile) : false; return (_realNode && _realNode->exists()) ? _realNode->rename(newfile) : false;
} }

View File

@ -83,7 +83,7 @@ class FSNode
* operating system doesn't support the concept), some other directory is * operating system doesn't support the concept), some other directory is
* used (usually the root directory). * used (usually the root directory).
*/ */
explicit FSNode(const string& path); explicit FSNode(string_view path);
/** /**
* Assignment operators. * Assignment operators.
@ -106,7 +106,7 @@ class FSNode
* Append the given path to the node, adding a directory separator * Append the given path to the node, adding a directory separator
* when necessary. Modelled on the C++17 fs::path API. * when necessary. Modelled on the C++17 fs::path API.
*/ */
FSNode& operator/=(const string& path); FSNode& operator/=(string_view path);
/** /**
* By default, the output operator simply outputs the fully-qualified * By default, the output operator simply outputs the fully-qualified
@ -159,7 +159,7 @@ class FSNode
* @return the file name * @return the file name
*/ */
const string& getName() const; const string& getName() const;
void setName(const string& name); void setName(string_view name);
/** /**
* Return a string representation of the file which can be passed to fopen(). * Return a string representation of the file which can be passed to fopen().
@ -241,7 +241,7 @@ class FSNode
* *
* @return bool true if the node was renamed, false otherwise. * @return bool true if the node was renamed, false otherwise.
*/ */
bool rename(const string& newfile); bool rename(string_view newfile);
/** /**
* Get the size of the current node path. * Get the size of the current node path.
@ -302,13 +302,13 @@ class FSNode
* and replace the extension (if present) with the given one. If no * and replace the extension (if present) with the given one. If no
* extension is present, the given one is appended instead. * extension is present, the given one is appended instead.
*/ */
string getNameWithExt(const string& ext = "") const; string getNameWithExt(string_view ext = "") const;
string getPathWithExt(const string& ext = "") const; string getPathWithExt(string_view ext = "") const;
private: private:
explicit FSNode(const AbstractFSNodePtr& realNode); explicit FSNode(const AbstractFSNodePtr& realNode);
AbstractFSNodePtr _realNode; AbstractFSNodePtr _realNode;
void setPath(const string& path); void setPath(string_view path);
}; };
@ -370,7 +370,7 @@ class AbstractFSNode
* implementation for more information. * implementation for more information.
*/ */
virtual const string& getName() const = 0; virtual const string& getName() const = 0;
virtual void setName(const string& name) = 0; virtual void setName(string_view name) = 0;
/** /**
* Returns the 'path' of the current node, usable in fopen(). * Returns the 'path' of the current node, usable in fopen().
@ -443,7 +443,7 @@ class AbstractFSNode
* *
* @return bool true if the node was renamed, false otherwise. * @return bool true if the node was renamed, false otherwise.
*/ */
virtual bool rename(const string& newfile) = 0; virtual bool rename(string_view newfile) = 0;
/** /**
* Get the size of the current node path. * Get the size of the current node path.
@ -504,12 +504,12 @@ class AbstractFSNode
* @param str String containing the path. * @param str String containing the path.
* @return Pointer to the first char of the last component inside str. * @return Pointer to the first char of the last component inside str.
*/ */
static const char* lastPathComponent(const string& str) static const char* lastPathComponent(string_view str)
{ {
if(str.empty()) if(str.empty())
return ""; return "";
const char* const start = str.c_str(); const char* const start = str.data();
const char* cur = start + str.size() - 2; const char* cur = start + str.size() - 2;
while (cur >= start && !(*cur == '/' || *cur == '\\')) while (cur >= start && !(*cur == '/' || *cur == '\\'))

View File

@ -174,7 +174,7 @@ void FrameBuffer::setupFonts()
GUI::consoleDesc, GUI::consoleMediumDesc, GUI::stellaMediumDesc, GUI::consoleDesc, GUI::consoleMediumDesc, GUI::stellaMediumDesc,
GUI::stellaLargeDesc, GUI::stella12x24tDesc, GUI::stella14x28tDesc, GUI::stellaLargeDesc, GUI::stella12x24tDesc, GUI::stella14x28tDesc,
GUI::stella16x32tDesc}; GUI::stella16x32tDesc};
const string& dialogFont = myOSystem.settings().getString("dialogfont"); const string_view dialogFont = myOSystem.settings().getString("dialogfont");
const FontDesc fd = getFontDesc(dialogFont); const FontDesc fd = getFontDesc(dialogFont);
// The general font used in all UI elements // The general font used in all UI elements
@ -202,13 +202,13 @@ void FrameBuffer::setupFonts()
} }
// The font used by the ROM launcher // The font used by the ROM launcher
const string& lf = myOSystem.settings().getString("launcherfont"); const string_view lf = myOSystem.settings().getString("launcherfont");
myLauncherFont = make_unique<GUI::Font>(getFontDesc(lf)); // 8x13 myLauncherFont = make_unique<GUI::Font>(getFontDesc(lf)); // 8x13
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FontDesc FrameBuffer::getFontDesc(const string& name) FontDesc FrameBuffer::getFontDesc(string_view name)
{ {
if(name == "small") if(name == "small")
return GUI::consoleDesc; // 8x13 return GUI::consoleDesc; // 8x13
@ -228,7 +228,7 @@ FontDesc FrameBuffer::getFontDesc(const string& name)
#endif #endif
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FBInitStatus FrameBuffer::createDisplay(const string& title, BufferType type, FBInitStatus FrameBuffer::createDisplay(string_view title, BufferType type,
Common::Size size, bool honourHiDPI) Common::Size size, bool honourHiDPI)
{ {
++myInitializedCount; ++myInitializedCount;
@ -609,7 +609,8 @@ void FrameBuffer::updateInEmulationMode(float framesPerSecond)
#ifdef GUI_SUPPORT #ifdef GUI_SUPPORT
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FrameBuffer::createMessage(const string& message, MessagePosition position, bool force) void FrameBuffer::createMessage(string_view message, MessagePosition position,
bool force)
{ {
// Only show messages if they've been enabled // Only show messages if they've been enabled
if(myMsg.surface == nullptr || !(force || myOSystem.settings().getBool("uimessages"))) if(myMsg.surface == nullptr || !(force || myOSystem.settings().getBool("uimessages")))
@ -637,8 +638,8 @@ void FrameBuffer::createMessage(const string& message, MessagePosition position,
#endif #endif
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FrameBuffer::showTextMessage(const string& message, MessagePosition position, void FrameBuffer::showTextMessage(string_view message,
bool force) MessagePosition position, bool force)
{ {
#ifdef GUI_SUPPORT #ifdef GUI_SUPPORT
const int fontWidth = font().getMaxCharWidth(); const int fontWidth = font().getMaxCharWidth();
@ -653,7 +654,7 @@ void FrameBuffer::showTextMessage(const string& message, MessagePosition positio
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FrameBuffer::showGaugeMessage(const string& message, const string& valueText, void FrameBuffer::showGaugeMessage(string_view message, string_view valueText,
float value, float minValue, float maxValue) float value, float minValue, float maxValue)
{ {
#ifdef GUI_SUPPORT #ifdef GUI_SUPPORT

View File

@ -83,7 +83,7 @@ class FrameBuffer
@return Status of initialization (see FBInitStatus 'enum') @return Status of initialization (see FBInitStatus 'enum')
*/ */
FBInitStatus createDisplay(const string& title, BufferType type, FBInitStatus createDisplay(string_view title, BufferType type,
Common::Size size, bool honourHiDPI = true); Common::Size size, bool honourHiDPI = true);
/** /**
@ -109,7 +109,7 @@ class FrameBuffer
@param position Onscreen position for the message @param position Onscreen position for the message
@param force Force showing this message, even if messages are disabled @param force Force showing this message, even if messages are disabled
*/ */
void showTextMessage(const string& message, void showTextMessage(string_view message,
MessagePosition position = MessagePosition::BottomCenter, MessagePosition position = MessagePosition::BottomCenter,
bool force = false); bool force = false);
/** /**
@ -121,7 +121,7 @@ class FrameBuffer
@param minValue The minimal value of the gauge bar @param minValue The minimal value of the gauge bar
@param maxValue The maximal value of the gauge bar @param maxValue The maximal value of the gauge bar
*/ */
void showGaugeMessage(const string& message, const string& valueText, void showGaugeMessage(string_view message, string_view valueText,
float value, float minValue = 0.F, float maxValue = 100.F); float value, float minValue = 0.F, float maxValue = 100.F);
bool messageShown() const; bool messageShown() const;
@ -324,7 +324,7 @@ class FrameBuffer
@return The description of the font @return The description of the font
*/ */
static FontDesc getFontDesc(const string& name); static FontDesc getFontDesc(string_view name);
#endif #endif
/** /**
@ -407,7 +407,7 @@ class FrameBuffer
@param position Onscreen position for the message @param position Onscreen position for the message
@param force Force showing this message, even if messages are disabled @param force Force showing this message, even if messages are disabled
*/ */
void createMessage(const string& message, MessagePosition position, void createMessage(string_view message, MessagePosition position,
bool force = false); bool force = false);
#endif #endif

View File

@ -26,7 +26,7 @@
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KidVid::KidVid(Jack jack, const Event& event, const OSystem& osystem, KidVid::KidVid(Jack jack, const Event& event, const OSystem& osystem,
const System& system, const string& romMd5, const System& system, string_view romMd5,
const onMessageCallbackForced& callback) const onMessageCallbackForced& callback)
: Controller(jack, event, system, Controller::Type::KidVid), : Controller(jack, event, system, Controller::Type::KidVid),
myEnabled{myJack == Jack::Right}, myEnabled{myJack == Jack::Right},

View File

@ -49,7 +49,7 @@ class KidVid : public Controller
@param callback Called to pass messages back to the parent controller @param callback Called to pass messages back to the parent controller
*/ */
KidVid(Jack jack, const Event& event, const OSystem& osystem, KidVid(Jack jack, const Event& event, const OSystem& osystem,
const System& system, const string& romMd5, const System& system, string_view romMd5,
const onMessageCallbackForced& callback); const onMessageCallbackForced& callback);
~KidVid() override = default; ~KidVid() override = default;

View File

@ -27,7 +27,7 @@
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Lightgun::Lightgun(Jack jack, const Event& event, const System& system, Lightgun::Lightgun(Jack jack, const Event& event, const System& system,
const string& romMd5, const FrameBuffer& frameBuffer) string_view romMd5, const FrameBuffer& frameBuffer)
: Controller(jack, event, system, Controller::Type::Lightgun), : Controller(jack, event, system, Controller::Type::Lightgun),
myFrameBuffer{frameBuffer} myFrameBuffer{frameBuffer}
{ {

View File

@ -43,7 +43,7 @@ class Lightgun : public Controller
*/ */
Lightgun(Jack jack, const Event& event, const System& system, Lightgun(Jack jack, const Event& event, const System& system,
const string& romMd5, const FrameBuffer& frameBuffer); string_view romMd5, const FrameBuffer& frameBuffer);
~Lightgun() override = default; ~Lightgun() override = default;
public: public:

View File

@ -568,10 +568,10 @@ void M6502::attach(Debugger& debugger)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt32 M6502::addCondBreak(Expression* e, const string& name, bool oneShot) uInt32 M6502::addCondBreak(Expression* e, string_view name, bool oneShot)
{ {
myCondBreaks.emplace_back(e); myCondBreaks.emplace_back(e);
myCondBreakNames.push_back(name); myCondBreakNames.emplace_back(name);
updateStepStateByInstruction(); updateStepStateByInstruction();
@ -609,10 +609,10 @@ const StringList& M6502::getCondBreakNames() const
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt32 M6502::addCondSaveState(Expression* e, const string& name) uInt32 M6502::addCondSaveState(Expression* e, string_view name)
{ {
myCondSaveStates.emplace_back(e); myCondSaveStates.emplace_back(e);
myCondSaveStateNames.push_back(name); myCondSaveStateNames.emplace_back(name);
updateStepStateByInstruction(); updateStepStateByInstruction();
@ -650,10 +650,10 @@ const StringList& M6502::getCondSaveStateNames() const
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt32 M6502::addCondTrap(Expression* e, const string& name) uInt32 M6502::addCondTrap(Expression* e, string_view name)
{ {
myTrapConds.emplace_back(e); myTrapConds.emplace_back(e);
myTrapCondNames.push_back(name); myTrapCondNames.emplace_back(name);
updateStepStateByInstruction(); updateStepStateByInstruction();

View File

@ -236,19 +236,19 @@ class M6502 : public Serializable
BreakpointMap& breakPoints() { return myBreakPoints; } BreakpointMap& breakPoints() { return myBreakPoints; }
// methods for 'breakif' handling // methods for 'breakif' handling
uInt32 addCondBreak(Expression* e, const string& name, bool oneShot = false); uInt32 addCondBreak(Expression* e, string_view name, bool oneShot = false);
bool delCondBreak(uInt32 idx); bool delCondBreak(uInt32 idx);
void clearCondBreaks(); void clearCondBreaks();
const StringList& getCondBreakNames() const; const StringList& getCondBreakNames() const;
// methods for 'savestateif' handling // methods for 'savestateif' handling
uInt32 addCondSaveState(Expression* e, const string& name); uInt32 addCondSaveState(Expression* e, string_view name);
bool delCondSaveState(uInt32 idx); bool delCondSaveState(uInt32 idx);
void clearCondSaveStates(); void clearCondSaveStates();
const StringList& getCondSaveStateNames() const; const StringList& getCondSaveStateNames() const;
// methods for 'trapif' handling // methods for 'trapif' handling
uInt32 addCondTrap(Expression* e, const string& name); uInt32 addCondTrap(Expression* e, string_view name);
bool delCondTrap(uInt32 idx); bool delCondTrap(uInt32 idx);
void clearCondTraps(); void clearCondTraps();
const StringList& getCondTrapNames() const; const StringList& getCondTrapNames() const;

View File

@ -301,11 +301,9 @@ static void Decode(uInt32* output, const uInt8* const input, uInt32 len)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string hash(const string& buffer) string hash(string_view buffer)
{ {
std::vector<uint8_t> vec(buffer.begin(), buffer.end()); return hash(reinterpret_cast<const uInt8*>(buffer.data()), buffer.size());
return hash(vec.data(), vec.size());
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -47,7 +47,7 @@ namespace MD5 {
@return The message - digest @return The message - digest
*/ */
string hash(const string& buffer); string hash(string_view buffer);
} // namespace MD5 } // namespace MD5

View File

@ -207,7 +207,7 @@ bool OSystem::initialize(const Settings::Options& options)
// Detect serial port for AtariVox-USB // Detect serial port for AtariVox-USB
// If a previously set port is defined, use it; // If a previously set port is defined, use it;
// otherwise use the first one found (if any) // otherwise use the first one found (if any)
const string& avoxport = mySettings->getString("avoxport"); const string_view avoxport = mySettings->getString("avoxport");
const StringList ports = MediaFactory::createSerialPort()->portNames(); const StringList ports = MediaFactory::createSerialPort()->portNames();
if(avoxport.empty() && !ports.empty()) if(avoxport.empty() && !ports.empty())
@ -277,7 +277,7 @@ void OSystem::setConfigPaths()
// Make sure all required directories actually exist // Make sure all required directories actually exist
const auto buildDirIfRequired = [](FSNode& path, const auto buildDirIfRequired = [](FSNode& path,
const FSNode& initialPath, const FSNode& initialPath,
const string& pathToAppend = EmptyString) string_view pathToAppend = EmptyString)
{ {
path = initialPath; path = initialPath;
if(pathToAppend != EmptyString) if(pathToAppend != EmptyString)
@ -293,7 +293,7 @@ void OSystem::setConfigPaths()
#endif #endif
#ifdef IMAGE_SUPPORT #ifdef IMAGE_SUPPORT
const string& ssSaveDir = mySettings->getString("snapsavedir"); const string_view ssSaveDir = mySettings->getString("snapsavedir");
if(ssSaveDir == EmptyString) if(ssSaveDir == EmptyString)
mySnapshotSaveDir = userDir(); mySnapshotSaveDir = userDir();
else else
@ -301,7 +301,7 @@ void OSystem::setConfigPaths()
if(!mySnapshotSaveDir.isDirectory()) if(!mySnapshotSaveDir.isDirectory())
mySnapshotSaveDir.makeDir(); mySnapshotSaveDir.makeDir();
const string& ssLoadDir = mySettings->getString("snaploaddir"); const string_view ssLoadDir = mySettings->getString("snaploaddir");
if(ssLoadDir == EmptyString) if(ssLoadDir == EmptyString)
mySnapshotLoadDir = userDir(); mySnapshotLoadDir = userDir();
else else
@ -315,7 +315,7 @@ void OSystem::setConfigPaths()
#if 0 #if 0
// Debug code // Debug code
auto dbgPath = [](const string& desc, const FSNode& location) auto dbgPath = [](string_view desc, const FSNode& location)
{ {
cerr << desc << ": " << location << endl; cerr << desc << ": " << location << endl;
}; };
@ -331,7 +331,7 @@ void OSystem::setConfigPaths()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void OSystem::setUserDir(const string& path) void OSystem::setUserDir(string_view path)
{ {
mySettings->setValue("userdir", path); mySettings->setValue("userdir", path);
@ -416,8 +416,7 @@ void OSystem::createSound()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string OSystem::createConsole(const FSNode& rom, const string& md5sum, string OSystem::createConsole(const FSNode& rom, string_view md5sum, bool newrom)
bool newrom)
{ {
bool showmessage = false; bool showmessage = false;
@ -567,7 +566,7 @@ bool OSystem::hasConsole() const
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool OSystem::createLauncher(const string& startdir) bool OSystem::createLauncher(string_view startdir)
{ {
closeConsole(); closeConsole();
@ -666,7 +665,7 @@ unique_ptr<Console> OSystem::openConsole(const FSNode& romfile, string& md5)
// Now create the cartridge // Now create the cartridge
string cartmd5 = md5; string cartmd5 = md5;
const string& type = props.get(PropType::Cart_Type); const string& type = props.get(PropType::Cart_Type);
const Cartridge::messageCallback callback = [&os = *this](const string& msg) const Cartridge::messageCallback callback = [&os = *this](string_view msg)
{ {
const bool devSettings = os.settings().getBool("dev.settings"); const bool devSettings = os.settings().getBool("dev.settings");

View File

@ -365,7 +365,7 @@ class OSystem
@return String indicating any error message (EmptyString for no errors) @return String indicating any error message (EmptyString for no errors)
*/ */
string createConsole(const FSNode& rom, const string& md5 = "", string createConsole(const FSNode& rom, string_view md5 = "",
bool newrom = true); bool newrom = true);
/** /**
@ -386,7 +386,7 @@ class OSystem
@return True on successful creation, otherwise false @return True on successful creation, otherwise false
*/ */
bool createLauncher(const string& startdir = ""); bool createLauncher(string_view startdir = "");
/** /**
Answers whether the ROM launcher was actually successfully used Answers whether the ROM launcher was actually successfully used
@ -455,11 +455,11 @@ class OSystem
Again, this is not supported on all systems, so it may be simply Again, this is not supported on all systems, so it may be simply
ignored. ignored.
*/ */
static void overrideBaseDir(const string& path) { ourOverrideBaseDir = path; } static void overrideBaseDir(string_view path) { ourOverrideBaseDir = path; }
static void overrideBaseDirWithApp() { ourOverrideBaseDirWithApp = true; } static void overrideBaseDirWithApp() { ourOverrideBaseDirWithApp = true; }
// Update the path of the user directory // Update the path of the user directory
void setUserDir(const string& path); void setUserDir(string_view path);
public: public:
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
@ -505,7 +505,7 @@ class OSystem
they are free to ignore it they are free to ignore it
*/ */
virtual void getBaseDirectories(string& basedir, string& homedir, virtual void getBaseDirectories(string& basedir, string& homedir,
bool useappdir, const string& usedir) = 0; bool useappdir, string_view usedir) = 0;
virtual void initPersistence(FSNode& basedir) = 0; virtual void initPersistence(FSNode& basedir) = 0;

View File

@ -51,6 +51,6 @@ shared_ptr<CompositeKeyValueRepositoryAtomic> OSystemStandalone::getHighscoreRep
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void OSystemStandalone::getBaseDirectories( void OSystemStandalone::getBaseDirectories(
string& basedir, string& homedir, bool useappdir, const string& usedir) string& basedir, string& homedir, bool useappdir, string_view usedir)
{ {
} }

View File

@ -41,7 +41,7 @@ class OSystemStandalone : public OSystem
string describePresistence() override; string describePresistence() override;
void getBaseDirectories(string& basedir, string& homedir, void getBaseDirectories(string& basedir, string& homedir,
bool useappdir, const string& usedir) override; bool useappdir, string_view usedir) override;
private: private:

View File

@ -47,7 +47,7 @@ using std::chrono::milliseconds;
class PlusROMRequest { class PlusROMRequest {
public: public:
struct Destination { struct Destination {
Destination(const string& _host, const string& _path) Destination(string_view _host, string_view _path)
: host{_host}, path{_path} {} : host{_host}, path{_path} {}
string host; string host;
@ -55,7 +55,7 @@ class PlusROMRequest {
}; };
struct PlusStoreId { struct PlusStoreId {
PlusStoreId(const string& _nick, const string& _id) PlusStoreId(string_view _nick, string_view _id)
: nick{_nick}, id{_id} {} : nick{_nick}, id{_id} {}
string nick; string nick;
@ -369,7 +369,7 @@ void PlusROM::reset()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool PlusROM::isValidHost(const string& host) bool PlusROM::isValidHost(string_view host)
{ {
// TODO: This isn't 100% either, as we're supposed to check for the length // TODO: This isn't 100% either, as we're supposed to check for the length
// of each part between '.' in the range 1 .. 63 // of each part between '.' in the range 1 .. 63
@ -377,11 +377,11 @@ bool PlusROM::isValidHost(const string& host)
// library we decide to use // library we decide to use
static const std::regex rgx(R"(^(([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])$)", std::regex_constants::icase); static const std::regex rgx(R"(^(([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])$)", std::regex_constants::icase);
return std::regex_match(host, rgx); return std::regex_match(host.cbegin(), host.cend(), rgx);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool PlusROM::isValidPath(const string& path) bool PlusROM::isValidPath(string_view path)
{ {
// TODO: This isn't 100% // TODO: This isn't 100%
// Perhaps a better function will be included with whatever network // Perhaps a better function will be included with whatever network

View File

@ -157,8 +157,8 @@ class PlusROM : public Serializable
} }
private: private:
static bool isValidHost(const string& host); static bool isValidHost(string_view host);
static bool isValidPath(const string& path); static bool isValidPath(string_view path);
/** /**
Receive data from all requests that have completed. Receive data from all requests that have completed.

View File

@ -61,7 +61,7 @@ bool Properties::save(KeyValueRepository& repo) const
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Properties::set(PropType key, const string& value) void Properties::set(PropType key, string_view value)
{ {
const auto pos = static_cast<size_t>(key); const auto pos = static_cast<size_t>(key);
if(pos < myProperties.size()) if(pos < myProperties.size())
@ -137,7 +137,7 @@ Properties& Properties::operator=(const Properties& properties)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Properties::setDefault(PropType key, const string& value) void Properties::setDefault(PropType key, string_view value)
{ {
ourDefaultProperties[static_cast<size_t>(key)] = value; ourDefaultProperties[static_cast<size_t>(key)] = value;
} }
@ -200,7 +200,7 @@ void Properties::setDefaults()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropType Properties::getPropType(const string& name) PropType Properties::getPropType(string_view name)
{ {
for(size_t i = 0; i < NUM_PROPS; ++i) for(size_t i = 0; i < NUM_PROPS; ++i)
if(ourPropertyNames[i] == name) if(ourPropertyNames[i] == name)

View File

@ -106,7 +106,7 @@ class Properties
@param key The key of the property to set @param key The key of the property to set
@param value The value to assign to the property @param value The value to assign to the property
*/ */
void set(PropType key, const string& value); void set(PropType key, string_view value);
/** /**
Print the attributes of this properties object Print the attributes of this properties object
@ -148,7 +148,7 @@ class Properties
@param key The key of the property to set @param key The key of the property to set
@param value The value to assign to the property @param value The value to assign to the property
*/ */
static void setDefault(PropType key, const string& value); static void setDefault(PropType key, string_view value);
private: private:
/** /**
@ -165,7 +165,7 @@ class Properties
@param name The PropType key associated with the given string @param name The PropType key associated with the given string
*/ */
static PropType getPropType(const string& name); static PropType getPropType(string_view name);
/** /**
When printing each collection of ROM properties, it is useful to When printing each collection of ROM properties, it is useful to

View File

@ -70,7 +70,7 @@ unique_ptr<Controller> QuadTari::addController(const Controller::Type type, bool
{ {
FSNode nvramfile = myOSystem.nvramDir(); FSNode nvramfile = myOSystem.nvramDir();
const Controller::onMessageCallback callback = [&os = myOSystem] const Controller::onMessageCallback callback = [&os = myOSystem]
(const string& msg) { (string_view msg) {
const bool devSettings = os.settings().getBool("dev.settings"); const bool devSettings = os.settings().getBool("dev.settings");
if(os.settings().getBool(devSettings ? "dev.extaccess" : "plr.extaccess")) if(os.settings().getBool(devSettings ? "dev.extaccess" : "plr.extaccess"))
os.frameBuffer().showTextMessage(msg); os.frameBuffer().showTextMessage(msg);

View File

@ -22,14 +22,15 @@ using std::ios;
using std::ios_base; using std::ios_base;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Serializer::Serializer(const string& filename, Mode m) Serializer::Serializer(string_view filename, Mode m)
{ {
if(m == Mode::ReadOnly) if(m == Mode::ReadOnly)
{ {
const FSNode node(filename); const FSNode node(filename);
if(node.isFile() && node.isReadable()) if(node.isFile() && node.isReadable())
{ {
unique_ptr<fstream> str = make_unique<fstream>(filename, ios::in | ios::binary); unique_ptr<fstream> str = make_unique<fstream>(
string{filename}, ios::in | ios::binary);
if(str && str->is_open()) if(str && str->is_open())
{ {
myStream = std::move(str); myStream = std::move(str);
@ -48,13 +49,14 @@ Serializer::Serializer(const string& filename, Mode m)
// So we open in write and append mode - the write creates the file // So we open in write and append mode - the write creates the file
// when necessary, and the append doesn't delete any data if it // when necessary, and the append doesn't delete any data if it
// already exists // already exists
fstream temp(filename, ios::out | ios::app); string f{filename};
fstream temp(f, ios::out | ios::app);
temp.close(); temp.close();
ios_base::openmode stream_mode = ios::in | ios::out | ios::binary; ios_base::openmode stream_mode = ios::in | ios::out | ios::binary;
if(m == Mode::ReadWriteTrunc) if(m == Mode::ReadWriteTrunc)
stream_mode |= ios::trunc; stream_mode |= ios::trunc;
unique_ptr<fstream> str = make_unique<fstream>(filename, stream_mode); unique_ptr<fstream> str = make_unique<fstream>(f, stream_mode);
if(str && str->is_open()) if(str && str->is_open())
{ {
myStream = std::move(str); myStream = std::move(str);
@ -236,11 +238,10 @@ void Serializer::putDouble(double value)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Serializer::putString(const string& str) void Serializer::putString(string_view str)
{ {
const auto len = static_cast<uInt32>(str.length()); putInt(static_cast<uInt32>(str.size()));
putInt(len); myStream->write(str.data(), str.size());
myStream->write(str.data(), len);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -49,7 +49,7 @@ class Serializer
The valid() method must immediately be called to verify the stream The valid() method must immediately be called to verify the stream
was correctly initialized. was correctly initialized.
*/ */
explicit Serializer(const string& filename, Mode m = Mode::ReadWrite); explicit Serializer(string_view filename, Mode m = Mode::ReadWrite);
Serializer(); Serializer();
public: public:
@ -207,11 +207,11 @@ class Serializer
void putDouble(double value); void putDouble(double value);
/** /**
Writes a string to the current output stream. Writes a string(view) to the current output stream.
@param str The string to write to the output stream. @param str The string to write to the output stream.
*/ */
void putString(const string& str); void putString(string_view str);
/** /**
Writes a boolean value to the current output stream. Writes a boolean value to the current output stream.

View File

@ -192,7 +192,6 @@ Settings::Settings()
setPermanent("confirmexit", false); setPermanent("confirmexit", false);
setPermanent("autopause", false); setPermanent("autopause", false);
// Misc options // Misc options
setPermanent("loglevel", static_cast<int>(Logger::Level::INFO)); setPermanent("loglevel", static_cast<int>(Logger::Level::INFO));
setPermanent("logtoconsole", "0"); setPermanent("logtoconsole", "0");

View File

@ -1185,14 +1185,9 @@ bool TIA::enableFixedColors(bool enable)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool TIA::setFixedColorPalette(const string& colors) bool TIA::setFixedColorPalette(string_view colors)
{ {
string s = colors; for(size_t i = 0; i < std::max<size_t>(6, colors.size()); ++i)
sort(s.begin(), s.end());
if(s != "bgopry")
return false;
for(int i = 0; i < 6; ++i)
{ {
switch(colors[i]) switch(colors[i])
{ {

Some files were not shown because too many files have changed in this diff Show More