@@ -194,10 +194,9 @@ namespace pdaaal {
194194 for (auto &state : pda_states) {
195195 for (auto &rule : state._rules ) {
196196 if (rule._operation == PDA::PUSH) {
197- auto pair = std::make_pair (rule._to , rule._op_label );
198- if (q_prime.find (pair) == q_prime.end ()) {
199- auto new_state = this ->add_state (false , false );
200- q_prime.emplace (pair, new_state);
197+ auto res = q_prime.emplace (std::make_pair (rule._to , rule._op_label ), this ->next_state_id ());
198+ if (res.second ) {
199+ this ->add_state (false , false );
201200 }
202201 }
203202 }
@@ -333,7 +332,7 @@ namespace pdaaal {
333332 }
334333
335334 size_t PAutomaton::add_state (bool initial, bool accepting) {
336- auto id = _states. size ();
335+ auto id = next_state_id ();
337336 _states.emplace_back (std::make_unique<state_t >(accepting, id));
338337 if (accepting) {
339338 _accepting.push_back (_states.back ().get ());
@@ -343,6 +342,9 @@ namespace pdaaal {
343342 }
344343 return id;
345344 }
345+ size_t PAutomaton::next_state_id () const {
346+ return _states.size ();
347+ }
346348
347349 void PAutomaton::add_epsilon_edge (size_t from, size_t to, const trace_t *trace) {
348350 auto &edges = _states[from]->_edges ;
0 commit comments