69 lines
1.4 KiB
C++
69 lines
1.4 KiB
C++
|
/*
|
|||
|
* ap.hpp
|
|||
|
*
|
|||
|
* Created on: 05 сен. 2022 г.
|
|||
|
* Author: alexander
|
|||
|
*/
|
|||
|
|
|||
|
#pragma once
|
|||
|
|
|||
|
#include <getopt.h>
|
|||
|
#include <vector>
|
|||
|
#include <string>
|
|||
|
#include <cstring>
|
|||
|
#include <map>
|
|||
|
#include <boost/range/adaptors.hpp>
|
|||
|
|
|||
|
namespace ap
|
|||
|
{
|
|||
|
|
|||
|
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;
|
|||
|
public:
|
|||
|
ConfigOption(const std::string &longParameter, const char shortParameter, const hasArg ha);
|
|||
|
const char* getLongParameter() const;
|
|||
|
const char& getShortParameter() const;
|
|||
|
const hasArg& getPresenceArgument() const;
|
|||
|
};
|
|||
|
|
|||
|
class Option
|
|||
|
{
|
|||
|
private:
|
|||
|
std::vector<std::string> _values;
|
|||
|
bool _set;
|
|||
|
public:
|
|||
|
Option();
|
|||
|
void push(const std::string &value);
|
|||
|
std::vector<std::string>& getValues();
|
|||
|
void set();
|
|||
|
bool isSet() const;
|
|||
|
};
|
|||
|
|
|||
|
class Hub
|
|||
|
{
|
|||
|
private:
|
|||
|
struct option *_longOptions;
|
|||
|
size_t _sizeOptions;
|
|||
|
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();
|
|||
|
};
|
|||
|
|
|||
|
}
|