Cpp-Argument-Parser/Inc/argparser.h

90 lines
2.1 KiB
C
Raw Permalink Normal View History

2022-07-26 02:57:57 +00:00
#pragma once
#include <vector>
#include <stdint.h>
2022-07-26 02:57:57 +00:00
namespace Cam
{
namespace Arguments
{
2022-07-27 03:26:02 +00:00
enum ERROR {
NO_ERROR = 0,
2022-07-27 03:26:02 +00:00
ERROR_UNKNOWN_OPTION,
ERROR_INCORRECT_TYPE,
ERROR_MISSING_ARGUMENT,
ERROR_MISSING_POSITIONAL_ARGUMENT,
SPECIAL_CASE_HELP
};
enum OPTTYPE {
2022-07-26 02:57:57 +00:00
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);
Option(const char short_name, const char* description, OPTTYPE type);
2022-07-26 02:57:57 +00:00
bool found();
void* data;
private:
const char* m_name;
const char m_short_name;
2022-07-26 02:57:57 +00:00
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);
2022-07-27 03:26:02 +00:00
ERROR parse(int argc, char** argv);
2022-07-26 02:57:57 +00:00
private:
2022-07-27 03:26:02 +00:00
ERROR print_help_message();
ERROR handle_long_option(const char* option, const char* next_value);
ERROR handle_short_option(const char option, const char* next_value);
ERROR handle_positional_argument(const char* arg);
ERROR get_option_data(Option* opt, const char* option_name, const char* data_str);
ERROR get_option_data(Option* opt, const char option_name, const char* data_str);
2022-07-27 03:26:02 +00:00
ERROR unknown_option(const char* option);
ERROR unknown_option(const char option);
ERROR incorrect_type(const char* option, const char* got);
ERROR missing_argument(const char* option);
ERROR missing_argument(const char option);
2022-07-27 03:26:02 +00:00
ERROR missing_positional_argument(const char* arg);
2022-07-26 02:57:57 +00:00
private:
const char* m_program_name;
const char* m_description;
uint16_t m_opt_index;
uint16_t m_pos_index;
2022-07-26 02:57:57 +00:00
std::vector<Option*> m_options;
std::vector<PositionalArgument*> m_positional_args;
};
} // namespace Arguments
} // namespace Cam