add cmdline parser
This commit is contained in:
parent
ec3731b22d
commit
1c8bc7efea
|
@ -0,0 +1,62 @@
|
||||||
|
#include "cmdlineparser.h"
|
||||||
|
|
||||||
|
CmdLineParser::CmdLineParser()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CmdLineParser::regOpt(OptDefine optdef)
|
||||||
|
{
|
||||||
|
optMap[optdef.shortName] = optdef;
|
||||||
|
}
|
||||||
|
|
||||||
|
string CmdLineParser::getOpt(string key)
|
||||||
|
{
|
||||||
|
if(!hasOptSet(key)){
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return paraMap.at(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CmdLineParser::parseArgs(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
size_t s=optMap.size();
|
||||||
|
struct option *longOption = new option[s]();
|
||||||
|
int index=0;
|
||||||
|
string shortArgs;
|
||||||
|
for (auto i = optMap.begin(); i != optMap.end(); ++i){
|
||||||
|
struct option logopt={0};
|
||||||
|
OptDefine od = i->second;
|
||||||
|
logopt.name = od.name.c_str();
|
||||||
|
logopt.flag = NULL;
|
||||||
|
logopt.has_arg = od.needParam;
|
||||||
|
logopt.val = od.shortName;
|
||||||
|
if(logopt.val>=65 && logopt.val<=90){
|
||||||
|
// this is a short name
|
||||||
|
shortArgs.append(1,char(logopt.val));
|
||||||
|
if(logopt.has_arg != no_argument){
|
||||||
|
shortArgs.append(1,':');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
int optIndex=0;
|
||||||
|
int opt;
|
||||||
|
while ((opt=getopt_long(argc, argv, shortArgs.c_str(), longOption, &optIndex))!=-1) {
|
||||||
|
OptDefine d = optMap.at(opt);
|
||||||
|
if(d.needParam == no_argument){
|
||||||
|
paraMap[d.name] = "true";
|
||||||
|
} else {
|
||||||
|
paraMap[d.name] = optarg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CmdLineParser::hasOptSet(string key)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(paraMap.find(key) == paraMap.end()){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
#ifndef CMDLINEPARSER_H
|
||||||
|
#define CMDLINEPARSER_H
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
#include <getopt.h>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
string name;
|
||||||
|
int shortName;
|
||||||
|
int needParam;
|
||||||
|
string desc;
|
||||||
|
} OptDefine;
|
||||||
|
|
||||||
|
class CmdLineParser
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CmdLineParser();
|
||||||
|
void regOpt(OptDefine optdef);
|
||||||
|
string getOpt(string key);
|
||||||
|
void parseArgs(int argc, char *argv[]);
|
||||||
|
private:
|
||||||
|
map<int, OptDefine> optMap;
|
||||||
|
map<string, string> paraMap;
|
||||||
|
bool hasOptSet(string key);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CMDLINEPARSER_H
|
Loading…
Reference in New Issue