aboutsummaryrefslogtreecommitdiff
path: root/src/util/system.h
diff options
context:
space:
mode:
authorMarcoFalke <falke.marco@gmail.com>2019-08-02 12:18:06 -0400
committerMarcoFalke <falke.marco@gmail.com>2019-08-02 12:18:16 -0400
commit3a3d8b83571205b8329d4ee25537e3cc4397c3b8 (patch)
tree5c99a4ae0921ee38e09497994bd55694b25cd776 /src/util/system.h
parentbe0e8b4bff88b421128239e7140fc6bfdb654806 (diff)
parente6f649cb2c07bf55d9214c2876619c56f1d6fe30 (diff)
downloadbitcoin-3a3d8b83571205b8329d4ee25537e3cc4397c3b8.tar.xz
Merge #16097: Refactor: Add Flags enum to ArgsManager class
e6f649cb2c07bf55d9214c2876619c56f1d6fe30 test: Make tests arg type specific (Hennadii Stepanov) b70cc5d73357ea11296f3b6bb81193ba1101e73b Revamp option negating policy (Hennadii Stepanov) db08edb3038a085d3dbce7bb4ec3c1d9b9a5b281 Replace IsArgKnown() with FlagsOfKnownArg() (Hennadii Stepanov) dde80c272ae584410532f48d23866d7d8581a1cc Use ArgsManager::NETWORK_ONLY flag (Hennadii Stepanov) 9a12733508e47f558959f1b0ed9937bc3eff8962 Remove unused m_debug_only member from Arg struct (Hennadii Stepanov) fb4b9f9e3b433d8848832e2c2686cf7b1f212a5e scripted-diff: Use ArgsManager::DEBUG_ONLY flag (Hennadii Stepanov) 1b4b9422cad28d1bead24ff5fd472536954cfaf9 scripted-diff: Use Flags enum in AddArg() (Hennadii Stepanov) 265c1b58d89b7b6fb30468ba402d7f75cc59a510 Add Flags enum to ArgsManager (Hennadii Stepanov) e0d187dfeb18b026de22bd7960b2a50c2b958e1a Refactor InterpretNegatedOption() function (Hennadii Stepanov) e0e18a1017fa3dc5d6ebeda6ec35c4263327d17c refactoring: Check IsArgKnown() early (Hennadii Stepanov) Pull request description: This PR adds the `Flags` enum to the `ArgsManager` class. Also the `m_flags` member is added to the `Arg` struct. Flags denote an allowed type of an arg value and special hints. This PR is only a refactoring and does not change behavior. ACKs for top commit: jamesob: ACK https://github.com/bitcoin/bitcoin/pull/16097/commits/e6f649cb2c07bf55d9214c2876619c56f1d6fe30 MarcoFalke: ACK e6f649cb2c07bf55d9214c2876619c56f1d6fe30 thanks for adding types to the command line options Tree-SHA512: b867f8a9cbce2d2473c293d534af662d8cd5be15060ff0682e97af678974bdaac35e8bc6328ccba32f105034bcd38f169b92a6fb67798667891ce14d5d2a2dea
Diffstat (limited to 'src/util/system.h')
-rw-r--r--src/util/system.h29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/util/system.h b/src/util/system.h
index 66a9eb4612..75e8096826 100644
--- a/src/util/system.h
+++ b/src/util/system.h
@@ -127,6 +127,23 @@ struct SectionInfo
class ArgsManager
{
+public:
+ enum Flags {
+ NONE = 0x00,
+ // Boolean options can accept negation syntax -noOPTION or -noOPTION=1
+ ALLOW_BOOL = 0x01,
+ ALLOW_INT = 0x02,
+ ALLOW_STRING = 0x04,
+ ALLOW_ANY = ALLOW_BOOL | ALLOW_INT | ALLOW_STRING,
+ DEBUG_ONLY = 0x100,
+ /* Some options would cause cross-contamination if values for
+ * mainnet were used while running on regtest/testnet (or vice-versa).
+ * Setting them as NETWORK_ONLY ensures that sharing a config file
+ * between mainnet and regtest/testnet won't cause problems due to these
+ * parameters by accident. */
+ NETWORK_ONLY = 0x200,
+ };
+
protected:
friend class ArgsManagerHelper;
@@ -134,9 +151,7 @@ protected:
{
std::string m_help_param;
std::string m_help_text;
- bool m_debug_only;
-
- Arg(const std::string& help_param, const std::string& help_text, bool debug_only) : m_help_param(help_param), m_help_text(help_text), m_debug_only(debug_only) {};
+ unsigned int m_flags;
};
mutable CCriticalSection cs_args;
@@ -256,7 +271,7 @@ public:
/**
* Add argument
*/
- void AddArg(const std::string& name, const std::string& help, const bool debug_only, const OptionsCategory& cat);
+ void AddArg(const std::string& name, const std::string& help, unsigned int flags, const OptionsCategory& cat);
/**
* Add many hidden arguments
@@ -269,6 +284,7 @@ public:
void ClearArgs() {
LOCK(cs_args);
m_available_args.clear();
+ m_network_only_args.clear();
}
/**
@@ -277,9 +293,10 @@ public:
std::string GetHelpMessage() const;
/**
- * Check whether we know of this arg
+ * Return Flags for known arg.
+ * Return ArgsManager::NONE for unknown arg.
*/
- bool IsArgKnown(const std::string& key) const;
+ unsigned int FlagsOfKnownArg(const std::string& key) const;
};
extern ArgsManager gArgs;