diff options
Diffstat (limited to 'args.hxx')
| -rw-r--r-- | args.hxx | 356 | 
1 files changed, 178 insertions, 178 deletions
| @@ -45,10 +45,10 @@ namespace args       * If the Get() function of the type returns a reference, so does this, and       * the value will be modifiable.       */ -    template <typename Arg> -    auto get(Arg &arg) -> decltype(arg.Get()) +    template <typename Option> +    auto get(Option &option) -> decltype(option.Get())      { -        return arg.Get(); +        return option.Get();      }      /** (INTERNAL) Count UTF-8 glyphs @@ -174,50 +174,50 @@ namespace args      /** A simple unified option type for unified initializer lists for the Matcher class.       */ -    struct EitherOpt +    struct EitherFlag      {          const bool isShort; -        const char shortOpt; -        const std::string longOpt; -        EitherOpt(const std::string &opt) : isShort(false), shortOpt(), longOpt(opt) {} -        EitherOpt(const char *opt) : isShort(false), shortOpt(), longOpt(opt) {} -        EitherOpt(const char opt) : isShort(true), shortOpt(opt), longOpt() {} +        const char shortFlag; +        const std::string longFlag; +        EitherFlag(const std::string &flag) : isShort(false), shortFlag(), longFlag(flag) {} +        EitherFlag(const char *flag) : isShort(false), shortFlag(), longFlag(flag) {} +        EitherFlag(const char flag) : isShort(true), shortFlag(flag), longFlag() {} -        /** Get just the long options from an initializer list of EitherOpts +        /** Get just the long flags from an initializer list of EitherFlags           */ -        static std::unordered_set<std::string> GetLong(std::initializer_list<EitherOpt> opts) +        static std::unordered_set<std::string> GetLong(std::initializer_list<EitherFlag> flags)          { -            std::unordered_set<std::string>  longOpts; -            for (const EitherOpt &opt: opts) +            std::unordered_set<std::string>  longFlags; +            for (const EitherFlag &flag: flags)              { -                if (!opt.isShort) +                if (!flag.isShort)                  { -                    longOpts.insert(opt.longOpt); +                    longFlags.insert(flag.longFlag);                  }              } -            return longOpts; +            return longFlags;          } -        /** Get just the short options from an initializer list of EitherOpts +        /** Get just the short flags from an initializer list of EitherFlags           */ -        static std::unordered_set<char> GetShort(std::initializer_list<EitherOpt> opts) +        static std::unordered_set<char> GetShort(std::initializer_list<EitherFlag> flags)          { -            std::unordered_set<char>  shortOpts; -            for (const EitherOpt &opt: opts) +            std::unordered_set<char>  shortFlags; +            for (const EitherFlag &flag: flags)              { -                if (opt.isShort) +                if (flag.isShort)                  { -                    shortOpts.insert(opt.shortOpt); +                    shortFlags.insert(flag.shortFlag);                  }              } -            return shortOpts; +            return shortFlags;          }      }; -    /** A class of "matchers", specifying short and long options that can -     * possibly be matched. +    /** A class of "matchers", specifying short and flags that can possibly be +     * matched.       *       * This is supposed to be constructed and then passed in, not used directly       * from user code. @@ -225,96 +225,96 @@ namespace args      class Matcher      {          private: -            const std::unordered_set<char> shortOpts; -            const std::unordered_set<std::string> longOpts; +            const std::unordered_set<char> shortFlags; +            const std::unordered_set<std::string> longFlags;          public: -            /** Specify short and long opts separately as iterators +            /** Specify short and long flags separately as iterators               * -             * ex: `args::Matcher(shortOpts.begin(), shortOpts.end(), longOpts.begin(), longOpts.end())` +             * ex: `args::Matcher(shortFlags.begin(), shortFlags.end(), longFlags.begin(), longFlags.end())`               */              template <typename ShortIt, typename LongIt> -            Matcher(ShortIt shortOptsStart, ShortIt shortOptsEnd, LongIt longOptsStart, LongIt longOptsEnd) : -                shortOpts(shortOptsStart, shortOptsEnd), -                longOpts(longOptsStart, longOptsEnd) +            Matcher(ShortIt shortFlagsStart, ShortIt shortFlagsEnd, LongIt longFlagsStart, LongIt longFlagsEnd) : +                shortFlags(shortFlagsStart, shortFlagsEnd), +                longFlags(longFlagsStart, longFlagsEnd)              {} -            /** Specify short and long opts separately as iterables +            /** Specify short and long flags separately as iterables               * -             * ex: `args::Matcher(shortOpts, longOpts)` +             * ex: `args::Matcher(shortFlags, longFlags)`               */              template <typename Short, typename Long>              Matcher(Short &&shortIn, Long &&longIn) : -                shortOpts(std::begin(shortIn), std::end(shortIn)), longOpts(std::begin(longIn), std::end(longIn)) +                shortFlags(std::begin(shortIn), std::end(shortIn)), longFlags(std::begin(longIn), std::end(longIn))              {} -            /** Specify a mixed single initializer-list of both short and long opts +            /** Specify a mixed single initializer-list of both short and long flags               *               * This is the fancy one.  It takes a single initializer list of -             * any number of any mixed kinds of options.  Chars are -             * automatically interpreted as short options, and strings are -             * automatically interpreted as long options: +             * any number of any mixed kinds of flags.  Chars are +             * automatically interpreted as short flags, and strings are +             * automatically interpreted as long flags:               *               *     args::Matcher{'a'}               *     args::Matcher{"foo"}               *     args::Matcher{'h', "help"}               *     args::Matcher{"foo", 'f', 'F', "FoO"}               */ -            Matcher(std::initializer_list<EitherOpt> in) : -                shortOpts(EitherOpt::GetShort(in)), longOpts(EitherOpt::GetLong(in)) {} +            Matcher(std::initializer_list<EitherFlag> in) : +                shortFlags(EitherFlag::GetShort(in)), longFlags(EitherFlag::GetLong(in)) {} -            Matcher(Matcher &&other) : shortOpts(std::move(other.shortOpts)), longOpts(std::move(other.longOpts)) +            Matcher(Matcher &&other) : shortFlags(std::move(other.shortFlags)), longFlags(std::move(other.longFlags))              {}              ~Matcher() {} -            /** (INTERNAL) Check if there is a match of a short opt +            /** (INTERNAL) Check if there is a match of a short flag               */ -            bool Match(const char opt) const +            bool Match(const char flag) const              { -                return shortOpts.find(opt) != shortOpts.end(); +                return shortFlags.find(flag) != shortFlags.end();              } -            /** (INTERNAL) Check if there is a match of a long opt +            /** (INTERNAL) Check if there is a match of a long flag               */ -            bool Match(const std::string &opt) const +            bool Match(const std::string &flag) const              { -                return longOpts.find(opt) != longOpts.end(); +                return longFlags.find(flag) != longFlags.end();              } -            /** (INTERNAL) Get all option strings as a vector, with the prefixes embedded +            /** (INTERNAL) Get all flag strings as a vector, with the prefixes embedded               */ -            std::vector<std::string> GetOptionStrings(const std::string &shortPrefix, const std::string &longPrefix) const +            std::vector<std::string> GetFlagStrings(const std::string &shortPrefix, const std::string &longPrefix) const              { -                std::vector<std::string> optStrings; -                optStrings.reserve(shortOpts.size() + longOpts.size()); -                for (const char opt: shortOpts) +                std::vector<std::string> flagStrings; +                flagStrings.reserve(shortFlags.size() + longFlags.size()); +                for (const char flag: shortFlags)                  { -                    optStrings.emplace_back(shortPrefix + std::string(1, opt)); +                    flagStrings.emplace_back(shortPrefix + std::string(1, flag));                  } -                for (const std::string &opt: longOpts) +                for (const std::string &flag: longFlags)                  { -                    optStrings.emplace_back(longPrefix + opt); +                    flagStrings.emplace_back(longPrefix + flag);                  } -                return optStrings; +                return flagStrings;              } -            /** (INTERNAL) Get all option strings as a vector, with the prefixes and names embedded +            /** (INTERNAL) Get all flag strings as a vector, with the prefixes and names embedded               */ -            std::vector<std::string> GetOptionStrings(const std::string &shortPrefix, const std::string &longPrefix, const std::string &name, const std::string &shortSeparator, const std::string longSeparator) const +            std::vector<std::string> GetFlagStrings(const std::string &shortPrefix, const std::string &longPrefix, const std::string &name, const std::string &shortSeparator, const std::string longSeparator) const              {                  const std::string bracedname(std::string("[") + name + "]"); -                std::vector<std::string> optStrings; -                optStrings.reserve(shortOpts.size() + longOpts.size()); -                for (const char opt: shortOpts) +                std::vector<std::string> flagStrings; +                flagStrings.reserve(shortFlags.size() + longFlags.size()); +                for (const char flag: shortFlags)                  { -                    optStrings.emplace_back(shortPrefix + std::string(1, opt) + shortSeparator + bracedname); +                    flagStrings.emplace_back(shortPrefix + std::string(1, flag) + shortSeparator + bracedname);                  } -                for (const std::string &opt: longOpts) +                for (const std::string &flag: longFlags)                  { -                    optStrings.emplace_back(longPrefix + opt + longSeparator + bracedname); +                    flagStrings.emplace_back(longPrefix + flag + longSeparator + bracedname);                  } -                return optStrings; +                return flagStrings;              }      }; @@ -377,7 +377,7 @@ namespace args              }      }; -    /** Base class for all flag arguments +    /** Base class for all flag options       */      class FlagBase : public NamedBase      { @@ -389,9 +389,9 @@ namespace args              virtual ~FlagBase() {} -            virtual FlagBase *Match(const std::string &arg) +            virtual FlagBase *Match(const std::string &flag)              { -                if (matcher.Match(arg)) +                if (matcher.Match(flag))                  {                      matched = true;                      return this; @@ -399,9 +399,9 @@ namespace args                  return nullptr;              } -            virtual FlagBase *Match(const char arg) +            virtual FlagBase *Match(const char flag)              { -                if (matcher.Match(arg)) +                if (matcher.Match(flag))                  {                      matched = true;                      return this; @@ -412,11 +412,11 @@ namespace args              virtual std::tuple<std::string, std::string> GetDescription(const std::string &shortPrefix, const std::string &longPrefix, const std::string &shortSeparator, const std::string &longSeparator) const override              {                  std::tuple<std::string, std::string> description; -                const std::vector<std::string> optStrings(matcher.GetOptionStrings(shortPrefix, longPrefix)); +                const std::vector<std::string> flagStrings(matcher.GetFlagStrings(shortPrefix, longPrefix));                  std::ostringstream flagstream; -                for (auto it = std::begin(optStrings); it != std::end(optStrings); ++it) +                for (auto it = std::begin(flagStrings); it != std::end(flagStrings); ++it)                  { -                    if (it != std::begin(optStrings)) +                    if (it != std::begin(flagStrings))                      {                          flagstream << ", ";                      } @@ -428,23 +428,23 @@ namespace args              }      }; -    /** Base class for argument-accepting flag arguments +    /** Base class for value-accepting flag options       */ -    class ArgFlagBase : public FlagBase +    class ValueFlagBase : public FlagBase      {          public: -            ArgFlagBase(const std::string &name, const std::string &help, Matcher &&matcher) : FlagBase(name, help, std::move(matcher)) {} -            virtual ~ArgFlagBase() {} -            virtual void ParseArg(const std::string &value) = 0; +            ValueFlagBase(const std::string &name, const std::string &help, Matcher &&matcher) : FlagBase(name, help, std::move(matcher)) {} +            virtual ~ValueFlagBase() {} +            virtual void ParseValue(const std::string &value) = 0;              virtual std::tuple<std::string, std::string> GetDescription(const std::string &shortPrefix, const std::string &longPrefix, const std::string &shortSeparator, const std::string &longSeparator) const override              {                  std::tuple<std::string, std::string> description; -                const std::vector<std::string> optStrings(matcher.GetOptionStrings(shortPrefix, longPrefix, name, shortSeparator, longSeparator)); +                const std::vector<std::string> flagStrings(matcher.GetFlagStrings(shortPrefix, longPrefix, name, shortSeparator, longSeparator));                  std::ostringstream flagstream; -                for (auto it = std::begin(optStrings); it != std::end(optStrings); ++it) +                for (auto it = std::begin(flagStrings); it != std::end(flagStrings); ++it)                  { -                    if (it != std::begin(optStrings)) +                    if (it != std::begin(flagStrings))                      {                          flagstream << ", ";                      } @@ -456,7 +456,7 @@ namespace args              }      }; -    /** Base class for positional arguments +    /** Base class for positional options       */      class PosBase : public NamedBase      { @@ -472,7 +472,7 @@ namespace args                  return ready;              } -            virtual void ParseArg(const std::string &value) = 0; +            virtual void ParseValue(const std::string &value) = 0;      };      /** Class for all kinds of validating groups, including ArgumentParser @@ -491,27 +491,27 @@ namespace args              }              virtual ~Group() {} -            /** Return the first FlagBase that matches arg, or nullptr +            /** Return the first FlagBase that matches flag, or nullptr               * -             * \param arg The argument with prefixes stripped +             * \param flag The flag with prefixes stripped               * \return the first matching FlagBase pointer, or nullptr if there is no match               */ -            FlagBase *Match(const std::string &arg) +            FlagBase *Match(const std::string &flag)              {                  for (Base *child: children)                  { -                    FlagBase *flag = dynamic_cast<FlagBase *>(child); +                    FlagBase *flagBase = dynamic_cast<FlagBase *>(child);                      Group *group = dynamic_cast<Group *>(child); -                    if (flag) +                    if (flagBase)                      { -                        FlagBase *match = flag->Match(arg); +                        FlagBase *match = flagBase->Match(flag);                          if (match)                          {                              return match;                          }                      } else if (group)                      { -                        FlagBase *match = group->Match(arg); +                        FlagBase *match = group->Match(flag);                          if (match)                          {                              return match; @@ -521,27 +521,27 @@ namespace args                  return nullptr;              } -            /** Return the first FlagBase that matches arg, or nullptr +            /** Return the first FlagBase that matches flag, or nullptr               * -             * \param arg The argument with prefixes stripped +             * \param flag The flag with prefixes stripped               * \return the first matching FlagBase pointer, or nullptr if there is no match               */ -            FlagBase *Match(const char arg) +            FlagBase *Match(const char flag)              {                  for (Base *child: children)                  { -                    FlagBase *flag = dynamic_cast<FlagBase *>(child); +                    FlagBase *flagBase = dynamic_cast<FlagBase *>(child);                      Group *group = dynamic_cast<Group *>(child); -                    if (flag) +                    if (flagBase)                      { -                        FlagBase *match = flag->Match(arg); +                        FlagBase *match = flagBase->Match(flag);                          if (match)                          {                              return match;                          }                      } else if (group)                      { -                        FlagBase *match = group->Match(arg); +                        FlagBase *match = group->Match(flag);                          if (match)                          {                              return match; @@ -551,7 +551,7 @@ namespace args                  return nullptr;              } -            /** Get the next ready positional parameter, or nullptr if there is none +            /** Get the next ready positional, or nullptr if there is none               *               * \return the first ready PosBase pointer, or nullptr if there is no match               */ @@ -776,10 +776,10 @@ namespace args              std::string terminator; -            bool allowJoinedShortArgument; -            bool allowJoinedLongArgument; -            bool allowSeparateShortArgument; -            bool allowSeparateLongArgument; +            bool allowJoinedShortValue; +            bool allowJoinedLongValue; +            bool allowSeparateShortValue; +            bool allowSeparateLongValue;          public:              /** A simple structure of parameters for easy user-modifyable help menus @@ -825,17 +825,17 @@ namespace args                  bool showProglinePositionals = true;              } helpParams;              ArgumentParser(const std::string &description, const std::string &epilog = std::string()) : -                Group("arguments", Group::Validators::AllChildGroups), +                Group("options", Group::Validators::AllChildGroups),                  description(description),                  epilog(epilog),                  longprefix("--"),                  shortprefix("-"),                  longseparator("="),                  terminator("--"), -                allowJoinedShortArgument(true), -                allowJoinedLongArgument(true), -                allowSeparateShortArgument(true), -                allowSeparateLongArgument(true) {} +                allowJoinedShortValue(true), +                allowJoinedLongValue(true), +                allowSeparateShortValue(true), +                allowSeparateLongValue(true) {}              /** The program name for help generation               */ @@ -846,11 +846,11 @@ namespace args              void Prog(const std::string &prog)              { this->prog = prog; } -            /** The description that appears on the prog line after options and positionals +            /** The description that appears on the prog line after options               */              const std::string &ProglinePostfix() const              { return proglinePostfix; } -            /** The description that appears on the prog line after options and positionals +            /** The description that appears on the prog line after options               */              void ProglinePostfix(const std::string &proglinePostfix)              { this->proglinePostfix = proglinePostfix; } @@ -873,29 +873,29 @@ namespace args              void Epilog(const std::string &epilog)              { this->epilog = epilog; } -            /** The prefix for long options +            /** The prefix for long flags               */              const std::string &LongPrefix() const              { return longprefix; } -            /** The prefix for long options +            /** The prefix for long flags               */              void LongPrefix(const std::string &longprefix)              { this->longprefix = longprefix; } -            /** The prefix for short options +            /** The prefix for short flags               */              const std::string &ShortPrefix() const              { return shortprefix; } -            /** The prefix for short options +            /** The prefix for short flags               */              void ShortPrefix(const std::string &shortprefix)              { this->shortprefix = shortprefix; } -            /** The separator for long options +            /** The separator for long flags               */              const std::string &LongSeparator() const              { return longseparator; } -            /** The separator for long options +            /** The separator for long flags               */              void LongSeparator(const std::string &longseparator)              { @@ -906,11 +906,11 @@ namespace args                  this->longseparator = longseparator;              } -            /** The terminator that separates short options from long ones +            /** The terminator that forcibly separates flags from positionals               */              const std::string &Terminator() const              { return terminator; } -            /** The terminator that separates short options from long ones +            /** The terminator that forcibly separates flags from positionals               */              void Terminator(const std::string &terminator)              { this->terminator = terminator; } @@ -920,34 +920,34 @@ namespace args               * See SetArgumentSeparations for details on what each one means.               */              void GetArgumentSeparations( -                bool &allowJoinedShortArgument, -                bool &allowJoinedLongArgument, -                bool &allowSeparateShortArgument, -                bool &allowSeparateLongArgument) const -            { -                allowJoinedShortArgument = this->allowJoinedShortArgument; -                allowJoinedLongArgument = this->allowJoinedLongArgument; -                allowSeparateShortArgument = this->allowSeparateShortArgument; -                allowSeparateLongArgument = this->allowSeparateLongArgument; +                bool &allowJoinedShortValue, +                bool &allowJoinedLongValue, +                bool &allowSeparateShortValue, +                bool &allowSeparateLongValue) const +            { +                allowJoinedShortValue = this->allowJoinedShortValue; +                allowJoinedLongValue = this->allowJoinedLongValue; +                allowSeparateShortValue = this->allowSeparateShortValue; +                allowSeparateLongValue = this->allowSeparateLongValue;              }              /** Change allowed option separation.               * -             * \param allowJoinedShortArgument Allow a short flag that accepts an argument to be passed its argument immediately next to it (ie. in the same argv field) -             * \param allowJoinedLongArgument Allow a long flag that accepts an argument to be passed its argument separated by the longseparator (ie. in the same argv field) -             * \param allowSeparateShortArgument Allow a short flag that accepts an argument to be passed its argument separated by whitespace (ie. in the next argv field) -             * \param allowSeparateLongArgument Allow a long flag that accepts an argument to be passed its argument separated by whitespace (ie. in the next argv field) +             * \param allowJoinedShortValue Allow a short flag that accepts an argument to be passed its argument immediately next to it (ie. in the same argv field) +             * \param allowJoinedLongValue Allow a long flag that accepts an argument to be passed its argument separated by the longseparator (ie. in the same argv field) +             * \param allowSeparateShortValue Allow a short flag that accepts an argument to be passed its argument separated by whitespace (ie. in the next argv field) +             * \param allowSeparateLongValue Allow a long flag that accepts an argument to be passed its argument separated by whitespace (ie. in the next argv field)               */              void SetArgumentSeparations( -                const bool allowJoinedShortArgument, -                const bool allowJoinedLongArgument, -                const bool allowSeparateShortArgument, -                const bool allowSeparateLongArgument) -            { -                this->allowJoinedShortArgument = allowJoinedShortArgument; -                this->allowJoinedLongArgument = allowJoinedLongArgument; -                this->allowSeparateShortArgument = allowSeparateShortArgument; -                this->allowSeparateLongArgument = allowSeparateLongArgument; +                const bool allowJoinedShortValue, +                const bool allowJoinedLongValue, +                const bool allowSeparateShortValue, +                const bool allowSeparateLongValue) +            { +                this->allowJoinedShortValue = allowJoinedShortValue; +                this->allowJoinedLongValue = allowJoinedLongValue; +                this->allowSeparateShortValue = allowSeparateShortValue; +                this->allowSeparateLongValue = allowSeparateLongValue;              }              /** Pass the help menu into an ostream @@ -1001,7 +1001,7 @@ namespace args                  }                  help << "\n";                  help << std::string(helpParams.progindent, ' ') << "OPTIONS:\n\n"; -                for (const auto &description: GetChildDescriptions(shortprefix, longprefix, allowJoinedShortArgument ? "" : " ", allowJoinedLongArgument ? longseparator : " ")) +                for (const auto &description: GetChildDescriptions(shortprefix, longprefix, allowJoinedShortValue ? "" : " ", allowJoinedLongValue ? longseparator : " "))                  {                      const unsigned int groupindent = std::get<2>(description) * helpParams.eachgroupindent;                      const std::vector<std::string> flags(Wrap(std::get<0>(description), helpParams.width - (helpParams.flagindent + helpParams.helpindent + helpParams.gutter))); @@ -1093,14 +1093,14 @@ namespace args                          FlagBase *base = Match(arg);                          if (base)                          { -                            ArgFlagBase *argbase = dynamic_cast<ArgFlagBase *>(base); +                            ValueFlagBase *argbase = dynamic_cast<ValueFlagBase *>(base);                              if (argbase)                              {                                  if (separator != argchunk.npos)                                  { -                                    if (allowJoinedLongArgument) +                                    if (allowJoinedLongValue)                                      { -                                        argbase->ParseArg(argchunk.substr(separator + longseparator.size())); +                                        argbase->ParseValue(argchunk.substr(separator + longseparator.size()));                                      } else                                      {                                          std::ostringstream problem; @@ -1117,9 +1117,9 @@ namespace args                                          throw ParseError(problem.str().c_str());                                      } -                                    if (allowSeparateLongArgument) +                                    if (allowSeparateLongValue)                                      { -                                        argbase->ParseArg(*it); +                                        argbase->ParseValue(*it);                                      } else                                      {                                          std::ostringstream problem; @@ -1150,15 +1150,15 @@ namespace args                              Base *base = Match(arg);                              if (base)                              { -                                ArgFlagBase *argbase = dynamic_cast<ArgFlagBase *>(base); +                                ValueFlagBase *argbase = dynamic_cast<ValueFlagBase *>(base);                                  if (argbase)                                  {                                      const std::string arg(++argit, std::end(argchunk));                                      if (!arg.empty())                                      { -                                        if (allowJoinedShortArgument) +                                        if (allowJoinedShortValue)                                          { -                                            argbase->ParseArg(arg); +                                            argbase->ParseValue(arg);                                          } else                                          {                                              std::ostringstream problem; @@ -1175,9 +1175,9 @@ namespace args                                              throw ParseError(problem.str().c_str());                                          } -                                        if (allowSeparateShortArgument) +                                        if (allowSeparateShortValue)                                          { -                                            argbase->ParseArg(*it); +                                            argbase->ParseValue(*it);                                          } else                                          {                                              std::ostringstream problem; @@ -1200,7 +1200,7 @@ namespace args                          PosBase *pos = GetNextPos();                          if (pos)                          { -                            pos->ParseArg(chunk); +                            pos->ParseValue(chunk);                          } else                          {                              std::ostringstream problem; @@ -1307,15 +1307,15 @@ namespace args      /** A flag class that simply counts the number of times it's matched       */ -    class Counter : public Flag +    class CounterFlag : public Flag      {          private:              int count;          public: -            Counter(Group &group, const std::string &name, const std::string &help, Matcher &&matcher, const int startcount = 0): Flag(group, name, help, std::move(matcher)), count(startcount) {} +            CounterFlag(Group &group, const std::string &name, const std::string &help, Matcher &&matcher, const int startcount = 0): Flag(group, name, help, std::move(matcher)), count(startcount) {} -            virtual ~Counter() {} +            virtual ~CounterFlag() {}              virtual FlagBase *Match(const std::string &arg) override              { @@ -1351,7 +1351,7 @@ namespace args       * raises a ParseError if there are any characters left.       */      template <typename T> -    void ArgReader(const std::string &name, const std::string &value, T &destination) +    void ValueReader(const std::string &name, const std::string &value, T &destination)      {          std::istringstream ss(value);          ss >> destination; @@ -1364,13 +1364,13 @@ namespace args          }      } -    /** std::string specialization for ArgReader +    /** std::string specialization for ValueReader       *       * By default, stream extraction into a string splits on white spaces, and       * it is more efficient to ust copy a string into the destination.       */      template <> -    void ArgReader<std::string>(const std::string &name, const std::string &value, std::string &destination) +    void ValueReader<std::string>(const std::string &name, const std::string &value, std::string &destination)      {          destination.assign(value);      } @@ -1380,22 +1380,22 @@ namespace args       * \tparam T the type to extract the argument as       * \tparam Reader The function used to read the argument, taking the name, value, and destination reference       */ -    template <typename T, void (*Reader)(const std::string &, const std::string &, T&) = ArgReader<T>> -    class ArgFlag : public ArgFlagBase +    template <typename T, void (*Reader)(const std::string &, const std::string &, T&) = ValueReader<T>> +    class ValueFlag : public ValueFlagBase      {          private:              T value;          public: -            ArgFlag(Group &group, const std::string &name, const std::string &help, Matcher &&matcher, const T &defaultValue = T()): ArgFlagBase(name, help, std::move(matcher)), value(defaultValue) +            ValueFlag(Group &group, const std::string &name, const std::string &help, Matcher &&matcher, const T &defaultValue = T()): ValueFlagBase(name, help, std::move(matcher)), value(defaultValue)              {                  group.Add(*this);              } -            virtual ~ArgFlag() {} +            virtual ~ValueFlag() {} -            virtual void ParseArg(const std::string &value) override +            virtual void ParseValue(const std::string &value) override              {                  Reader(name, value, this->value);              } @@ -1417,22 +1417,22 @@ namespace args      template <          typename T,          typename List = std::vector<T>, -        void (*Reader)(const std::string &, const std::string &, T&) = ArgReader<T>> -    class ArgFlagList : public ArgFlagBase +        void (*Reader)(const std::string &, const std::string &, T&) = ValueReader<T>> +    class ValueFlagList : public ValueFlagBase      {          private:              List values;          public: -            ArgFlagList(Group &group, const std::string &name, const std::string &help, Matcher &&matcher, const List &defaultValues = List()): ArgFlagBase(name, help, std::move(matcher)), values(defaultValues) +            ValueFlagList(Group &group, const std::string &name, const std::string &help, Matcher &&matcher, const List &defaultValues = List()): ValueFlagBase(name, help, std::move(matcher)), values(defaultValues)              {                  group.Add(*this);              } -            virtual ~ArgFlagList() {} +            virtual ~ValueFlagList() {} -            virtual void ParseArg(const std::string &value) override +            virtual void ParseValue(const std::string &value) override              {                  values.emplace_back();                  Reader(name, value, values.back()); @@ -1451,20 +1451,20 @@ namespace args       * \tparam T the type to extract the argument as       * \tparam Reader The function used to read the argument, taking the name, value, and destination reference       */ -    template <typename T, void (*Reader)(const std::string &, const std::string &, T&) = ArgReader<T>> -    class PosArg : public PosBase +    template <typename T, void (*Reader)(const std::string &, const std::string &, T&) = ValueReader<T>> +    class Positional : public PosBase      {          private:              T value;          public: -            PosArg(Group &group, const std::string &name, const std::string &help, const T &defaultValue = T()): PosBase(name, help), value(defaultValue) +            Positional(Group &group, const std::string &name, const std::string &help, const T &defaultValue = T()): PosBase(name, help), value(defaultValue)              {                  group.Add(*this);              } -            virtual ~PosArg() {} +            virtual ~Positional() {} -            virtual void ParseArg(const std::string &value) override +            virtual void ParseValue(const std::string &value) override              {                  Reader(name, value, this->value);                  ready = false; @@ -1488,21 +1488,21 @@ namespace args      template <          typename T,          typename List = std::vector<T>, -        void (*Reader)(const std::string &, const std::string &, T&) = ArgReader<T>> -    class PosArgList : public PosBase +        void (*Reader)(const std::string &, const std::string &, T&) = ValueReader<T>> +    class PositionalList : public PosBase      {          private:              List values;          public: -            PosArgList(Group &group, const std::string &name, const std::string &help, const List &defaultValues = List()): PosBase(name, help), values(defaultValues) +            PositionalList(Group &group, const std::string &name, const std::string &help, const List &defaultValues = List()): PosBase(name, help), values(defaultValues)              {                  group.Add(*this);              } -            virtual ~PosArgList() {} +            virtual ~PositionalList() {} -            virtual void ParseArg(const std::string &value) override +            virtual void ParseValue(const std::string &value) override              {                  values.emplace_back();                  Reader(name, value, values.back()); | 
