49 lines
1.6 KiB
C++
49 lines
1.6 KiB
C++
#ifndef CTRE_V2__CTRE__FUNCTIONS__HPP
|
|
#define CTRE_V2__CTRE__FUNCTIONS__HPP
|
|
|
|
#include "../ctll.hpp"
|
|
#include "pcre_actions.hpp"
|
|
#include "evaluation.hpp"
|
|
#include "wrapper.hpp"
|
|
#include "id.hpp"
|
|
|
|
namespace ctre {
|
|
|
|
#if !CTRE_CNTTP_COMPILER_CHECK
|
|
// avoiding CTAD limitation in C++17
|
|
template <typename CharT, size_t N> class pattern: public ctll::fixed_string<N> {
|
|
using parent = ctll::fixed_string<N>;
|
|
public:
|
|
constexpr pattern(const CharT (&input)[N]) noexcept: parent(input) { }
|
|
};
|
|
|
|
template <typename CharT, size_t N> pattern(const CharT (&)[N]) -> pattern<CharT, N>;
|
|
|
|
// for better examples
|
|
template <typename CharT, size_t N> class fixed_string: public ctll::fixed_string<N> {
|
|
using parent = ctll::fixed_string<N>;
|
|
public:
|
|
constexpr fixed_string(const CharT (&input)[N]) noexcept: parent(input) { }
|
|
};
|
|
|
|
template <typename CharT, size_t N> fixed_string(const CharT (&)[N]) -> fixed_string<CharT, N>;
|
|
#endif
|
|
|
|
#if CTRE_CNTTP_COMPILER_CHECK
|
|
template <ctll::fixed_string input, typename Modifier = void> CTRE_FLATTEN constexpr CTRE_FORCE_INLINE auto re() noexcept {
|
|
constexpr auto _input = input; // workaround for GCC 9 bug 88092
|
|
#else
|
|
template <auto & input, typename Modifier = void> CTRE_FLATTEN constexpr CTRE_FORCE_INLINE auto re() noexcept {
|
|
constexpr auto & _input = input;
|
|
#endif
|
|
|
|
using tmp = typename ctll::parser<ctre::pcre, _input, ctre::pcre_actions>::template output<pcre_context<>>;
|
|
static_assert(tmp(), "Regular Expression contains syntax error.");
|
|
using regex = decltype(front(typename tmp::output_type::stack_type()));
|
|
return ctre::regular_expression<regex, Modifier, singleline>();
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|