diff --git a/adeterminize/src/rhdpda/RhdpdaDeterminizer2.cpp b/adeterminize/src/rhdpda/RhdpdaDeterminizer2.cpp index c49ed76ea2aeca742379063d96ae910d6a635ff2..158cb2818aa850f22f0c195316d2f95c171adf78 100644 --- a/adeterminize/src/rhdpda/RhdpdaDeterminizer2.cpp +++ b/adeterminize/src/rhdpda/RhdpdaDeterminizer2.cpp @@ -151,7 +151,7 @@ Automaton* RhdpdaDeterminizer2::determinize() for (const auto& b : this->rhdpda->getInputAlphabet()) { SComponent& s = unmarkedStateData->s; - set<PairOfPairs> update; + set<StatesPair> update; for (const auto& pairOfPairs : s.pairsOfPairs) { const State& r = pairOfPairs.pair1.state; const Symbol& Z = pairOfPairs.pair1.symbol; @@ -164,9 +164,7 @@ Automaton* RhdpdaDeterminizer2::determinize() if (pushTransition.getInput() == a && pushTransition.getTo() == r && popTransition.getInput() == b && popTransition.getFrom() == rPrimed && pushTransition.getPush().front() == Z && popTransition.getPop().front() == Z) { - StateSymbolPair pair1(p, Z); - StateSymbolPair pair2(q, Z); - update.insert(PairOfPairs(pair1, pair2)); + update.insert(StatesPair(p, q)); } } } @@ -180,8 +178,8 @@ Automaton* RhdpdaDeterminizer2::determinize() for (const auto& rPrimed : this->allRComponents) { RComponent rDoublePrimed; for (const auto& updateItem : update) { - const State& p = updateItem.pair1.state; - const State& q = updateItem.pair2.state; + const State& p = updateItem.state1; + const State& q = updateItem.state2; for (const auto& rPrimedPair : rPrimed.pairs) { if (rPrimedPair.state == p) { const Symbol& Y = rPrimedPair.symbol; @@ -191,8 +189,8 @@ Automaton* RhdpdaDeterminizer2::determinize() } SComponent sDoublePrimed; for (const auto& updateItem : update) { - const State& p = updateItem.pair1.state; - const State& q = updateItem.pair2.state; + const State& p = updateItem.state1; + const State& q = updateItem.state2; for (const auto& sPrimedPair : sPrimed.pairsOfPairs) { if (sPrimedPair.pair2.state == p) { const StateSymbolPair& x = sPrimedPair.pair1; diff --git a/adeterminize/src/rhdpda/RhdpdaDeterminizer3.cpp b/adeterminize/src/rhdpda/RhdpdaDeterminizer3.cpp index 57ea354fbb2283416934cbede2b7478ecfc82185..024f367df05fe4c7de4aaec0b34d0e1bf4e5b1f9 100644 --- a/adeterminize/src/rhdpda/RhdpdaDeterminizer3.cpp +++ b/adeterminize/src/rhdpda/RhdpdaDeterminizer3.cpp @@ -150,7 +150,7 @@ Automaton* RhdpdaDeterminizer3::determinize() for (const auto& b : this->rhdpda->getInputAlphabet()) { SComponent& s = unmarkedStateData->s; - set<PairOfPairs> update; + set<StatesPair> update; for (const auto& pairOfPairs : s.pairsOfPairs) { const State& r = pairOfPairs.pair1.state; const Symbol& Z = pairOfPairs.pair1.symbol; @@ -163,9 +163,7 @@ Automaton* RhdpdaDeterminizer3::determinize() if (pushTransition.getInput() == a && pushTransition.getTo() == r && popTransition.getInput() == b && popTransition.getFrom() == rPrimed && pushTransition.getPush().front() == Z && popTransition.getPop().front() == Z) { - StateSymbolPair pair1(p, Z); - StateSymbolPair pair2(q, Z); - update.insert(PairOfPairs(pair1, pair2)); + update.insert(StatesPair(p, q)); } } } @@ -179,8 +177,8 @@ Automaton* RhdpdaDeterminizer3::determinize() for (const auto& rPrimed : this->allRComponents) { RComponent rDoublePrimed; for (const auto& updateItem : update) { - const State& p = updateItem.pair1.state; - const State& q = updateItem.pair2.state; + const State& p = updateItem.state1; + const State& q = updateItem.state2; for (const auto& rPrimedPair : rPrimed.pairs) { if (rPrimedPair.state == p) { const Symbol& Y = rPrimedPair.symbol; @@ -190,8 +188,8 @@ Automaton* RhdpdaDeterminizer3::determinize() } SComponent sDoublePrimed; for (const auto& updateItem : update) { - const State& p = updateItem.pair1.state; - const State& q = updateItem.pair2.state; + const State& p = updateItem.state1; + const State& q = updateItem.state2; for (const auto& sPrimedPair : sPrimed.pairsOfPairs) { if (sPrimedPair.pair2.state == p) { const StateSymbolPair& x = sPrimedPair.pair1; diff --git a/adeterminize/src/rhdpda/RhdpdaDeterminizer4.cpp b/adeterminize/src/rhdpda/RhdpdaDeterminizer4.cpp index a14f23b5b49ce188fd5485e67564e234d2c27728..1fddc484fa2945ac3f29452a62babc1f809e9cd5 100644 --- a/adeterminize/src/rhdpda/RhdpdaDeterminizer4.cpp +++ b/adeterminize/src/rhdpda/RhdpdaDeterminizer4.cpp @@ -164,7 +164,7 @@ Automaton* RhdpdaDeterminizer4::determinize() for (const auto& a : this->rhdpda->getInputAlphabet()) { for (const auto& b : this->rhdpda->getInputAlphabet()) { SComponent& s = unmarkedStateData->s; - set<PairOfPairs> update; + set<StatesPair> update; for (const auto& pairOfPairs : s.pairsOfPairs) { const State& r = pairOfPairs.pair1.state; const Symbol& Z = pairOfPairs.pair1.symbol; @@ -177,9 +177,7 @@ Automaton* RhdpdaDeterminizer4::determinize() if (pushTransition.getInput() == a && pushTransition.getTo() == r && popTransition.getInput() == b && popTransition.getFrom() == rPrimed && pushTransition.getPush().front() == Z && popTransition.getPop().front() == Z) { - StateSymbolPair pair1(p, Z); - StateSymbolPair pair2(q, Z); - update.insert(PairOfPairs(pair1, pair2)); + update.insert(StatesPair(p, q)); } } } @@ -191,8 +189,8 @@ Automaton* RhdpdaDeterminizer4::determinize() for (const auto& sPrimed : this->allSComponents) { SComponent sDoublePrimed; for (const auto& updateItem : update) { - const State& p = updateItem.pair1.state; - const State& q = updateItem.pair2.state; + const State& p = updateItem.state1; + const State& q = updateItem.state2; for (const auto& sPrimedPair : sPrimed.pairsOfPairs) { if (sPrimedPair.pair2.state == p) { const StateSymbolPair& x = sPrimedPair.pair1; diff --git a/adeterminize/src/rhdpda/RhdpdaStructs.h b/adeterminize/src/rhdpda/RhdpdaStructs.h index 2db3c2b7462fb2a258be67e257eade12130e744c..02ba833868be1570ce5fe776519e6d6048011046 100644 --- a/adeterminize/src/rhdpda/RhdpdaStructs.h +++ b/adeterminize/src/rhdpda/RhdpdaStructs.h @@ -122,6 +122,35 @@ struct StateData }; +/** + * Struct fot storing pair of two states. + */ +struct StatesPair +{ + State state1; + State state2; + + StatesPair(const State& state1, const State& state2) + : state1(state1), + state2(state2) {} + + bool operator < (const StatesPair& other) const + { + return (state1 < other.state1) || ((state1 == other.state1) && (state2 < other.state2)); + } + + bool operator == (const StatesPair& other) const + { + return (state1 == other.state1) && (state2 == other.state2); + } + + bool operator != (const StatesPair& other) const + { + return (state1 != other.state1) || (state2 != other.state2); + } +}; + + } } #endif