diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-10-06 10:41:18 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-10-06 10:43:11 +0900 |
commit | f763a99a501650eff2c60288aa6f10ef916d769e (patch) | |
tree | 02af7e13f9a38c888ebf340fe764cbe7dae99da9 /boost/regex/v4/perl_matcher_non_recursive.hpp | |
parent | 5cde13f21d36c7224b0e13d11c4b49379ae5210d (diff) | |
download | boost-f763a99a501650eff2c60288aa6f10ef916d769e.tar.gz boost-f763a99a501650eff2c60288aa6f10ef916d769e.tar.bz2 boost-f763a99a501650eff2c60288aa6f10ef916d769e.zip |
Imported Upstream version 1.62.0upstream/1.62.0
Change-Id: I9d4c1ddb7b7d8f0069217ecc582700f9fda6dd4c
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'boost/regex/v4/perl_matcher_non_recursive.hpp')
-rw-r--r-- | boost/regex/v4/perl_matcher_non_recursive.hpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/boost/regex/v4/perl_matcher_non_recursive.hpp b/boost/regex/v4/perl_matcher_non_recursive.hpp index bf77eaa57b..aa7af3b42f 100644 --- a/boost/regex/v4/perl_matcher_non_recursive.hpp +++ b/boost/regex/v4/perl_matcher_non_recursive.hpp @@ -138,6 +138,12 @@ struct saved_recursion : public saved_state Results results; }; +struct saved_change_case : public saved_state +{ + bool icase; + saved_change_case(bool c) : saved_state(18), icase(c) {} +}; + template <class BidiIterator, class Allocator, class traits> bool perl_matcher<BidiIterator, Allocator, traits>::match_all_states() { @@ -243,6 +249,22 @@ inline void perl_matcher<BidiIterator, Allocator, traits>::push_matched_paren(in } template <class BidiIterator, class Allocator, class traits> +inline void perl_matcher<BidiIterator, Allocator, traits>::push_case_change(bool c) +{ + //BOOST_ASSERT(index); + saved_change_case* pmp = static_cast<saved_change_case*>(m_backup_state); + --pmp; + if(pmp < m_stack_base) + { + extend_stack(); + pmp = static_cast<saved_change_case*>(m_backup_state); + --pmp; + } + (void) new (pmp)saved_change_case(c); + m_backup_state = pmp; +} + +template <class BidiIterator, class Allocator, class traits> inline void perl_matcher<BidiIterator, Allocator, traits>::push_recursion_stopper() { saved_state* pmp = m_backup_state; @@ -348,6 +370,16 @@ inline void perl_matcher<BidiIterator, Allocator, traits>::push_recursion(int id } template <class BidiIterator, class Allocator, class traits> +bool perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case() +{ + // change our case sensitivity: + push_case_change(this->icase); + this->icase = static_cast<const re_case*>(pstate)->icase; + pstate = pstate->next.p; + return true; +} + +template <class BidiIterator, class Allocator, class traits> bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark() { int index = static_cast<const re_brace*>(pstate)->index; @@ -1142,6 +1174,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind(bool have_match) &perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_pop, &perl_matcher<BidiIterator, Allocator, traits>::unwind_commit, &perl_matcher<BidiIterator, Allocator, traits>::unwind_then, + &perl_matcher<BidiIterator, Allocator, traits>::unwind_case, }; m_recursive_result = have_match; @@ -1171,6 +1204,16 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_end(bool) } template <class BidiIterator, class Allocator, class traits> +bool perl_matcher<BidiIterator, Allocator, traits>::unwind_case(bool) +{ + saved_change_case* pmp = static_cast<saved_change_case*>(m_backup_state); + icase = pmp->icase; + boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++); + m_backup_state = pmp; + return true; +} + +template <class BidiIterator, class Allocator, class traits> bool perl_matcher<BidiIterator, Allocator, traits>::unwind_paren(bool have_match) { saved_matched_paren<BidiIterator>* pmp = static_cast<saved_matched_paren<BidiIterator>*>(m_backup_state); |