mirror of
https://git.lynn.is/Gwen/argparser.git
synced 2024-04-29 13:03:48 +02:00
54 lines
1.9 KiB
C++
54 lines
1.9 KiB
C++
#ifndef ARGPARSER_DEFS_H
|
|
#define ARGPARSER_DEFS_H
|
|
|
|
#include <string_view>
|
|
#include <type_traits>
|
|
#include <map>
|
|
#include <functional>
|
|
|
|
namespace argparser::internal {
|
|
constexpr std::string_view whitespace = " \f\n\r\t\v";
|
|
|
|
enum class parser_allow_undelimited {
|
|
None = 0,
|
|
Comma = 1,
|
|
Parenthesis = 2,
|
|
Brackets = 4,
|
|
Any = 7,
|
|
};
|
|
constexpr parser_allow_undelimited operator|(parser_allow_undelimited a, parser_allow_undelimited b) {
|
|
return static_cast<parser_allow_undelimited>(static_cast<std::underlying_type_t<parser_allow_undelimited>>(a) | static_cast<std::underlying_type_t<parser_allow_undelimited>>(b));
|
|
}
|
|
constexpr parser_allow_undelimited operator&(parser_allow_undelimited a, parser_allow_undelimited b) {
|
|
return static_cast<parser_allow_undelimited>(static_cast<std::underlying_type_t<parser_allow_undelimited>>(a) & static_cast<std::underlying_type_t<parser_allow_undelimited>>(b));
|
|
}
|
|
|
|
enum class parse_opt {
|
|
None = 0,
|
|
BareString = 1,
|
|
SingleQuotedString = 2,
|
|
DoubleQuotedString = 4,
|
|
AnyString = 7,
|
|
TrimString = 8,
|
|
TrimBareString = 16,
|
|
};
|
|
constexpr parse_opt operator|(parse_opt a, parse_opt b) {
|
|
return static_cast<parse_opt>(static_cast<std::underlying_type_t<parse_opt>>(a) | static_cast<std::underlying_type_t<parse_opt>>(b));
|
|
}
|
|
constexpr parse_opt operator&(parse_opt a, parse_opt b) {
|
|
return static_cast<parse_opt>(static_cast<std::underlying_type_t<parse_opt>>(a) & static_cast<std::underlying_type_t<parse_opt>>(b));
|
|
}
|
|
|
|
|
|
template<typename T>
|
|
constexpr bool enum_flag_contains(T a, T b) {
|
|
return static_cast<std::underlying_type_t<T>>(a & b) != 0;
|
|
}
|
|
|
|
template <typename T>
|
|
using string_map = std::map<std::string, T, std::less<>>;
|
|
|
|
}// namespace argparser::internal
|
|
|
|
#endif//ARGPARSER_DEFS_H
|