From fd35015016a67bb11ea7c1be2891b6ebc11f728b Mon Sep 17 00:00:00 2001 From: Jan Vesely <janvesely@janvesely.net> Date: Thu, 24 Apr 2014 18:58:21 +0200 Subject: [PATCH] build update set according to definition --- .../src/rhdpda/RhdpdaDeterminizer2.cpp | 14 ++++----- .../src/rhdpda/RhdpdaDeterminizer3.cpp | 14 ++++----- .../src/rhdpda/RhdpdaDeterminizer4.cpp | 10 +++---- adeterminize/src/rhdpda/RhdpdaStructs.h | 29 +++++++++++++++++++ 4 files changed, 45 insertions(+), 22 deletions(-) diff --git a/adeterminize/src/rhdpda/RhdpdaDeterminizer2.cpp b/adeterminize/src/rhdpda/RhdpdaDeterminizer2.cpp index c49ed76ea2..158cb2818a 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 57ea354fbb..024f367df0 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 a14f23b5b4..1fddc484fa 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 2db3c2b746..02ba833868 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 -- GitLab