43 lines
1.1 KiB
C++
43 lines
1.1 KiB
C++
/*
|
||
* argpars.hpp
|
||
*
|
||
* Created on: 30 авг. 2022 г.
|
||
* Author: alexander
|
||
*/
|
||
|
||
#pragma once
|
||
|
||
#include <getopt.h>
|
||
#include <vector>
|
||
#include <string>
|
||
#include <cstring>
|
||
#include <map>
|
||
|
||
class ArgPars
|
||
{
|
||
private:
|
||
typedef void (*cPtr)();
|
||
public:
|
||
enum hasArg {NO, REQUIRED, OPTIONAL};
|
||
|
||
ArgPars(cPtr callback = nullptr, bool silencemode = true);
|
||
void readArguments(int argc, char *argv[]);
|
||
void addKey(const char shortKey, const std::string &longKey, hasArg argument);
|
||
bool checkKey(const char shortKey);
|
||
std::string getValue(const char shortKey);
|
||
std::vector<std::string> getValues(const char shortKey);
|
||
private:
|
||
struct option *longOptions;
|
||
size_t sizeLongOption;
|
||
char* shortOptions;
|
||
size_t sizeShortOption;
|
||
std::map<char, std::pair<bool, std::vector<std::string>>> cfg;
|
||
|
||
cPtr _callback;
|
||
|
||
void addShortOption(const char shortKey, hasArg argument);
|
||
struct option createNewOption(const char shortKey, const std::string &longKey, hasArg argument);
|
||
void addLongOption(const char shortKey, const std::string &longKey, hasArg argument);
|
||
void addNullKey();
|
||
};
|