2022-08-30 16:12:29 +00:00
|
|
|
|
/*
|
|
|
|
|
* argpars.hpp
|
|
|
|
|
*
|
|
|
|
|
* Created on: 30 авг. 2022 г.
|
|
|
|
|
* Author: alexander
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
2022-08-31 12:20:57 +00:00
|
|
|
|
#include <iostream>
|
2022-08-30 16:12:29 +00:00
|
|
|
|
#include <getopt.h>
|
2022-08-31 12:20:57 +00:00
|
|
|
|
|
2022-08-30 16:12:29 +00:00
|
|
|
|
#include <vector>
|
|
|
|
|
#include <string>
|
|
|
|
|
#include <cstring>
|
|
|
|
|
#include <map>
|
|
|
|
|
|
2022-08-31 12:20:57 +00:00
|
|
|
|
#include <boost/range/adaptors.hpp>
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
|
|
namespace args
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
enum hasArg
|
|
|
|
|
{
|
|
|
|
|
NO, REQUIRED, OPTIONAL
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
typedef std::vector<std::string> (*_handler)(const std::vector<std::string>&);
|
|
|
|
|
|
|
|
|
|
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
|
2022-08-30 16:12:29 +00:00
|
|
|
|
{
|
|
|
|
|
private:
|
2022-08-31 12:20:57 +00:00
|
|
|
|
_handler _h;
|
|
|
|
|
std::vector<std::string> _values;
|
|
|
|
|
std::vector<std::string> _handling() const;
|
2022-08-30 16:12:29 +00:00
|
|
|
|
public:
|
2022-08-31 12:20:57 +00:00
|
|
|
|
Option(const _handler h = nullptr);
|
|
|
|
|
void push(const std::string &value);
|
|
|
|
|
std::vector<std::string> getValues(bool handling = false);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class Hub
|
|
|
|
|
{
|
2022-08-30 16:12:29 +00:00
|
|
|
|
private:
|
2022-08-31 12:20:57 +00:00
|
|
|
|
struct option *_longOptions;
|
|
|
|
|
char *_shortOptions;
|
|
|
|
|
std::map<char, std::pair<bool, Option>> _arguments;
|
|
|
|
|
void _createArguments(const std::vector<ConfigOption> &options, bool silence);
|
|
|
|
|
public:
|
|
|
|
|
Hub(const std::vector<ConfigOption> &options, bool silence = true);
|
|
|
|
|
void readArguments(int argc, char *argv[], void (*_callback)() = nullptr);
|
|
|
|
|
Option getOption(char key) const;
|
|
|
|
|
~Hub();
|
2022-08-30 16:12:29 +00:00
|
|
|
|
};
|
2022-08-31 12:20:57 +00:00
|
|
|
|
|
|
|
|
|
}
|