mirror of
https://github.com/Cameron-Reed1/Cpp-Argument-Parser.git
synced 2024-09-20 00:37:29 +00:00
67 lines
1.1 KiB
C
67 lines
1.1 KiB
C
|
#pragma once
|
||
|
#include <vector>
|
||
|
|
||
|
namespace Cam
|
||
|
{
|
||
|
namespace Arguments
|
||
|
{
|
||
|
|
||
|
enum OPTTYPE
|
||
|
{
|
||
|
FLAG = 0,
|
||
|
STRING,
|
||
|
INT
|
||
|
};
|
||
|
|
||
|
class Option
|
||
|
{
|
||
|
public:
|
||
|
Option(const char* name, const char* description, OPTTYPE type);
|
||
|
Option(const char* name, const char* short_name, const char* description, OPTTYPE type);
|
||
|
bool found();
|
||
|
void* data;
|
||
|
private:
|
||
|
const char* m_name;
|
||
|
const char* m_short_name;
|
||
|
const char* m_description;
|
||
|
OPTTYPE m_type;
|
||
|
bool m_found;
|
||
|
|
||
|
friend class Parser;
|
||
|
};
|
||
|
|
||
|
class PositionalArgument
|
||
|
{
|
||
|
public:
|
||
|
PositionalArgument(const char* name, bool required, OPTTYPE type = STRING);
|
||
|
bool found();
|
||
|
void* data;
|
||
|
private:
|
||
|
const char* m_name;
|
||
|
OPTTYPE m_type;
|
||
|
bool m_req;
|
||
|
bool m_found;
|
||
|
|
||
|
friend class Parser;
|
||
|
};
|
||
|
|
||
|
class Parser
|
||
|
{
|
||
|
public:
|
||
|
Parser(const char* program_name);
|
||
|
void set_description(const char* description);
|
||
|
void add_option(Option* opt);
|
||
|
void add_positional_argument(PositionalArgument* arg);
|
||
|
int parse(int argc, char** argv);
|
||
|
private:
|
||
|
void print_help_message();
|
||
|
private:
|
||
|
const char* m_program_name;
|
||
|
const char* m_description;
|
||
|
std::vector<Option*> m_options;
|
||
|
std::vector<PositionalArgument*> m_positional_args;
|
||
|
};
|
||
|
|
||
|
} // namespace Arguments
|
||
|
} // namespace Cam
|