/* * argpars.hpp * * Created on: 30 авг. 2022 г. * Author: alexander */ #pragma once #include #include #include #include #include #include #include #include namespace args { enum hasArg { NO, REQUIRED, OPTIONAL }; typedef std::vector (*_handler)(const std::vector&); class ConfigOption { private: char *_longParameter; const char _shortParameter; const hasArg _ha; const _handler _h; public: ConfigOption(const std::string &longParameter, const char shortParameter, const hasArg ha, _handler h = nullptr); const char* getLongParameter() const; const char& getShortParameter() const; const hasArg& getPresenceArgument() const; const _handler getHandler() const; }; class Option { private: _handler _h; std::vector _values; std::vector _handling() const; public: Option(const _handler h = nullptr); void push(const std::string &value); std::vector getValues(bool handling = false); }; class Hub { private: struct option *_longOptions; char *_shortOptions; std::map> _arguments; void _createArguments(const std::vector &options, bool silence); public: Hub(const std::vector &options, bool silence = true); void readArguments(int argc, char *argv[], void (*_callback)() = nullptr); Option getOption(char key) const; ~Hub(); }; }