From cd03e799e8bcf88c26fd837786cf791f96e09391 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Sat, 28 Oct 2017 08:21:34 +0200 Subject: [PATCH] fix unnecessary slowdown in DFA states from method --- alib2data/src/automaton/FSM/DFA.h | 38 +++++++++++++++---------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/alib2data/src/automaton/FSM/DFA.h b/alib2data/src/automaton/FSM/DFA.h index 560df1fca6..7296f8b809 100644 --- a/alib2data/src/automaton/FSM/DFA.h +++ b/alib2data/src/automaton/FSM/DFA.h @@ -512,38 +512,36 @@ ext::map < ext::pair < StateType, SymbolType >, StateType > && DFA<SymbolType, S return std::move ( transitions ); } - template < class Type, class From > - class PartialComparator { - const Type & m_data; - std::function < const Type & ( const From & ) > retrieveFunction; +template < class Type, class From > +class PartialComparator { + const Type & m_data; + std::function < const Type & ( const From & ) > retrieveFunction; - public: - PartialComparator ( const Type & data, const Type & ( * function ) ( const From & ) ) : m_data ( data ), retrieveFunction ( function ) { - - } +public: + PartialComparator ( const Type & data, const Type & ( * function ) ( const From & ) ) : m_data ( data ), retrieveFunction ( function ) { + } - friend bool operator < ( const PartialComparator & first, const Type & second ) { - return first.m_data < first.retrieveFunction ( second ); - } + friend bool operator < ( const PartialComparator & first, const Type & second ) { + return first.m_data < first.retrieveFunction ( second ); + } - friend bool operator < ( const Type & first, const PartialComparator & second ) { - return second.retrieveFunction ( first ) < second.m_data; - } - }; + friend bool operator < ( const Type & first, const PartialComparator & second ) { + return second.retrieveFunction ( first ) < second.m_data; + } +}; template<class SymbolType, class StateType > ext::range < typename ext::map < ext::pair < StateType, SymbolType >, StateType >::const_iterator > DFA<SymbolType, StateType>::getTransitionsFromState ( const StateType & from ) const { if ( !getStates ( ).count ( from ) ) throw AutomatonException ( "State \"" + ext::to_string ( from ) + "\" doesn't exist" ); + typename ext::map < ext::pair < StateType, SymbolType >, StateType >::const_iterator lower = transitions.begin ( ); - while ( lower != transitions.end ( ) && lower->first.first < from ) { + while ( lower != transitions.end ( ) && lower->first.first < from ) ++ lower; - } - typename ext::map < ext::pair < StateType, SymbolType >, StateType >::const_iterator upper = transitions.begin ( ); - while ( upper != transitions.end ( ) && upper->first.first <= from ) { + typename ext::map < ext::pair < StateType, SymbolType >, StateType >::const_iterator upper = lower; + while ( upper != transitions.end ( ) && upper->first.first <= from ) ++ upper; - } return ext::make_range ( lower, upper ); } -- GitLab