From 8fd51f982d4d09b769a16fbcaa82be52e05cf653 Mon Sep 17 00:00:00 2001 From: Pranav Srinivas Kumar Date: Mon, 1 Apr 2019 21:04:50 -0400 Subject: [PATCH] Argument is now a class. Also it's friends with ArgumentParser. Moved a number of methods to private --- src/argparse.hpp | 207 ++++++++++++++++++++++++----------------------- 1 file changed, 105 insertions(+), 102 deletions(-) diff --git a/src/argparse.hpp b/src/argparse.hpp index fb0ae77..a059720 100644 --- a/src/argparse.hpp +++ b/src/argparse.hpp @@ -85,17 +85,9 @@ T get_from_list(const std::vector& aList, size_t aIndex) { return aList[aIndex]; } -struct Argument { - std::vector mNames; - std::string mHelp; - std::any mDefaultValue; - std::any mImplicitValue; - std::function mAction; - std::vector mValues; - std::vector mRawValues; - size_t mNumArgs; - bool mIsOptional; - +class Argument { + friend class ArgumentParser; +public: Argument() : mNames({}), mHelp(""), @@ -131,97 +123,6 @@ struct Argument { return *this; } - template - T get() const { - if (mValues.size() == 0) { - if (mDefaultValue.has_value()) { - return std::any_cast(mDefaultValue); - } - else - return T(); - } - else { - if (mRawValues.size() > 0) - return std::any_cast(mValues[0]); - else { - if (mDefaultValue.has_value()) - return std::any_cast(mDefaultValue); - else - return T(); - } - } - } - - template - T get_vector() const { - T tResult; - if (mValues.size() == 0) { - if (mDefaultValue.has_value()) { - T tDefaultValues = std::any_cast(mDefaultValue); - for (size_t i = 0; i < tDefaultValues.size(); i++) { - tResult.push_back(std::any_cast(tDefaultValues[i])); - } - return tResult; - } - else - return T(); - } - else { - if (mRawValues.size() > 0) { - for (size_t i = 0; i < mValues.size(); i++) { - tResult.push_back(std::any_cast(mValues[i])); - } - return tResult; - } - else { - if (mDefaultValue.has_value()) { - std::vector tDefaultValues = std::any_cast>(mDefaultValue); - for (size_t i = 0; i < tDefaultValues.size(); i++) { - tResult.push_back(std::any_cast(tDefaultValues[i])); - } - return tResult; - } - else - return T(); - } - } - } - - template - T get_list() const { - T tResult; - if (mValues.size() == 0) { - if (mDefaultValue.has_value()) { - T tDefaultValues = std::any_cast(mDefaultValue); - for (size_t i = 0; i < tDefaultValues.size(); i++) { - tResult.push_back(std::any_cast(get_from_list(tDefaultValues, i))); - } - return tResult; - } - else - return T(); - } - else { - if (mRawValues.size() > 0) { - for (size_t i = 0; i < mValues.size(); i++) { - tResult.push_back(std::any_cast(mValues[i])); - } - return tResult; - } - else { - if (mDefaultValue.has_value()) { - std::list tDefaultValues = std::any_cast>(mDefaultValue); - for (size_t i = 0; i < tDefaultValues.size(); i++) { - tResult.push_back(std::any_cast(get_from_list(tDefaultValues, i))); - } - return tResult; - } - else - return T(); - } - } - } - template bool operator!=(const T& aRhs) const { return !(*this == aRhs); @@ -266,6 +167,108 @@ struct Argument { } } + private: + + template + T get() const { + if (mValues.size() == 0) { + if (mDefaultValue.has_value()) { + return std::any_cast(mDefaultValue); + } + else + return T(); + } + else { + if (mRawValues.size() > 0) + return std::any_cast(mValues[0]); + else { + if (mDefaultValue.has_value()) + return std::any_cast(mDefaultValue); + else + return T(); + } + } + } + + template + T get_vector() const { + T tResult; + if (mValues.size() == 0) { + if (mDefaultValue.has_value()) { + T tDefaultValues = std::any_cast(mDefaultValue); + for (size_t i = 0; i < tDefaultValues.size(); i++) { + tResult.push_back(std::any_cast(tDefaultValues[i])); + } + return tResult; + } + else + return T(); + } + else { + if (mRawValues.size() > 0) { + for (size_t i = 0; i < mValues.size(); i++) { + tResult.push_back(std::any_cast(mValues[i])); + } + return tResult; + } + else { + if (mDefaultValue.has_value()) { + std::vector tDefaultValues = std::any_cast>(mDefaultValue); + for (size_t i = 0; i < tDefaultValues.size(); i++) { + tResult.push_back(std::any_cast(tDefaultValues[i])); + } + return tResult; + } + else + return T(); + } + } + } + + template + T get_list() const { + T tResult; + if (mValues.size() == 0) { + if (mDefaultValue.has_value()) { + T tDefaultValues = std::any_cast(mDefaultValue); + for (size_t i = 0; i < tDefaultValues.size(); i++) { + tResult.push_back(std::any_cast(get_from_list(tDefaultValues, i))); + } + return tResult; + } + else + return T(); + } + else { + if (mRawValues.size() > 0) { + for (size_t i = 0; i < mValues.size(); i++) { + tResult.push_back(std::any_cast(mValues[i])); + } + return tResult; + } + else { + if (mDefaultValue.has_value()) { + std::list tDefaultValues = std::any_cast>(mDefaultValue); + for (size_t i = 0; i < tDefaultValues.size(); i++) { + tResult.push_back(std::any_cast(get_from_list(tDefaultValues, i))); + } + return tResult; + } + else + return T(); + } + } + } + + std::vector mNames; + std::string mHelp; + std::any mDefaultValue; + std::any mImplicitValue; + std::function mAction; + std::vector mValues; + std::vector mRawValues; + size_t mNumArgs; + bool mIsOptional; }; class ArgumentParser {