mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 15:04:44 +01:00
Merge #10901: Fix constness of ArgsManager methods
a622a1768
Fix constness of ArgsManager methods (João Barbosa)
Pull request description:
Make `cs_args` mutex mutable so that const methods can acquire it.
There's also tiny performance improvement by avoiding two map lookups when retrieving an argument value.
Tree-SHA512: ece58469745f2743b4b643242b51889a3d9c5b76492ed70bb74d4e5b378fff59da79fc129e499da779bf9f488c9435dda17ad1f3a804c1c30f56af422389e8bd
This commit is contained in:
commit
22e301a3d5
2 changed files with 29 additions and 24 deletions
32
src/util.cpp
32
src/util.cpp
|
@ -419,49 +419,48 @@ void ArgsManager::ParseParameters(int argc, const char* const argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> ArgsManager::GetArgs(const std::string& strArg)
|
std::vector<std::string> ArgsManager::GetArgs(const std::string& strArg) const
|
||||||
{
|
{
|
||||||
LOCK(cs_args);
|
LOCK(cs_args);
|
||||||
if (IsArgSet(strArg))
|
auto it = mapMultiArgs.find(strArg);
|
||||||
return mapMultiArgs.at(strArg);
|
if (it != mapMultiArgs.end()) return it->second;
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ArgsManager::IsArgSet(const std::string& strArg)
|
bool ArgsManager::IsArgSet(const std::string& strArg) const
|
||||||
{
|
{
|
||||||
LOCK(cs_args);
|
LOCK(cs_args);
|
||||||
return mapArgs.count(strArg);
|
return mapArgs.count(strArg);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ArgsManager::GetArg(const std::string& strArg, const std::string& strDefault)
|
std::string ArgsManager::GetArg(const std::string& strArg, const std::string& strDefault) const
|
||||||
{
|
{
|
||||||
LOCK(cs_args);
|
LOCK(cs_args);
|
||||||
if (mapArgs.count(strArg))
|
auto it = mapArgs.find(strArg);
|
||||||
return mapArgs[strArg];
|
if (it != mapArgs.end()) return it->second;
|
||||||
return strDefault;
|
return strDefault;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t ArgsManager::GetArg(const std::string& strArg, int64_t nDefault)
|
int64_t ArgsManager::GetArg(const std::string& strArg, int64_t nDefault) const
|
||||||
{
|
{
|
||||||
LOCK(cs_args);
|
LOCK(cs_args);
|
||||||
if (mapArgs.count(strArg))
|
auto it = mapArgs.find(strArg);
|
||||||
return atoi64(mapArgs[strArg]);
|
if (it != mapArgs.end()) return atoi64(it->second);
|
||||||
return nDefault;
|
return nDefault;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ArgsManager::GetBoolArg(const std::string& strArg, bool fDefault)
|
bool ArgsManager::GetBoolArg(const std::string& strArg, bool fDefault) const
|
||||||
{
|
{
|
||||||
LOCK(cs_args);
|
LOCK(cs_args);
|
||||||
if (mapArgs.count(strArg))
|
auto it = mapArgs.find(strArg);
|
||||||
return InterpretBool(mapArgs[strArg]);
|
if (it != mapArgs.end()) return InterpretBool(it->second);
|
||||||
return fDefault;
|
return fDefault;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ArgsManager::SoftSetArg(const std::string& strArg, const std::string& strValue)
|
bool ArgsManager::SoftSetArg(const std::string& strArg, const std::string& strValue)
|
||||||
{
|
{
|
||||||
LOCK(cs_args);
|
LOCK(cs_args);
|
||||||
if (mapArgs.count(strArg))
|
if (IsArgSet(strArg)) return false;
|
||||||
return false;
|
|
||||||
ForceSetArg(strArg, strValue);
|
ForceSetArg(strArg, strValue);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -478,8 +477,7 @@ void ArgsManager::ForceSetArg(const std::string& strArg, const std::string& strV
|
||||||
{
|
{
|
||||||
LOCK(cs_args);
|
LOCK(cs_args);
|
||||||
mapArgs[strArg] = strValue;
|
mapArgs[strArg] = strValue;
|
||||||
mapMultiArgs[strArg].clear();
|
mapMultiArgs[strArg] = {strValue};
|
||||||
mapMultiArgs[strArg].push_back(strValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
21
src/util.h
21
src/util.h
|
@ -195,13 +195,20 @@ inline bool IsSwitchChar(char c)
|
||||||
class ArgsManager
|
class ArgsManager
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
CCriticalSection cs_args;
|
mutable CCriticalSection cs_args;
|
||||||
std::map<std::string, std::string> mapArgs;
|
std::map<std::string, std::string> mapArgs;
|
||||||
std::map<std::string, std::vector<std::string> > mapMultiArgs;
|
std::map<std::string, std::vector<std::string>> mapMultiArgs;
|
||||||
public:
|
public:
|
||||||
void ParseParameters(int argc, const char*const argv[]);
|
void ParseParameters(int argc, const char*const argv[]);
|
||||||
void ReadConfigFile(const std::string& confPath);
|
void ReadConfigFile(const std::string& confPath);
|
||||||
std::vector<std::string> GetArgs(const std::string& strArg);
|
|
||||||
|
/**
|
||||||
|
* Return a vector of strings of the given argument
|
||||||
|
*
|
||||||
|
* @param strArg Argument to get (e.g. "-foo")
|
||||||
|
* @return command-line arguments
|
||||||
|
*/
|
||||||
|
std::vector<std::string> GetArgs(const std::string& strArg) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if the given argument has been manually set
|
* Return true if the given argument has been manually set
|
||||||
|
@ -209,7 +216,7 @@ public:
|
||||||
* @param strArg Argument to get (e.g. "-foo")
|
* @param strArg Argument to get (e.g. "-foo")
|
||||||
* @return true if the argument has been set
|
* @return true if the argument has been set
|
||||||
*/
|
*/
|
||||||
bool IsArgSet(const std::string& strArg);
|
bool IsArgSet(const std::string& strArg) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return string argument or default value
|
* Return string argument or default value
|
||||||
|
@ -218,7 +225,7 @@ public:
|
||||||
* @param strDefault (e.g. "1")
|
* @param strDefault (e.g. "1")
|
||||||
* @return command-line argument or default value
|
* @return command-line argument or default value
|
||||||
*/
|
*/
|
||||||
std::string GetArg(const std::string& strArg, const std::string& strDefault);
|
std::string GetArg(const std::string& strArg, const std::string& strDefault) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return integer argument or default value
|
* Return integer argument or default value
|
||||||
|
@ -227,7 +234,7 @@ public:
|
||||||
* @param nDefault (e.g. 1)
|
* @param nDefault (e.g. 1)
|
||||||
* @return command-line argument (0 if invalid number) or default value
|
* @return command-line argument (0 if invalid number) or default value
|
||||||
*/
|
*/
|
||||||
int64_t GetArg(const std::string& strArg, int64_t nDefault);
|
int64_t GetArg(const std::string& strArg, int64_t nDefault) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return boolean argument or default value
|
* Return boolean argument or default value
|
||||||
|
@ -236,7 +243,7 @@ public:
|
||||||
* @param fDefault (true or false)
|
* @param fDefault (true or false)
|
||||||
* @return command-line argument or default value
|
* @return command-line argument or default value
|
||||||
*/
|
*/
|
||||||
bool GetBoolArg(const std::string& strArg, bool fDefault);
|
bool GetBoolArg(const std::string& strArg, bool fDefault) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set an argument if it doesn't already have a value
|
* Set an argument if it doesn't already have a value
|
||||||
|
|
Loading…
Add table
Reference in a new issue