23 #ifndef NDN_NDN_REGEX_MATCHER_BASE_HPP
24 #define NDN_NDN_REGEX_MATCHER_BASE_HPP
30 #include <ndn-cpp/ndn-cpp-config.h>
31 #if NDN_CPP_HAVE_STD_REGEX
33 namespace ndn {
namespace regex_lib = std; }
34 #define NDN_CPP_HAVE_REGEX_LIB 1
37 static const size_t NDN_REGEXP_MARK_COUNT_CORRECTION = 0;
38 #elif defined(NDN_CPP_HAVE_BOOST_REGEX)
39 #include <boost/regex.hpp>
40 #include <boost/version.hpp>
41 namespace ndn {
namespace regex_lib = boost; }
42 #define NDN_CPP_HAVE_REGEX_LIB 1
48 static const size_t NDN_REGEXP_MARK_COUNT_CORRECTION =
49 #if BOOST_VERSION < 105600
55 #define NDN_CPP_HAVE_REGEX_LIB 0
59 #if NDN_CPP_HAVE_REGEX_LIB
62 #include <ndn-cpp/name.hpp>
66 class NdnRegexBackrefManager;
68 class NdnRegexMatcherBase {
74 class Error :
public std::exception {
76 Error(
const std::string& errorMessage)
throw();
78 virtual ~Error() throw();
81 Msg()
const {
return errorMessage_; }
87 const std::
string errorMessage_;
90 enum NdnRegexExprType {
92 NDN_REGEX_EXPR_PATTERN_LIST,
93 NDN_REGEX_EXPR_REPEAT_PATTERN,
94 NDN_REGEX_EXPR_BACKREF,
95 NDN_REGEX_EXPR_COMPONENT_SET,
96 NDN_REGEX_EXPR_COMPONENT,
101 (
const std::string& expr,
const NdnRegexExprType& type,
102 ptr_lib::shared_ptr<NdnRegexBackrefManager> backrefManager =
103 ptr_lib::shared_ptr<NdnRegexBackrefManager>());
106 ~NdnRegexMatcherBase();
109 match(
const Name& name,
size_t offset,
size_t len);
115 const std::vector<Name::Component>&
116 getMatchResult()
const {
return matchResult_; }
119 getExpr()
const {
return expr_; }
130 recursiveMatch(
size_t matcherNo,
const Name& name,
size_t offset,
size_t len);
133 const std::string expr_;
134 const NdnRegexExprType type_;
135 ptr_lib::shared_ptr<NdnRegexBackrefManager> backrefManager_;
136 std::vector<ptr_lib::shared_ptr<NdnRegexMatcherBase> > matchers_;
137 std::vector<Name::Component> matchResult_;
141 operator<<(std::ostream& os,
const NdnRegexMatcherBase& regex)
143 os << regex.getExpr();
149 #endif // NDN_CPP_HAVE_REGEX_LIB