#ifndef ARGPARSER_DEFS_H #define ARGPARSER_DEFS_H #include #include #include #include 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(static_cast>(a) | static_cast>(b)); } constexpr parser_allow_undelimited operator&(parser_allow_undelimited a, parser_allow_undelimited b) { return static_cast(static_cast>(a) & static_cast>(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(static_cast>(a) | static_cast>(b)); } constexpr parse_opt operator&(parse_opt a, parse_opt b) { return static_cast(static_cast>(a) & static_cast>(b)); } template constexpr bool enum_flag_contains(T a, T b) { return static_cast>(a & b) != 0; } template using string_map = std::map>; }// namespace argparser::internal #endif//ARGPARSER_DEFS_H