argparser/src/defs.h
2023-05-17 10:17:56 +02:00

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