49 lines
1.3 KiB
C++
49 lines
1.3 KiB
C++
#pragma once
|
|
#include <string>
|
|
#include <algorithm>
|
|
#include <utility>
|
|
|
|
#ifndef BASE_CONVENTION_HPP
|
|
#define BASE_CONVENTION_HPP
|
|
|
|
namespace argument_parser::conventions {
|
|
enum class argument_type {
|
|
SHORT,
|
|
LONG,
|
|
POSITIONAL,
|
|
INTERCHANGABLE,
|
|
ERROR
|
|
};
|
|
|
|
using parsed_argument = std::pair<argument_type, std::string>;
|
|
|
|
class base_convention {
|
|
public:
|
|
virtual std::string extract_value(std::string const&) const = 0;
|
|
virtual parsed_argument get_argument(std::string const&) const = 0;
|
|
virtual bool requires_next_token() const = 0;
|
|
virtual std::string name() const = 0;
|
|
virtual std::string short_prec() const = 0;
|
|
virtual std::string long_prec() const = 0;
|
|
protected:
|
|
base_convention() = default;
|
|
~base_convention() = default;
|
|
};
|
|
using convention = base_convention;
|
|
}
|
|
|
|
namespace argument_parser::conventions::helpers {
|
|
static std::string to_lower(std::string s) {
|
|
std::transform(s.begin(), s.end(), s.begin(),
|
|
[](unsigned char c) { return std::tolower(c); });
|
|
return s;
|
|
}
|
|
|
|
static std::string to_upper(std::string s) {
|
|
std::transform(s.begin(), s.end(), s.begin(),
|
|
[](unsigned char c) { return std::toupper(c); });
|
|
return s;
|
|
}
|
|
}
|
|
|
|
#endif |