diff --git a/libaregexptree/src/RegExpOptimize.cpp b/libaregexptree/src/RegExpOptimize.cpp index 36bbed75b6db8e43141ee998079ed5d302dccfa6..e2d9dfd059cae570659ae8b961487afe7e6523f9 100644 --- a/libaregexptree/src/RegExpOptimize.cpp +++ b/libaregexptree/src/RegExpOptimize.cpp @@ -649,7 +649,8 @@ bool RegExpOptimize::V5( Alternation * const & node ) // tmp->getElements( ).insert( tmp->getElements( ).end( ), std::next( itC ), concat->getElements( ).end( ) ); // std::cout << RegExp( tmp) << std::endl; - if( ! equal( iterConcat->getElements( ).begin( ), iterConcat->getElements( ).end( ), std::next( itC ), + if( distance( iterConcat->getElements( ).begin( ), iterConcat->getElements( ).end( ) ) != distance( std::next( itC ), concat->getElements( ).end( ) ) + || ! equal( iterConcat->getElements( ).begin( ), iterConcat->getElements( ).end( ), std::next( itC ), [ ]( RegExpElement const * const & a, RegExpElement const * const & b ) -> bool{ return *a == *b; } ) ) { itC++; @@ -801,7 +802,9 @@ bool RegExpOptimize::V6( Alternation * const & node ) } advance( itStartX, - (int)(iterConcat->getElements( ).size( ) ) ); - if( ! equal( iterConcat->getElements( ).begin( ), iterConcat->getElements( ).end( ), itStartX, + if( distance( iterConcat->getElements( ).begin( ), iterConcat->getElements( ).end( ) ) != distance( itStartX, concat->getElements( ).end( ) ) + || + ! equal( iterConcat->getElements( ).begin( ), iterConcat->getElements( ).end( ), itStartX, []( RegExpElement const * const & a, RegExpElement const * const & b ) -> bool{ return *a == *b; } ) ) { itC++; @@ -939,6 +942,7 @@ bool RegExpOptimize::V8( Concatenation * const & node ) advance( it2, - (int)concat->getElements( ).size( ) ); if( concat->containsEmptyString( ) && + distance( concat->getElements( ).begin( ), concat->getElements( ).end( )) == distance ( it2, node->getElements( ).end( ) ) && equal( concat->getElements( ).begin( ), concat->getElements( ).end( ), it2, [] ( RegExpElement const * const & a, RegExpElement const * const & b ) -> bool { return *a == *b; } ) ) { optimized = true;