mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-05-17 23:56:39 +00:00
refactor: Get rid of ArgsManagerHelper class
Suggested by John Newbery <john@johnnewbery.com> https://github.com/bitcoin/bitcoin/pull/15934#issuecomment-551969778 This commit does not change behavior.
This commit is contained in:
parent
dc0f148074
commit
3e185522ac
@ -167,23 +167,6 @@ static std::string SettingName(const std::string& arg)
|
|||||||
return arg.size() > 0 && arg[0] == '-' ? arg.substr(1) : arg;
|
return arg.size() > 0 && arg[0] == '-' ? arg.substr(1) : arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Internal helper functions for ArgsManager */
|
|
||||||
class ArgsManagerHelper {
|
|
||||||
public:
|
|
||||||
/** Determine whether to use config settings in the default section,
|
|
||||||
* See also comments around ArgsManager::ArgsManager() below. */
|
|
||||||
static inline bool UseDefaultSection(const ArgsManager& am, const std::string& arg) EXCLUSIVE_LOCKS_REQUIRED(am.cs_args)
|
|
||||||
{
|
|
||||||
return (am.m_network == CBaseChainParams::MAIN || am.m_network_only_args.count(arg) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static util::SettingsValue Get(const ArgsManager& am, const std::string& arg)
|
|
||||||
{
|
|
||||||
LOCK(am.cs_args);
|
|
||||||
return GetSetting(am.m_settings, am.m_network, SettingName(arg), !UseDefaultSection(am, arg), /* get_chain_name= */ false);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interpret -nofoo as if the user supplied -foo=0.
|
* Interpret -nofoo as if the user supplied -foo=0.
|
||||||
*
|
*
|
||||||
@ -370,7 +353,7 @@ Optional<unsigned int> ArgsManager::GetArgFlags(const std::string& name) const
|
|||||||
std::vector<std::string> ArgsManager::GetArgs(const std::string& strArg) const
|
std::vector<std::string> ArgsManager::GetArgs(const std::string& strArg) const
|
||||||
{
|
{
|
||||||
LOCK(cs_args);
|
LOCK(cs_args);
|
||||||
bool ignore_default_section_config = !ArgsManagerHelper::UseDefaultSection(*this, strArg);
|
bool ignore_default_section_config = !UseDefaultSection(strArg);
|
||||||
std::vector<std::string> result;
|
std::vector<std::string> result;
|
||||||
for (const util::SettingsValue& value :
|
for (const util::SettingsValue& value :
|
||||||
util::GetSettingsList(m_settings, m_network, SettingName(strArg), ignore_default_section_config)) {
|
util::GetSettingsList(m_settings, m_network, SettingName(strArg), ignore_default_section_config)) {
|
||||||
@ -381,29 +364,29 @@ std::vector<std::string> ArgsManager::GetArgs(const std::string& strArg) const
|
|||||||
|
|
||||||
bool ArgsManager::IsArgSet(const std::string& strArg) const
|
bool ArgsManager::IsArgSet(const std::string& strArg) const
|
||||||
{
|
{
|
||||||
return !ArgsManagerHelper::Get(*this, strArg).isNull();
|
return !GetSetting(strArg).isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ArgsManager::IsArgNegated(const std::string& strArg) const
|
bool ArgsManager::IsArgNegated(const std::string& strArg) const
|
||||||
{
|
{
|
||||||
return ArgsManagerHelper::Get(*this, strArg).isFalse();
|
return GetSetting(strArg).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ArgsManager::GetArg(const std::string& strArg, const std::string& strDefault) const
|
std::string ArgsManager::GetArg(const std::string& strArg, const std::string& strDefault) const
|
||||||
{
|
{
|
||||||
const util::SettingsValue value = ArgsManagerHelper::Get(*this, strArg);
|
const util::SettingsValue value = GetSetting(strArg);
|
||||||
return value.isNull() ? strDefault : value.isFalse() ? "0" : value.isTrue() ? "1" : value.get_str();
|
return value.isNull() ? strDefault : value.isFalse() ? "0" : value.isTrue() ? "1" : value.get_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t ArgsManager::GetArg(const std::string& strArg, int64_t nDefault) const
|
int64_t ArgsManager::GetArg(const std::string& strArg, int64_t nDefault) const
|
||||||
{
|
{
|
||||||
const util::SettingsValue value = ArgsManagerHelper::Get(*this, strArg);
|
const util::SettingsValue value = GetSetting(strArg);
|
||||||
return value.isNull() ? nDefault : value.isFalse() ? 0 : value.isTrue() ? 1 : value.isNum() ? value.get_int64() : atoi64(value.get_str());
|
return value.isNull() ? nDefault : value.isFalse() ? 0 : value.isTrue() ? 1 : value.isNum() ? value.get_int64() : atoi64(value.get_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ArgsManager::GetBoolArg(const std::string& strArg, bool fDefault) const
|
bool ArgsManager::GetBoolArg(const std::string& strArg, bool fDefault) const
|
||||||
{
|
{
|
||||||
const util::SettingsValue value = ArgsManagerHelper::Get(*this, strArg);
|
const util::SettingsValue value = GetSetting(strArg);
|
||||||
return value.isNull() ? fDefault : value.isBool() ? value.get_bool() : InterpretBool(value.get_str());
|
return value.isNull() ? fDefault : value.isBool() ? value.get_bool() : InterpretBool(value.get_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -854,9 +837,9 @@ std::string ArgsManager::GetChainName() const
|
|||||||
{
|
{
|
||||||
auto get_net = [&](const std::string& arg) {
|
auto get_net = [&](const std::string& arg) {
|
||||||
LOCK(cs_args);
|
LOCK(cs_args);
|
||||||
util::SettingsValue value = GetSetting(m_settings, /* section= */ "", SettingName(arg),
|
util::SettingsValue value = util::GetSetting(m_settings, /* section= */ "", SettingName(arg),
|
||||||
/* ignore_default_section_config= */ false,
|
/* ignore_default_section_config= */ false,
|
||||||
/* get_chain_name= */ true);
|
/* get_chain_name= */ true);
|
||||||
return value.isNull() ? false : value.isBool() ? value.get_bool() : InterpretBool(value.get_str());
|
return value.isNull() ? false : value.isBool() ? value.get_bool() : InterpretBool(value.get_str());
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -874,6 +857,18 @@ std::string ArgsManager::GetChainName() const
|
|||||||
return GetArg("-chain", CBaseChainParams::MAIN);
|
return GetArg("-chain", CBaseChainParams::MAIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ArgsManager::UseDefaultSection(const std::string& arg) const
|
||||||
|
{
|
||||||
|
return m_network == CBaseChainParams::MAIN || m_network_only_args.count(arg) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
util::SettingsValue ArgsManager::GetSetting(const std::string& arg) const
|
||||||
|
{
|
||||||
|
LOCK(cs_args);
|
||||||
|
return util::GetSetting(
|
||||||
|
m_settings, m_network, SettingName(arg), !UseDefaultSection(arg), /* get_chain_name= */ false);
|
||||||
|
}
|
||||||
|
|
||||||
bool RenameOver(fs::path src, fs::path dest)
|
bool RenameOver(fs::path src, fs::path dest)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
@ -148,8 +148,6 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class ArgsManagerHelper;
|
|
||||||
|
|
||||||
struct Arg
|
struct Arg
|
||||||
{
|
{
|
||||||
std::string m_help_param;
|
std::string m_help_param;
|
||||||
@ -166,6 +164,22 @@ protected:
|
|||||||
|
|
||||||
NODISCARD bool ReadConfigStream(std::istream& stream, const std::string& filepath, std::string& error, bool ignore_invalid_keys = false);
|
NODISCARD bool ReadConfigStream(std::istream& stream, const std::string& filepath, std::string& error, bool ignore_invalid_keys = false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if settings values from the default section should be used,
|
||||||
|
* depending on the current network and whether the setting is
|
||||||
|
* network-specific.
|
||||||
|
*/
|
||||||
|
bool UseDefaultSection(const std::string& arg) const EXCLUSIVE_LOCKS_REQUIRED(cs_args);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get setting value.
|
||||||
|
*
|
||||||
|
* Result will be null if setting was unset, true if "-setting" argument was passed
|
||||||
|
* false if "-nosetting" argument was passed, and a string if a "-setting=value"
|
||||||
|
* argument was passed.
|
||||||
|
*/
|
||||||
|
util::SettingsValue GetSetting(const std::string& arg) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ArgsManager();
|
ArgsManager();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user