diff --git a/alib2algo/src/automaton/convert/ToGrammarLeftRG.cpp b/alib2algo/src/automaton/convert/ToGrammarLeftRG.cpp index 87a5f55bfb3ae823f2c356a1bbdf795b81cec2e3..ab9278fd5609e25d1e1917b535e26b7dbff46189 100644 --- a/alib2algo/src/automaton/convert/ToGrammarLeftRG.cpp +++ b/alib2algo/src/automaton/convert/ToGrammarLeftRG.cpp @@ -7,6 +7,7 @@ #include "ToGrammarLeftRG.h" #include <map> +#include <common/createUnique.hpp> #include <alphabet/LabeledSymbol.h> @@ -27,7 +28,7 @@ grammar::LeftRG < > ToGrammarLeftRG::convert(const automaton::NFA < > & automato grammar.setTerminalAlphabet(automaton.getInputAlphabet()); for(const auto& state : automaton.getStates()) { - alphabet::Symbol nt = alphabet::createUniqueSymbol(alphabet::Symbol(alphabet::LabeledSymbol(state)), grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()); + alphabet::Symbol nt = common::createUnique(alphabet::Symbol(alphabet::LabeledSymbol(state)), grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()); grammar.addNonterminalSymbol(nt); nonterminalMap.insert(std::pair<label::Label, alphabet::Symbol>(state, nt)); } @@ -74,7 +75,7 @@ grammar::LeftRG < > ToGrammarLeftRG::convert(const automaton::DFA<>& automaton) grammar.setTerminalAlphabet(automaton.getInputAlphabet()); for(const auto& state : automaton.getStates()) { - alphabet::Symbol nt = alphabet::createUniqueSymbol(alphabet::Symbol(alphabet::LabeledSymbol(state)), grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()); + alphabet::Symbol nt = common::createUnique(alphabet::Symbol(alphabet::LabeledSymbol(state)), grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()); grammar.addNonterminalSymbol(nt); nonterminalMap.insert(std::pair<label::Label, alphabet::Symbol>(state, nt)); } diff --git a/alib2algo/src/automaton/convert/ToGrammarRightRG.cpp b/alib2algo/src/automaton/convert/ToGrammarRightRG.cpp index a8ea9e281eca55d4854aa06edda7cdb563d9106d..5f16e6f98d811e9baec2bd69657eaa9a104b1154 100644 --- a/alib2algo/src/automaton/convert/ToGrammarRightRG.cpp +++ b/alib2algo/src/automaton/convert/ToGrammarRightRG.cpp @@ -7,6 +7,7 @@ #include "ToGrammarRightRG.h" #include <alphabet/LabeledSymbol.h> +#include <common/createUnique.hpp> namespace automaton { @@ -31,7 +32,7 @@ grammar::RightRG < > ToGrammarRightRG::convert(const automaton::NFA < > & automa if(state == initState) continue; - alphabet::Symbol nt = alphabet::createUniqueSymbol(alphabet::Symbol(alphabet::LabeledSymbol(state)), grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()); + alphabet::Symbol nt = common::createUnique(alphabet::Symbol(alphabet::LabeledSymbol(state)), grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()); grammar.addNonterminalSymbol(nt); nonterminalMap.insert(std::make_pair(state, nt)); } @@ -74,7 +75,7 @@ grammar::RightRG < > ToGrammarRightRG::convert(const automaton::DFA<>& automaton if(state == initState) continue; - alphabet::Symbol nt = alphabet::createUniqueSymbol(alphabet::Symbol(alphabet::LabeledSymbol(state)), grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()); + alphabet::Symbol nt = common::createUnique(alphabet::Symbol(alphabet::LabeledSymbol(state)), grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()); grammar.addNonterminalSymbol(nt); nonterminalMap.insert(std::make_pair(state, nt)); } diff --git a/alib2algo/src/automaton/convert/ToRegExpStateElimination.cpp b/alib2algo/src/automaton/convert/ToRegExpStateElimination.cpp index 17b6d64bf72738750caf6a576b557d3e8e22c546..240a20ad249a3483bb45dac3e12af20a29b06897 100644 --- a/alib2algo/src/automaton/convert/ToRegExpStateElimination.cpp +++ b/alib2algo/src/automaton/convert/ToRegExpStateElimination.cpp @@ -12,6 +12,8 @@ #include "../../regexp/transform/RegExpConcatenate.h" #include "../../regexp/transform/RegExpIterate.h" +#include <common/createUnique.hpp> + namespace automaton { namespace convert { @@ -86,7 +88,7 @@ const regexp::UnboundedRegExpStructure < alphabet::Symbol > ToRegExpStateElimina void ToRegExpStateElimination::extendExtendedNFA(automaton::ExtendedNFA < > & automaton) { const label::Label& initState = automaton.getInitialState(); if(automaton.getFinalStates().count(initState) > 0 || automaton.getTransitionsToState(initState).size() > 0 ) { - label::Label q0 = label::createUniqueLabel(initState, automaton.getStates()); + label::Label q0 = common::createUnique(initState, automaton.getStates()); automaton.addState(q0); regexp::UnboundedRegExpStructure < alphabet::Symbol > regexp { regexp::UnboundedRegExpEpsilon < alphabet::Symbol > () }; @@ -96,7 +98,7 @@ void ToRegExpStateElimination::extendExtendedNFA(automaton::ExtendedNFA < > & au } if(automaton.getFinalStates().size() > 1) { - label::Label f = label::createUniqueLabel(label::labelFrom("f"), automaton.getStates()); + label::Label f = common::createUnique(label::labelFrom("f"), automaton.getStates()); automaton.addState(f); for(const auto &state : automaton.getFinalStates() ) { diff --git a/alib2algo/src/automaton/simplify/Total.cpp b/alib2algo/src/automaton/simplify/Total.cpp index a0cf558eea93f3721f3f085d77163f63ef792aa5..99c8ac5fa9cd5f7cfd14bb6a222f09f7382057a4 100644 --- a/alib2algo/src/automaton/simplify/Total.cpp +++ b/alib2algo/src/automaton/simplify/Total.cpp @@ -12,6 +12,7 @@ #include <automaton/FSM/NFA.h> #include <automaton/FSM/DFA.h> #include <label/FailStateLabel.h> +#include <common/createUnique.hpp> namespace automaton { @@ -27,7 +28,7 @@ automaton::NFA < > Total::total(const automaton::NFA < > & automaton) { } automaton::NFA < > res(automaton); - label::Label nullState = label::createUniqueLabel(label::FailStateLabel::FAIL_STATE_LABEL, automaton.getStates()); + label::Label nullState = common::createUnique(label::FailStateLabel::FAIL_STATE_LABEL, automaton.getStates()); res.addState(nullState); for(const auto& q : res.getStates()) { @@ -45,7 +46,7 @@ auto TotalNFA = Total::RegistratorWrapper<automaton::NFA < > , automaton::NFA < automaton::DFA < > Total::total(const automaton::DFA < > & automaton) { automaton::DFA < > res(automaton); - label::Label nullState = label::createUniqueLabel(label::FailStateLabel::FAIL_STATE_LABEL, automaton.getStates()); + label::Label nullState = common::createUnique(label::FailStateLabel::FAIL_STATE_LABEL, automaton.getStates()); res.addState(nullState); for(const auto& q : res.getStates()) { diff --git a/alib2algo/src/automaton/transform/AutomataUnionEpsilonTransition.cpp b/alib2algo/src/automaton/transform/AutomataUnionEpsilonTransition.cpp index b636b0e4f81a2c3b788ede30f32fd99b3473584f..e4f8c7b6da16238322f25a538234dce468cee98c 100644 --- a/alib2algo/src/automaton/transform/AutomataUnionEpsilonTransition.cpp +++ b/alib2algo/src/automaton/transform/AutomataUnionEpsilonTransition.cpp @@ -8,6 +8,7 @@ #include "AutomataUnionEpsilonTransition.h" #include "common/PairLabel.h" #include <label/InitialStateLabel.h> +#include <common/createUnique.hpp> #define AUTOMATON_FIRST 1 #define AUTOMATON_SECOND 2 @@ -27,7 +28,7 @@ automaton::EpsilonNFA < > AutomataUnionEpsilonTransition::unification(const auto for(const auto& q : second.getStates()) states.insert(pairLabel(label::labelFrom(AUTOMATON_SECOND), q)); - label::Label q0 = label::createUniqueLabel(label::InitialStateLabel::INITIAL_STATE_LABEL, states); + label::Label q0 = common::createUnique(label::InitialStateLabel::INITIAL_STATE_LABEL, states); automaton::EpsilonNFA < > res(q0); for(const auto& a : first.getInputAlphabet()) @@ -66,7 +67,7 @@ automaton::EpsilonNFA < > AutomataUnionEpsilonTransition::unification(const auto for(const auto& q : second.getStates()) states.insert(pairLabel(label::labelFrom(AUTOMATON_SECOND), q)); - label::Label q0 = label::createUniqueLabel(label::InitialStateLabel::INITIAL_STATE_LABEL, states); + label::Label q0 = common::createUnique(label::InitialStateLabel::INITIAL_STATE_LABEL, states); automaton::EpsilonNFA < > res(q0); for(const auto& a : first.getInputAlphabet()) @@ -105,7 +106,7 @@ automaton::EpsilonNFA < > AutomataUnionEpsilonTransition::unification(const auto for(const auto& q : second.getStates()) states.insert(pairLabel(label::labelFrom(AUTOMATON_SECOND), q)); - label::Label q0 = label::createUniqueLabel(label::InitialStateLabel::INITIAL_STATE_LABEL, states); + label::Label q0 = common::createUnique(label::InitialStateLabel::INITIAL_STATE_LABEL, states); automaton::EpsilonNFA < > res(q0); for(const auto& a : first.getInputAlphabet()) diff --git a/alib2algo/src/automaton/transform/AutomatonIteration.cpp b/alib2algo/src/automaton/transform/AutomatonIteration.cpp index 704657ba66f6abfa49e182605af15c4a41212be1..b298142286c9d6eccdaaae4c109f8305aac8e2e3 100644 --- a/alib2algo/src/automaton/transform/AutomatonIteration.cpp +++ b/alib2algo/src/automaton/transform/AutomatonIteration.cpp @@ -6,6 +6,7 @@ */ #include "AutomatonIteration.h" +#include <common/createUnique.hpp> namespace automaton { @@ -22,7 +23,7 @@ automaton::NFA < > AutomatonIteration::iteration(const automaton::DFA < > & auto for(const auto& t : res.getTransitionsToState(qf)) res.addTransition(t.first.first, t.first.second, res.getInitialState()); - label::Label newInitialState = label::createUniqueLabel(automaton.getInitialState(), automaton.getStates()); + label::Label newInitialState = common::createUnique(automaton.getInitialState(), automaton.getStates()); res.addState(newInitialState); res.setInitialState(newInitialState); res.addFinalState(newInitialState); @@ -42,7 +43,7 @@ automaton::NFA < > AutomatonIteration::iteration(const automaton::NFA < > & auto for(const auto& t : res.getTransitionsToState(qf)) res.addTransition(t.first.first, t.first.second, res.getInitialState()); - label::Label newInitialState = label::createUniqueLabel(automaton.getInitialState(), automaton.getStates()); + label::Label newInitialState = common::createUnique(automaton.getInitialState(), automaton.getStates()); res.addState(newInitialState); res.setInitialState(newInitialState); res.addFinalState(newInitialState); diff --git a/alib2algo/src/automaton/transform/AutomatonIterationEpsilonTransition.cpp b/alib2algo/src/automaton/transform/AutomatonIterationEpsilonTransition.cpp index d73327dcce1656dcef66ef8137805d2b3e6c4e87..c0a49d1f1bdd4e06819fa010cf601ef8f22882c9 100644 --- a/alib2algo/src/automaton/transform/AutomatonIterationEpsilonTransition.cpp +++ b/alib2algo/src/automaton/transform/AutomatonIterationEpsilonTransition.cpp @@ -6,6 +6,7 @@ */ #include "AutomatonIterationEpsilonTransition.h" +#include <common/createUnique.hpp> namespace automaton { @@ -22,7 +23,7 @@ automaton::EpsilonNFA < > AutomatonIterationEpsilonTransition::iteration(const T for(const auto&q : automaton.getFinalStates()) res.addTransition(q, automaton.getInitialState()); - label::Label newInitialState = label::createUniqueLabel(automaton.getInitialState(), automaton.getStates()); + label::Label newInitialState = common::createUnique(automaton.getInitialState(), automaton.getStates()); res.addState(newInitialState); res.setInitialState(newInitialState); res.addFinalState(newInitialState); diff --git a/alib2algo/src/automaton/transform/PDAToRHPDA.cpp b/alib2algo/src/automaton/transform/PDAToRHPDA.cpp index a573c8a76affcb7a54258c00709927c3c5bc233c..008e876c99bd49d51c6feab7b524e924184eb604 100644 --- a/alib2algo/src/automaton/transform/PDAToRHPDA.cpp +++ b/alib2algo/src/automaton/transform/PDAToRHPDA.cpp @@ -19,6 +19,7 @@ #include <queue> #include <iterator> #include <label/InitialStateLabel.h> +#include <common/createUnique.hpp> namespace automaton { @@ -35,7 +36,7 @@ automaton::RealTimeHeightDeterministicNPDA < > PDAToRHPDA::convert ( const autom auto PDAToRHPDARealTimeHeightDeterministicNPDA = PDAToRHPDA::RegistratorWrapper < automaton::RealTimeHeightDeterministicNPDA < >, automaton::RealTimeHeightDeterministicNPDA < > > ( PDAToRHPDA::convert ); automaton::RealTimeHeightDeterministicDPDA < > PDAToRHPDA::convert ( const automaton::DPDA < > & pda ) { - label::Label q0 = label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, pda.getStates ( ) ); + label::Label q0 = common::createUnique ( label::InitialStateLabel::INITIAL_STATE_LABEL, pda.getStates ( ) ); RealTimeHeightDeterministicDPDA < > res ( q0, alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK } ); @@ -67,11 +68,11 @@ automaton::RealTimeHeightDeterministicDPDA < > PDAToRHPDA::convert ( const autom int popPushIndex = 0; int popPushSymbols = std::get < 2 > ( transition.first ).size ( ) + to.second.size ( ); - label::Label lastUS = label::createUniqueLabel ( label::labelFrom ( us + std::to_string ( i ) ), res.getStates ( ) ); + label::Label lastUS = common::createUnique ( label::labelFrom ( us + std::to_string ( i ) ), res.getStates ( ) ); for ( const alphabet::Symbol & pop :std::get < 2 > ( transition.first ) ) { label::Label fromState = ( popPushIndex == 0 ) ? std::get < 0 > ( transition.first ) : lastUS; - if ( popPushIndex != 0 ) lastUS = label::createUniqueLabel ( label::labelFrom ( us + std::to_string ( ++i ) ), res.getStates ( ) ); + if ( popPushIndex != 0 ) lastUS = common::createUnique ( label::labelFrom ( us + std::to_string ( ++i ) ), res.getStates ( ) ); label::Label toState = ( popPushIndex == popPushSymbols - 1 ) ? to.first : lastUS; @@ -88,7 +89,7 @@ automaton::RealTimeHeightDeterministicDPDA < > PDAToRHPDA::convert ( const autom for ( const alphabet::Symbol & push : std::make_reverse ( to.second ) ) { label::Label fromState = ( popPushIndex == 0 ) ? std::get < 0 > ( transition.first ) : lastUS; - if ( popPushIndex != 0 ) lastUS = label::createUniqueLabel ( label::labelFrom ( us + std::to_string ( ++i ) ), res.getStates ( ) ); + if ( popPushIndex != 0 ) lastUS = common::createUnique ( label::labelFrom ( us + std::to_string ( ++i ) ), res.getStates ( ) ); label::Label toState = ( popPushIndex == popPushSymbols - 1 ) ? to.first : lastUS; @@ -120,7 +121,7 @@ automaton::RealTimeHeightDeterministicNPDA < > PDAToRHPDA::convert ( const autom pushdownStoreAlphabet.insert ( alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK } ); res.setPushdownStoreAlphabet ( pushdownStoreAlphabet ); - label::Label q0 = label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, res.getStates ( ) ); + label::Label q0 = common::createUnique ( label::InitialStateLabel::INITIAL_STATE_LABEL, res.getStates ( ) ); res.addState ( q0 ); res.addInitialState ( q0 ); @@ -141,11 +142,11 @@ automaton::RealTimeHeightDeterministicNPDA < > PDAToRHPDA::convert ( const autom int popPushIndex = 0; int popPushSymbols = std::get < 2 > ( transition.first ).size ( ) + to.second.size ( ); - label::Label lastUS = label::createUniqueLabel ( label::labelFrom ( us + std::to_string ( i ) ), res.getStates ( ) ); + label::Label lastUS = common::createUnique ( label::labelFrom ( us + std::to_string ( i ) ), res.getStates ( ) ); std::for_each ( std::get < 2 > ( transition.first ).begin ( ), std::get < 2 > ( transition.first ).end ( ), [&] ( const alphabet::Symbol & pop ) { label::Label fromState = ( popPushIndex == 0 ) ? std::get < 0 > ( transition.first ) : lastUS; - if ( popPushIndex != 0 ) lastUS = label::createUniqueLabel ( label::labelFrom ( us + std::to_string ( ++i ) ), res.getStates ( ) ); + if ( popPushIndex != 0 ) lastUS = common::createUnique ( label::labelFrom ( us + std::to_string ( ++i ) ), res.getStates ( ) ); label::Label toState = ( popPushIndex == popPushSymbols - 1 ) ? to.first : lastUS; @@ -162,7 +163,7 @@ automaton::RealTimeHeightDeterministicNPDA < > PDAToRHPDA::convert ( const autom std::for_each ( to.second.rbegin ( ), to.second.rend ( ), [&] ( const alphabet::Symbol & push ) { label::Label fromState = ( popPushIndex == 0 ) ? std::get < 0 > ( transition.first ) : lastUS; - if ( popPushIndex != 0 ) lastUS = label::createUniqueLabel ( label::labelFrom ( us + std::to_string ( ++i ) ), res.getStates ( ) ); + if ( popPushIndex != 0 ) lastUS = common::createUnique ( label::labelFrom ( us + std::to_string ( ++i ) ), res.getStates ( ) ); label::Label toState = ( popPushIndex == popPushSymbols - 1 ) ? to.first : lastUS; diff --git a/alib2algo/src/grammar/convert/ToAutomaton.cpp b/alib2algo/src/grammar/convert/ToAutomaton.cpp index e4e8da96a93341f9ccf47e0e8055441748c59ad3..e1c7aab5beb6076bf9d6334521ad347e163a227a 100644 --- a/alib2algo/src/grammar/convert/ToAutomaton.cpp +++ b/alib2algo/src/grammar/convert/ToAutomaton.cpp @@ -6,6 +6,8 @@ */ #include "ToAutomaton.h" +#include <common/createUnique.hpp> + #include <label/ObjectLabel.h> #include <label/Label.h> #include <label/InitialStateLabel.h> @@ -31,7 +33,7 @@ automaton::NFA < > ToAutomaton::convert(const grammar::LeftRG < > & grammar) { } // step 1, 4 - label::Label q0 = label::createUniqueLabel(label::InitialStateLabel::INITIAL_STATE_LABEL, states); + label::Label q0 = common::createUnique(label::InitialStateLabel::INITIAL_STATE_LABEL, states); states.insert(q0); automaton::NFA < > automaton(q0); automaton.setInputAlphabet(grammar.getTerminalAlphabet()); @@ -74,7 +76,7 @@ automaton::NFA < > ToAutomaton::convert(const grammar::RightRG < > & grammar) { } // step 1, 4 - label::Label AState = label::createUniqueLabel(label::FinalStateLabel::FINAL_STATE_LABEL, states); + label::Label AState = common::createUnique(label::FinalStateLabel::FINAL_STATE_LABEL, states); states.insert(AState); automaton::NFA < > automaton(stateMap.find(grammar.getInitialSymbol())->second); automaton.setStates(states); diff --git a/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp b/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp index ced00f9e09e6f8308f2d6c6574d9e989d4bbb8c6..3b7659b4a2afd0ecba38148d128d0221e331464a 100644 --- a/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp +++ b/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp @@ -6,6 +6,7 @@ */ #include "ToGrammarLeftRG.h" +#include <common/createUnique.hpp> namespace grammar { @@ -17,7 +18,7 @@ grammar::LeftRG < > ToGrammarLeftRG::convert(const grammar::Grammar& grammar) { grammar::LeftRG < > ToGrammarLeftRG::convert(const grammar::RightRG < > & grammar) { // 1. - alphabet::Symbol s = alphabet::createUniqueSymbol( grammar.getInitialSymbol( ), grammar.getNonterminalAlphabet(), grammar.getTerminalAlphabet() ); + alphabet::Symbol s = common::createUnique( grammar.getInitialSymbol( ), grammar.getNonterminalAlphabet(), grammar.getTerminalAlphabet() ); grammar::LeftRG < > lrg(s); diff --git a/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp b/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp index 74a132e8d04fc2b786325bb17d234a150ba9163e..d7c9b0e10d04c2408c65f741406d26fceb70d53f 100644 --- a/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp +++ b/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp @@ -6,6 +6,7 @@ */ #include "ToGrammarRightRG.h" +#include <common/createUnique.hpp> namespace grammar { @@ -17,7 +18,7 @@ grammar::RightRG < > ToGrammarRightRG::convert(const grammar::Grammar& grammar) grammar::RightRG < > ToGrammarRightRG::convert(const grammar::LeftRG < > & grammar) { // 1. - alphabet::Symbol s = alphabet::createUniqueSymbol( grammar.getInitialSymbol( ), grammar.getNonterminalAlphabet(), grammar.getTerminalAlphabet() ); + alphabet::Symbol s = common::createUnique( grammar.getInitialSymbol( ), grammar.getNonterminalAlphabet(), grammar.getTerminalAlphabet() ); grammar::RightRG < > rrg( s ); diff --git a/alib2algo/src/grammar/parsing/AbsorbTerminalSymbol.cpp b/alib2algo/src/grammar/parsing/AbsorbTerminalSymbol.cpp index 85788374b5e9678313930a6ddb9fb9219bcbb7c2..c7449c555a182a528d7afe4a1c9aa0f8c89f2495 100644 --- a/alib2algo/src/grammar/parsing/AbsorbTerminalSymbol.cpp +++ b/alib2algo/src/grammar/parsing/AbsorbTerminalSymbol.cpp @@ -9,6 +9,7 @@ #include <grammar/ContextFree/CFG.h> #include <alphabet/SymbolPairSymbol.h> +#include <common/createUnique.hpp> namespace grammar { @@ -49,7 +50,7 @@ void AbsorbTerminalSymbol::absorbTerminalSymbol ( grammar::CFG < > & grammar, co std::map < alphabet::Symbol, alphabet::Symbol > nonterminalsPrimed; // terminal is fixed in particular calls for ( const alphabet::Symbol & nonterminal : nonterminals ) { - alphabet::Symbol newSymbol = alphabet::createUniqueSymbol ( alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( nonterminal, terminal ) ) ), res.getTerminalAlphabet ( ), res.getNonterminalAlphabet ( ) ); + alphabet::Symbol newSymbol = common::createUnique ( alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( nonterminal, terminal ) ) ), res.getTerminalAlphabet ( ), res.getNonterminalAlphabet ( ) ); res.addNonterminalSymbol ( newSymbol ); nonterminalsPrimed.insert ( std::make_pair ( nonterminal, newSymbol ) ); } diff --git a/alib2algo/src/grammar/parsing/LRParser.cpp b/alib2algo/src/grammar/parsing/LRParser.cpp index 66a34c7ad6d1764dbbc4705620ba8dda51884196..7f2e02fd945e23b1847b085149875af50d24596c 100644 --- a/alib2algo/src/grammar/parsing/LRParser.cpp +++ b/alib2algo/src/grammar/parsing/LRParser.cpp @@ -9,17 +9,18 @@ #include <alphabet/EndSymbol.h> #include <stack> +#include <common/createUnique.hpp> namespace grammar { namespace parsing { alphabet::Symbol LRParser::getEndOfInputSymbol ( grammar::CFG < > originalGrammar ) { - return alphabet::createUniqueSymbol ( alphabet::Symbol ( alphabet::EndSymbol ( ) ), originalGrammar.getTerminalAlphabet ( ), originalGrammar.getNonterminalAlphabet ( ) ); + return common::createUnique ( alphabet::Symbol ( alphabet::EndSymbol ( ) ), originalGrammar.getTerminalAlphabet ( ), originalGrammar.getNonterminalAlphabet ( ) ); } grammar::CFG < > LRParser::getAugmentedGrammar ( grammar::CFG < > originalGrammar ) { - alphabet::Symbol initialSymbol = alphabet::createUniqueSymbol ( originalGrammar.getInitialSymbol(), originalGrammar.getTerminalAlphabet ( ), originalGrammar.getNonterminalAlphabet ( ) ); + alphabet::Symbol initialSymbol = common::createUnique ( originalGrammar.getInitialSymbol(), originalGrammar.getTerminalAlphabet ( ), originalGrammar.getNonterminalAlphabet ( ) ); originalGrammar.addNonterminalSymbol ( initialSymbol ); originalGrammar.addRule ( initialSymbol, { originalGrammar.getInitialSymbol ( ) } ); diff --git a/alib2algo/src/grammar/parsing/LeftFactorize.cpp b/alib2algo/src/grammar/parsing/LeftFactorize.cpp index a802810ea52fcbd23d3fe0f68b1563d1e50564e9..0016f1a2efa0428177c988847a91fad01a82a59b 100644 --- a/alib2algo/src/grammar/parsing/LeftFactorize.cpp +++ b/alib2algo/src/grammar/parsing/LeftFactorize.cpp @@ -8,6 +8,7 @@ #include "LeftFactorize.h" #include <grammar/ContextFree/CFG.h> +#include <common/createUnique.hpp> namespace grammar { @@ -19,7 +20,7 @@ void LeftFactorize::leftFactorize ( grammar::CFG < > & grammar, const alphabet:: res.setNonterminalAlphabet ( grammar.getNonterminalAlphabet ( ) ); res.setTerminalAlphabet ( grammar.getTerminalAlphabet ( ) ); - alphabet::Symbol primed = alphabet::createUniqueSymbol ( nonterminal, grammar.getTerminalAlphabet ( ), grammar.getNonterminalAlphabet ( ) ); + alphabet::Symbol primed = common::createUnique ( nonterminal, grammar.getTerminalAlphabet ( ), grammar.getNonterminalAlphabet ( ) ); res.addNonterminalSymbol ( primed ); for ( const std::pair < const alphabet::Symbol, std::set < std::vector < alphabet::Symbol > > > & rule : grammar.getRules ( ) ) { diff --git a/alib2algo/src/grammar/simplify/LeftRecursionRemover.cpp b/alib2algo/src/grammar/simplify/LeftRecursionRemover.cpp index ce92b6aeae4e92dc61df07e1d5338c2054e236d8..dea34db7fa871b568f2d0ff986ef53bffd543bcc 100644 --- a/alib2algo/src/grammar/simplify/LeftRecursionRemover.cpp +++ b/alib2algo/src/grammar/simplify/LeftRecursionRemover.cpp @@ -11,6 +11,7 @@ #include <exception/CommonException.h> #include <vector> +#include <common/createUnique.hpp> namespace grammar { @@ -30,7 +31,7 @@ grammar::EpsilonFreeCFG < > directLeftRecursionRemoveAsOrder(const grammar::Epsi } ) && std::all_of(origGrammar.getRules().find(nonterminal)->second.begin(), origGrammar.getRules().find(nonterminal)->second.end(), [&](const std::vector<alphabet::Symbol>& singleRHS) { return origGrammar.getTerminalAlphabet().count(singleRHS[0]) || singleRHS[0] >= nonterminal; // only remove left recursion when all nonterminals are bigger than the left hand side })) { - alphabet::Symbol primed = alphabet::createUniqueSymbol(nonterminal, res.getTerminalAlphabet(), res.getNonterminalAlphabet()); + alphabet::Symbol primed = common::createUnique(nonterminal, res.getTerminalAlphabet(), res.getNonterminalAlphabet()); res.addNonterminalSymbol(primed); for(const std::vector<alphabet::Symbol>& singleRHS : origGrammar.getRules().find(nonterminal)->second) { // do the removal if(singleRHS[0] == nonterminal) { // A -> A alpha diff --git a/alib2algo/src/grammar/simplify/ToCNF.cpp b/alib2algo/src/grammar/simplify/ToCNF.cpp index c6bc18486ffa755389c50abaea2468718a9b771f..2d88f8c92a24180ab628cd28dc6963f157a69c03 100644 --- a/alib2algo/src/grammar/simplify/ToCNF.cpp +++ b/alib2algo/src/grammar/simplify/ToCNF.cpp @@ -12,6 +12,7 @@ #include "alphabet/LabeledSymbol.h" #include "alphabet/SymbolPairSymbol.h" #include <exception/CommonException.h> +#include <common/createUnique.hpp> namespace grammar { @@ -27,7 +28,7 @@ std::pair<alphabet::Symbol, alphabet::Symbol> splitToPairs(T& grammar, const std auto second = splitToPairs(grammar, rhs, from + 1, 2, createdSymbols); alphabet::Symbol secondProposal{alphabet::SymbolPairSymbol(second)}; if(!createdSymbols.count(secondProposal)) { - createdSymbols.insert(std::make_pair(secondProposal, alphabet::createUniqueSymbol(secondProposal, grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()))); + createdSymbols.insert(std::make_pair(secondProposal, common::createUnique(secondProposal, grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()))); } grammar.addNonterminalSymbol(createdSymbols.find(secondProposal)->second); grammar.addRawRule(createdSymbols.find(secondProposal)->second, {std::move(second.first), std::move(second.second)}); @@ -37,7 +38,7 @@ std::pair<alphabet::Symbol, alphabet::Symbol> splitToPairs(T& grammar, const std auto first = splitToPairs(grammar, rhs, from, size / 2, createdSymbols); alphabet::Symbol firstProposal{alphabet::SymbolPairSymbol(first)}; if(!createdSymbols.count(firstProposal)) { - createdSymbols.insert(std::make_pair(firstProposal, alphabet::createUniqueSymbol(firstProposal, grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()))); + createdSymbols.insert(std::make_pair(firstProposal, common::createUnique(firstProposal, grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()))); } grammar.addNonterminalSymbol(createdSymbols.find(firstProposal)->second); grammar.addRawRule(createdSymbols.find(firstProposal)->second, {std::move(first.first), std::move(first.second)}); @@ -45,7 +46,7 @@ std::pair<alphabet::Symbol, alphabet::Symbol> splitToPairs(T& grammar, const std auto second = splitToPairs(grammar, rhs, from + size / 2, size - size / 2, createdSymbols); alphabet::Symbol secondProposal{alphabet::SymbolPairSymbol(second)}; if(!createdSymbols.count(secondProposal)) { - createdSymbols.insert(std::make_pair(secondProposal, alphabet::createUniqueSymbol(secondProposal, grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()))); + createdSymbols.insert(std::make_pair(secondProposal, common::createUnique(secondProposal, grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()))); } grammar.addNonterminalSymbol(createdSymbols.find(secondProposal)->second); grammar.addRawRule(createdSymbols.find(secondProposal)->second, {std::move(second.first), std::move(second.second)}); @@ -84,7 +85,7 @@ grammar::CNF < > convertInternal( const T & origGrammar ) { std::map<alphabet::Symbol, alphabet::Symbol> terminalToShadowNonterminal; for( const auto & symbol : grammarTmp.getTerminalAlphabet() ) { - alphabet::Symbol shadowSymbol = alphabet::createUniqueSymbol(symbol, grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()); + alphabet::Symbol shadowSymbol = common::createUnique(symbol, grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()); terminalToShadowNonterminal.insert( std::make_pair( symbol, shadowSymbol )); grammar.addNonterminalSymbol( shadowSymbol ); grammar.addRule(std::move(shadowSymbol), symbol); diff --git a/alib2algo/src/grammar/simplify/ToGNF.cpp b/alib2algo/src/grammar/simplify/ToGNF.cpp index a1d6c5e0278a25c18ea4087cbb36ad6a0ede6fde..2612150f250fac314ae84a8266461c3881f684ee 100644 --- a/alib2algo/src/grammar/simplify/ToGNF.cpp +++ b/alib2algo/src/grammar/simplify/ToGNF.cpp @@ -13,6 +13,7 @@ #include "../convert/ToGrammarRightRG.h" #include "alphabet/LabeledSymbol.h" #include "alphabet/SymbolPairSymbol.h" +#include <common/createUnique.hpp> namespace grammar { @@ -61,7 +62,7 @@ grammar::GNF < > convertInternal( const grammar::EpsilonFreeCFG < > & origGramma res.setGeneratesEpsilon(step.getGeneratesEpsilon()); std::map<alphabet::Symbol, alphabet::Symbol> terminalToPrimed; for(const alphabet::Symbol& terminal : step.getTerminalAlphabet()) { - alphabet::Symbol primed = alphabet::createUniqueSymbol(terminal, res.getTerminalAlphabet(), res.getNonterminalAlphabet()); + alphabet::Symbol primed = common::createUnique(terminal, res.getTerminalAlphabet(), res.getNonterminalAlphabet()); terminalToPrimed.insert(std::make_pair(terminal, primed)); res.addNonterminalSymbol(primed); res.addRule(primed, std::make_pair(terminal, std::vector<alphabet::Symbol> {})); diff --git a/alib2algo/src/regexp/convert/ToGrammarRightRGDerivation.cpp b/alib2algo/src/regexp/convert/ToGrammarRightRGDerivation.cpp index 02c716c4d640428c8663b4d6f5b6c157b00fe4c9..6c771f85f1f6ce0e5e28df9fec6b50c89eca0a7b 100644 --- a/alib2algo/src/regexp/convert/ToGrammarRightRGDerivation.cpp +++ b/alib2algo/src/regexp/convert/ToGrammarRightRGDerivation.cpp @@ -13,6 +13,7 @@ #include <vector> #include <hexavigesimal> +#include <common/createUnique.hpp> #include "../simplify/RegExpOptimize.h" #include "../transform/RegExpDerivation.h" @@ -76,7 +77,7 @@ grammar::RightRG < > ToGrammarRightRGDerivation::convert(const T& regexp) { for(const auto & r : N) { if(V == r) continue; - alphabet::Symbol nt = alphabet::createUniqueSymbol(alphabet::Symbol(alphabet::LabeledSymbol(std::toBase26(nonterminalId++))), grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()); + alphabet::Symbol nt = common::createUnique(alphabet::Symbol(alphabet::LabeledSymbol(std::toBase26(nonterminalId++))), grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()); nonterminalMap.insert(std::make_pair(r, nt)); grammar.addNonterminalSymbol(nt); } diff --git a/alib2algo/test-src/grammar/parsing/AbsorbTerminalSymbol.cpp b/alib2algo/test-src/grammar/parsing/AbsorbTerminalSymbol.cpp index 5857ccda287cee3af9f02d8b56e36a2fecf264c1..7de89773ec11e4f78ff8e84d2b28ec2a0d210842 100644 --- a/alib2algo/test-src/grammar/parsing/AbsorbTerminalSymbol.cpp +++ b/alib2algo/test-src/grammar/parsing/AbsorbTerminalSymbol.cpp @@ -23,7 +23,7 @@ void AbsorbTerminalSymbol::testAbsorbTerminalSymbol ( ) { alphabet::Symbol b = alphabet::symbolFrom ( 'b' ); alphabet::Symbol c = alphabet::symbolFrom ( 'c' ); - alphabet::Symbol Ba = alphabet::createUniqueSymbol ( alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( B, a ) ) ), { }, { } ); + alphabet::Symbol Ba = alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( B, a ) ) ); grammar::CFG < > grammar ( A ); @@ -69,8 +69,8 @@ void AbsorbTerminalSymbol::testAbsorbTerminalSymbol2 ( ) { alphabet::Symbol b = alphabet::symbolFrom ( 'b' ); alphabet::Symbol c = alphabet::symbolFrom ( 'c' ); - alphabet::Symbol Ba = alphabet::createUniqueSymbol ( alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( B, a ) ) ), { }, { } ); - alphabet::Symbol Xa = alphabet::createUniqueSymbol ( alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( X, a ) ) ), { }, { } ); + alphabet::Symbol Ba = alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( B, a ) ) ); + alphabet::Symbol Xa = alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( X, a ) ) ); grammar::CFG < > grammar ( A ); @@ -118,7 +118,7 @@ void AbsorbTerminalSymbol::testAbsorbTerminalSymbol3 ( ) { alphabet::Symbol b = alphabet::symbolFrom ( 'b' ); alphabet::Symbol c = alphabet::symbolFrom ( 'c' ); - alphabet::Symbol Ba = alphabet::createUniqueSymbol ( alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( B, a ) ) ), { }, { } ); + alphabet::Symbol Ba = alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( B, a ) ) ); grammar::CFG < > grammar ( A ); diff --git a/alib2algo/test-src/grammar/parsing/HandleFirstFollowConflict.cpp b/alib2algo/test-src/grammar/parsing/HandleFirstFollowConflict.cpp index a5916eb8561a65f1c399b533b187d202fbfdda64..559e16a390927a25f0d648c0a4b5ec2ff2444e8d 100644 --- a/alib2algo/test-src/grammar/parsing/HandleFirstFollowConflict.cpp +++ b/alib2algo/test-src/grammar/parsing/HandleFirstFollowConflict.cpp @@ -24,7 +24,7 @@ void HandleFirstFollowConflict::testHandleFirstFollowConflict ( ) { alphabet::Symbol c = alphabet::symbolFrom ( 'c' ); alphabet::Symbol d = alphabet::symbolFrom ( 'd' ); - alphabet::Symbol Ba = alphabet::createUniqueSymbol ( alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( B, a ) ) ), { }, { } ); + alphabet::Symbol Ba = alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( B, a ) ) ); grammar::CFG < > grammar ( A ); @@ -94,8 +94,8 @@ void HandleFirstFollowConflict::testHandleFirstFollowConflict2 ( ) { alphabet::Symbol c = alphabet::symbolFrom ( 'c' ); alphabet::Symbol d = alphabet::symbolFrom ( 'd' ); - alphabet::Symbol Ba = alphabet::createUniqueSymbol ( alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( B, a ) ) ), { }, { } ); - alphabet::Symbol Xa = alphabet::createUniqueSymbol ( alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( X, a ) ) ), { }, { } ); + alphabet::Symbol Ba = alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( B, a ) ) ); + alphabet::Symbol Xa = alphabet::Symbol ( alphabet::SymbolPairSymbol ( std::make_pair ( X, a ) ) ); grammar::CFG < > grammar ( A ); diff --git a/alib2algo/test-src/grammar/simplify/GrammarLeftRecursionRemoverTest.cpp b/alib2algo/test-src/grammar/simplify/GrammarLeftRecursionRemoverTest.cpp index f2d52b932c309c19893d8e98b84761de62415cfe..445aa9a5c39b0dd130c12a5f1df8ae70445f2749 100644 --- a/alib2algo/test-src/grammar/simplify/GrammarLeftRecursionRemoverTest.cpp +++ b/alib2algo/test-src/grammar/simplify/GrammarLeftRecursionRemoverTest.cpp @@ -7,6 +7,7 @@ #include "grammar/ContextFree/EpsilonFreeCFG.h" #include <factory/StringDataFactory.hpp> +#include <common/createUnique.hpp> #define CPPUNIT_IMPLY(x, y) CPPUNIT_ASSERT(!(x) || (y)) @@ -61,7 +62,7 @@ void GrammarLeftRecursionRemoverTest::testRemoveLefRecursion2() { grammar1.addRule(A, {A, b}); grammar1.addRule(A, {c}); - alphabet::Symbol Aprimed = createUniqueSymbol(A, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol Aprimed = common::createUnique(A, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); std::cout << alib::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar1)) << std::endl; @@ -103,7 +104,7 @@ void GrammarLeftRecursionRemoverTest::testRemoveLefRecursion3() { grammar1.addRule(B, {A, b}); grammar1.addRule(A, {c}); - alphabet::Symbol Bprimed = createUniqueSymbol(B, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol Bprimed = common::createUnique(B, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); std::cout << alib::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar1)) << std::endl; @@ -147,8 +148,8 @@ void GrammarLeftRecursionRemoverTest::testRemoveLefRecursion4() { grammar1.addRule(C, {C, C}); grammar1.addRule(C, {a}); - alphabet::Symbol Bprimed = createUniqueSymbol(B, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); - alphabet::Symbol Cprimed = createUniqueSymbol(C, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol Bprimed = common::createUnique(B, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol Cprimed = common::createUnique(C, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); std::cout << alib::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar1)) << std::endl; diff --git a/alib2algo/test-src/grammar/simplify/GrammarToGNFTest.cpp b/alib2algo/test-src/grammar/simplify/GrammarToGNFTest.cpp index 50ef9c98ba105a436783d536947677f9f6076099..9a6a25e903356a9bf5e1b81a7c5736c903002583 100644 --- a/alib2algo/test-src/grammar/simplify/GrammarToGNFTest.cpp +++ b/alib2algo/test-src/grammar/simplify/GrammarToGNFTest.cpp @@ -7,6 +7,7 @@ #include "grammar/ContextFree/EpsilonFreeCFG.h" #include <factory/StringDataFactory.hpp> +#include <common/createUnique.hpp> #define CPPUNIT_IMPLY(x, y) CPPUNIT_ASSERT(!(x) || (y)) @@ -33,8 +34,8 @@ void GrammarToGNFTest::testRemoveToGNFRules1() { grammar1.setNonterminalAlphabet({S, A, B, C, D}); grammar1.setTerminalAlphabet({a, b}); - alphabet::Symbol aprimed = createUniqueSymbol(a, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); - alphabet::Symbol bprimed = createUniqueSymbol(b, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol aprimed = common::createUnique(a, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol bprimed = common::createUnique(b, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); grammar::GNF < > grammar2 = grammar::simplify::ToGNF::convert(grammar1); @@ -69,10 +70,10 @@ void GrammarToGNFTest::testRemoveToGNFRules2() { grammar1.addRule(A, {A, b}); grammar1.addRule(A, {c}); - alphabet::Symbol Aprimed = createUniqueSymbol(A, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); - alphabet::Symbol aprimed = createUniqueSymbol(a, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); - alphabet::Symbol bprimed = createUniqueSymbol(b, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); - alphabet::Symbol cprimed = createUniqueSymbol(c, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol Aprimed = common::createUnique(A, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol aprimed = common::createUnique(a, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol bprimed = common::createUnique(b, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol cprimed = common::createUnique(c, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); std::cout << alib::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar1)) << std::endl; @@ -117,10 +118,10 @@ void GrammarToGNFTest::testRemoveToGNFRules3() { grammar1.addRule(B, {A, b}); grammar1.addRule(A, {c}); - alphabet::Symbol Bprimed = createUniqueSymbol(B, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); - alphabet::Symbol aprimed = createUniqueSymbol(a, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); - alphabet::Symbol bprimed = createUniqueSymbol(b, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); - alphabet::Symbol cprimed = createUniqueSymbol(c, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol Bprimed = common::createUnique(B, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol aprimed = common::createUnique(a, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol bprimed = common::createUnique(b, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); + alphabet::Symbol cprimed = common::createUnique(c, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet()); std::cout << alib::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar1)) << std::endl; diff --git a/alib2common/src/base/WrapperBase.hpp b/alib2common/src/base/WrapperBase.hpp index af3d469d68e75e97f7c0140262e78a403254c854..538467209419cc873dee677d2a0d253945f147f7 100644 --- a/alib2common/src/base/WrapperBase.hpp +++ b/alib2common/src/base/WrapperBase.hpp @@ -106,6 +106,16 @@ public: explicit operator std::string ( ) const { return ( std::string ) * m_data; } + + WrapperBase < T > & operator ++ ( ) { + T * res = std::move ( this->getData ( ) ).inc ( ); + + if ( res != NULL ) + this->setData ( res ); + + return *this; + } + }; } /* namespace alib */ diff --git a/alib2common/src/primitive/Bool.cpp b/alib2common/src/primitive/Bool.cpp index 7075c1b5b94907a6b80cf55b5b3a5f6ded0a2871..067301de95211aa8a3281dbedc584189082a5db8 100644 --- a/alib2common/src/primitive/Bool.cpp +++ b/alib2common/src/primitive/Bool.cpp @@ -76,12 +76,9 @@ void Bool::compose(std::deque<sax::Token>& out, bool primitive) { out.emplace_back(Bool::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -Bool Bool::next() const { - return Bool(!m_data); -} - -void Bool::inc() { +PrimitiveBase * Bool::inc() && { m_data = !m_data; + return NULL; } } /* namespace primitive */ diff --git a/alib2common/src/primitive/Bool.h b/alib2common/src/primitive/Bool.h index eae50fff10ee7a9fac714ff2397634d5f541794e..6b10404bd26f45fbb0f36c18d631a7ef2bfe50a3 100644 --- a/alib2common/src/primitive/Bool.h +++ b/alib2common/src/primitive/Bool.h @@ -65,8 +65,7 @@ public: void compose ( std::deque < sax::Token > & out ) const; static void compose ( std::deque < sax::Token > & out, bool primitive ); - Bool next ( ) const; - virtual void inc ( ); + virtual PrimitiveBase * inc ( ) &&; }; } /* namespace primitive */ diff --git a/alib2common/src/primitive/Character.cpp b/alib2common/src/primitive/Character.cpp index dd6cc85cb9044a3e3db865c93acb59f1cf3da74b..3c431432694b5f7e3343b8d06a97391254aa616c 100644 --- a/alib2common/src/primitive/Character.cpp +++ b/alib2common/src/primitive/Character.cpp @@ -65,12 +65,9 @@ void Character::compose(std::deque<sax::Token>& out, char primitive) { out.emplace_back(Character::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -Character Character::next() const { - return Character(m_data + 1); -} - -void Character::inc() { +PrimitiveBase * Character::inc() && { m_data++; + return NULL; } } /* namespace primitive */ diff --git a/alib2common/src/primitive/Character.h b/alib2common/src/primitive/Character.h index c80ed46cb215904b6b4e506d7c562141a86d091c..1ff9d4a4511c6daab0fbf5c14cbe22cd5b78af10 100644 --- a/alib2common/src/primitive/Character.h +++ b/alib2common/src/primitive/Character.h @@ -65,8 +65,7 @@ public: void compose ( std::deque < sax::Token > & out ) const; static void compose ( std::deque < sax::Token > & out, char primitive ); - Character next ( ) const; - virtual void inc ( ); + virtual PrimitiveBase * inc ( ) &&; }; } /* namespace primitive */ diff --git a/alib2common/src/primitive/Integer.cpp b/alib2common/src/primitive/Integer.cpp index ae9b0013e82839b20d39aa51e05c7d74daf7a501..03dce0f6c5c9f3b65ca7aa8941aaa5d5f2242d38 100644 --- a/alib2common/src/primitive/Integer.cpp +++ b/alib2common/src/primitive/Integer.cpp @@ -65,12 +65,9 @@ void Integer::compose(std::deque<sax::Token>& out, int primitive) { out.emplace_back(Integer::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -Integer Integer::next() const { - return Integer(m_data + 1); -} - -void Integer::inc() { +PrimitiveBase * Integer::inc() && { m_data++; + return NULL; } } /* namespace primitive */ diff --git a/alib2common/src/primitive/Integer.h b/alib2common/src/primitive/Integer.h index 6ad4fec405a3e897d46062e46045ed633a6fe669..55a0f641aa6389f3b68e6b34f69c17595791dffa 100644 --- a/alib2common/src/primitive/Integer.h +++ b/alib2common/src/primitive/Integer.h @@ -65,8 +65,7 @@ public: void compose ( std::deque < sax::Token > & out ) const; static void compose ( std::deque < sax::Token > & out, int primitive ); - Integer next ( ) const; - virtual void inc ( ); + virtual PrimitiveBase * inc ( ) &&; }; } /* namespace primitive */ diff --git a/alib2common/src/primitive/Primitive.cpp b/alib2common/src/primitive/Primitive.cpp index a87b35dd4d8612b317f8185fb8433951d2441b58..bee63bbfd14435d1b2e1b906517725ebedbdba6a 100644 --- a/alib2common/src/primitive/Primitive.cpp +++ b/alib2common/src/primitive/Primitive.cpp @@ -15,15 +15,8 @@ namespace primitive { -Primitive Primitive::next ( ) const { - Primitive res = * this; - - res.inc ( ); - return res; -} - void Primitive::inc ( ) { - this->getData ( ).inc ( ); + this->operator ++ ( ); } Primitive primitiveFrom ( int number ) { diff --git a/alib2common/src/primitive/Primitive.h b/alib2common/src/primitive/Primitive.h index 8f3c61d797e18c477c65b06a4223766779b4ce7c..4bb0971e19774fbe84186593b082def8e2f1428a 100644 --- a/alib2common/src/primitive/Primitive.h +++ b/alib2common/src/primitive/Primitive.h @@ -20,7 +20,6 @@ class Primitive : public alib::WrapperBase < PrimitiveBase > { using alib::WrapperBase < PrimitiveBase >::WrapperBase; public: - Primitive next ( ) const; void inc ( ); static const std::string & getXmlTagRefName() { diff --git a/alib2common/src/primitive/PrimitiveBase.h b/alib2common/src/primitive/PrimitiveBase.h index ae47adac520375678faa4e410bfdbadf031bfb36..a7bd39c2ec8eea361cea828ce6ce3a73f7c75471 100644 --- a/alib2common/src/primitive/PrimitiveBase.h +++ b/alib2common/src/primitive/PrimitiveBase.h @@ -20,7 +20,7 @@ public: virtual PrimitiveBase* clone() const = 0; virtual PrimitiveBase* plunder() && = 0; - virtual void inc() = 0; + virtual PrimitiveBase* inc() && = 0; }; } /* namespace primitive */ diff --git a/alib2common/src/primitive/String.cpp b/alib2common/src/primitive/String.cpp index c70588f88b4c0849cbae46d64a91fa8a9577fe49..38d18e52a8b8ae1c9c55e7be5b6856394c4d7bae 100644 --- a/alib2common/src/primitive/String.cpp +++ b/alib2common/src/primitive/String.cpp @@ -72,12 +72,9 @@ void String::compose(std::deque<sax::Token>& out, std::string primitive) { out.emplace_back(primitive::String::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -String String::next() const { - return String(m_data + '\''); -} - -void String::inc() { +PrimitiveBase * String::inc() && { m_data.push_back('\''); + return NULL; } } /* namespace primitive */ diff --git a/alib2common/src/primitive/String.h b/alib2common/src/primitive/String.h index 371fc901e3ddebe7a2ef4875a2f5fb45f4042f5e..6be80b664efd8001e3da66d06a860999df9fbc68 100644 --- a/alib2common/src/primitive/String.h +++ b/alib2common/src/primitive/String.h @@ -68,8 +68,7 @@ public: void compose ( std::deque < sax::Token > & out ) const; static void compose ( std::deque < sax::Token > & out, std::string primitive ); - String next ( ) const; - virtual void inc ( ); + virtual PrimitiveBase * inc ( ) &&; }; } /* namespace primitive */ diff --git a/alib2common/src/primitive/Unsigned.cpp b/alib2common/src/primitive/Unsigned.cpp index d4b899c5b06be4572971261ba7469ebdfe01a2c7..487e96fb3170c378c7534ac0fc0d20ac6c565f40 100644 --- a/alib2common/src/primitive/Unsigned.cpp +++ b/alib2common/src/primitive/Unsigned.cpp @@ -65,12 +65,9 @@ void Unsigned::compose(std::deque<sax::Token>& out, unsigned primitive) { out.emplace_back(Unsigned::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -Unsigned Unsigned::next() const { - return Unsigned(m_data + 1); -} - -void Unsigned::inc() { +PrimitiveBase * Unsigned::inc() && { m_data++; + return NULL; } } /* namespace primitive */ diff --git a/alib2common/src/primitive/Unsigned.h b/alib2common/src/primitive/Unsigned.h index 627e54cd1762285b8de29fc3a0abeb5419bd8ed1..d8a718007da7a313aff068a778807c7a3a413950 100644 --- a/alib2common/src/primitive/Unsigned.h +++ b/alib2common/src/primitive/Unsigned.h @@ -65,8 +65,7 @@ public: void compose ( std::deque < sax::Token > & out ) const; static void compose ( std::deque < sax::Token > & out, unsigned primitive ); - Unsigned next ( ) const; - virtual void inc ( ); + virtual PrimitiveBase * inc ( ) &&; }; } /* namespace primitive */ diff --git a/alib2data/src/alphabet/BarSymbol.cpp b/alib2data/src/alphabet/BarSymbol.cpp index 15752087900008465b1b21a4b0d82db438cac63e..f9d267a09491747c8bb5aa7318d43ee30b12ee47 100644 --- a/alib2data/src/alphabet/BarSymbol.cpp +++ b/alib2data/src/alphabet/BarSymbol.cpp @@ -52,10 +52,6 @@ void BarSymbol::compose(std::deque<sax::Token>& out) const { out.emplace_back(BarSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -SymbolBase* BarSymbol::next() const { - return new UniqueSymbol(Symbol(*this), primitive::Integer(0)); -} - SymbolBase* BarSymbol::inc() && { return new UniqueSymbol(Symbol(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/alphabet/BarSymbol.h b/alib2data/src/alphabet/BarSymbol.h index 684ecd1cc02fc5d636249f79ea0fe2649b633c3e..f01113bc6eb1e8d4b0659a5ec38d990a461364b5 100644 --- a/alib2data/src/alphabet/BarSymbol.h +++ b/alib2data/src/alphabet/BarSymbol.h @@ -52,7 +52,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual SymbolBase * next ( ) const; virtual SymbolBase * inc ( ) &&; }; diff --git a/alib2data/src/alphabet/BlankSymbol.cpp b/alib2data/src/alphabet/BlankSymbol.cpp index 595820943fb9bdf944f43db7b4df131fbdc5b10b..e250d84a1269c635b19dd7dacbd3f24308671ff5 100644 --- a/alib2data/src/alphabet/BlankSymbol.cpp +++ b/alib2data/src/alphabet/BlankSymbol.cpp @@ -52,10 +52,6 @@ void BlankSymbol::compose(std::deque<sax::Token>& out) const { out.emplace_back(BlankSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -SymbolBase* BlankSymbol::next() const { - return new UniqueSymbol(Symbol(*this), primitive::Integer(0)); -} - SymbolBase* BlankSymbol::inc() && { return new UniqueSymbol(Symbol(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/alphabet/BlankSymbol.h b/alib2data/src/alphabet/BlankSymbol.h index 102eec43e8a06048ed2ce3578d29a1c38ea1f60f..d3e9540b47feae333fd710376b19ac68d5a11635 100644 --- a/alib2data/src/alphabet/BlankSymbol.h +++ b/alib2data/src/alphabet/BlankSymbol.h @@ -52,7 +52,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual SymbolBase * next ( ) const; virtual SymbolBase * inc ( ) &&; }; diff --git a/alib2data/src/alphabet/BottomOfTheStackSymbol.cpp b/alib2data/src/alphabet/BottomOfTheStackSymbol.cpp index 761a90eb40c8518f32aa96755e75843cff3ec053..8b54944099f40eef72ea1a86e430609b1db96330 100644 --- a/alib2data/src/alphabet/BottomOfTheStackSymbol.cpp +++ b/alib2data/src/alphabet/BottomOfTheStackSymbol.cpp @@ -52,10 +52,6 @@ void BottomOfTheStackSymbol::compose(std::deque<sax::Token>& out) const { out.emplace_back(BottomOfTheStackSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -SymbolBase* BottomOfTheStackSymbol::next() const { - return new UniqueSymbol(Symbol(*this), primitive::Integer(0)); -} - SymbolBase* BottomOfTheStackSymbol::inc() && { return new UniqueSymbol(Symbol(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/alphabet/BottomOfTheStackSymbol.h b/alib2data/src/alphabet/BottomOfTheStackSymbol.h index a745d7e3669907d2669bb4fe951a38f83d407fce..9eda130ede91d4e8df3f9f2079b589bec43c73d3 100644 --- a/alib2data/src/alphabet/BottomOfTheStackSymbol.h +++ b/alib2data/src/alphabet/BottomOfTheStackSymbol.h @@ -52,7 +52,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual SymbolBase * next ( ) const; virtual SymbolBase * inc ( ) &&; }; diff --git a/alib2data/src/alphabet/EndSymbol.cpp b/alib2data/src/alphabet/EndSymbol.cpp index db2ccb5ebf0bfc9dfe47ee230f8395d06b61a5b8..9879d7cd59453f3cabc09ab5b3f83e6b7f3c7957 100644 --- a/alib2data/src/alphabet/EndSymbol.cpp +++ b/alib2data/src/alphabet/EndSymbol.cpp @@ -52,10 +52,6 @@ void EndSymbol::compose(std::deque<sax::Token>& out) const { out.emplace_back(EndSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -SymbolBase* EndSymbol::next() const { - return new UniqueSymbol(Symbol(*this), primitive::Integer(0)); -} - SymbolBase* EndSymbol::inc() && { return new UniqueSymbol(Symbol(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/alphabet/EndSymbol.h b/alib2data/src/alphabet/EndSymbol.h index 428628553cfc181aa3d356b9b01ac8937d043c4d..d2b77c40ff2136bc36c3e212d0ec02879c7200a2 100644 --- a/alib2data/src/alphabet/EndSymbol.h +++ b/alib2data/src/alphabet/EndSymbol.h @@ -52,7 +52,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual SymbolBase * next ( ) const; virtual SymbolBase * inc ( ) &&; }; diff --git a/alib2data/src/alphabet/LabeledSymbol.cpp b/alib2data/src/alphabet/LabeledSymbol.cpp index dde8bf7d7358badd8247633d623553165c8dd22c..121690acd980a31ed4a8037ad08ef6f97fddf4db 100644 --- a/alib2data/src/alphabet/LabeledSymbol.cpp +++ b/alib2data/src/alphabet/LabeledSymbol.cpp @@ -70,10 +70,6 @@ void LabeledSymbol::compose(std::deque<sax::Token>& out) const { out.emplace_back(LabeledSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -SymbolBase* LabeledSymbol::next() const { - return new LabeledSymbol(m_label.next()); -} - SymbolBase* LabeledSymbol::inc() && { m_label.inc(); return NULL; diff --git a/alib2data/src/alphabet/LabeledSymbol.h b/alib2data/src/alphabet/LabeledSymbol.h index bdefe486dd6f80225887789659da4439e8ae44bd..0e209446bba67a34c706de52e47e5d88d356b501 100644 --- a/alib2data/src/alphabet/LabeledSymbol.h +++ b/alib2data/src/alphabet/LabeledSymbol.h @@ -63,7 +63,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual SymbolBase * next ( ) const; virtual SymbolBase * inc ( ) &&; }; diff --git a/alib2data/src/alphabet/NonlinearVariableSymbol.cpp b/alib2data/src/alphabet/NonlinearVariableSymbol.cpp index 7315b0d96836728d2c985f7d3f402b3550611754..0553135e533da82034183b0f1ada258ddb952df9 100644 --- a/alib2data/src/alphabet/NonlinearVariableSymbol.cpp +++ b/alib2data/src/alphabet/NonlinearVariableSymbol.cpp @@ -64,10 +64,6 @@ void NonlinearVariableSymbol::compose ( std::deque < sax::Token > & out ) const out.emplace_back ( NonlinearVariableSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT ); } -SymbolBase * NonlinearVariableSymbol::next ( ) const { - return new UniqueSymbol ( Symbol ( * this ), primitive::Integer ( 0 ) ); -} - SymbolBase * NonlinearVariableSymbol::inc ( ) && { return new UniqueSymbol ( Symbol ( std::move ( * this ) ), primitive::Integer ( 0 ) ); } diff --git a/alib2data/src/alphabet/NonlinearVariableSymbol.h b/alib2data/src/alphabet/NonlinearVariableSymbol.h index abf2125fc480de06b018a447e1cf14c6278c296d..4a5a35c149859ba3c2419693eb1b3fcb6bacae41 100644 --- a/alib2data/src/alphabet/NonlinearVariableSymbol.h +++ b/alib2data/src/alphabet/NonlinearVariableSymbol.h @@ -60,7 +60,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual SymbolBase * next ( ) const; virtual SymbolBase * inc ( ) &&; }; diff --git a/alib2data/src/alphabet/RankedSymbol.h b/alib2data/src/alphabet/RankedSymbol.h index 282234ac407b960d96fcee635b95d79773d716a9..dae75a6675d7b9305d0a12bea57c2851f8478d91 100644 --- a/alib2data/src/alphabet/RankedSymbol.h +++ b/alib2data/src/alphabet/RankedSymbol.h @@ -56,7 +56,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; static void compose ( std::deque < sax::Token > & out, const std::ranked_symbol < SymbolType, RankType > & input ); - virtual SymbolBase * next ( ) const; virtual SymbolBase * inc ( ) &&; }; @@ -112,11 +111,6 @@ void RankedSymbol < SymbolType, RankType >::compose( std::deque<sax::Token>& out out.emplace_back(RankedSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -template < class SymbolType, class RankType > -SymbolBase* RankedSymbol < SymbolType, RankType >::next() const { - return new RankedSymbol(this->m_symbol.next(), this->m_rank); -} - template < class SymbolType, class RankType > SymbolBase* RankedSymbol < SymbolType, RankType >::inc() && { this->m_symbol.inc(); diff --git a/alib2data/src/alphabet/StartSymbol.cpp b/alib2data/src/alphabet/StartSymbol.cpp index 0b7a2f0474f51cb55402206bcc1306d8fcfd78a0..28668e3a3fcf37f064fff6c277b2dd8f80f6e8af 100644 --- a/alib2data/src/alphabet/StartSymbol.cpp +++ b/alib2data/src/alphabet/StartSymbol.cpp @@ -52,10 +52,6 @@ void StartSymbol::compose(std::deque<sax::Token>& out) const { out.emplace_back(StartSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -SymbolBase* StartSymbol::next() const { - return new UniqueSymbol(Symbol(*this), primitive::Integer(0)); -} - SymbolBase* StartSymbol::inc() && { return new UniqueSymbol(Symbol(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/alphabet/StartSymbol.h b/alib2data/src/alphabet/StartSymbol.h index 4b1d2b99c12d597d3dabbf86e54f7fd6ecf19cc6..3a322d3c8e61739dec66775273c5f888fd01b5f2 100644 --- a/alib2data/src/alphabet/StartSymbol.h +++ b/alib2data/src/alphabet/StartSymbol.h @@ -52,7 +52,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual SymbolBase * next ( ) const; virtual SymbolBase * inc ( ) &&; }; diff --git a/alib2data/src/alphabet/SubtreeWildcardSymbol.cpp b/alib2data/src/alphabet/SubtreeWildcardSymbol.cpp index c624215c6b6d13874bc55d5f4daa93b4bb93fbbd..b374d47678b91bc8d3bd39da970e716a08fbb91a 100644 --- a/alib2data/src/alphabet/SubtreeWildcardSymbol.cpp +++ b/alib2data/src/alphabet/SubtreeWildcardSymbol.cpp @@ -53,10 +53,6 @@ void SubtreeWildcardSymbol::compose(std::deque<sax::Token>& out) const { out.emplace_back(SubtreeWildcardSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -SymbolBase* SubtreeWildcardSymbol::next() const { - return new UniqueSymbol(Symbol(*this), primitive::Integer(0)); -} - SymbolBase* SubtreeWildcardSymbol::inc() && { return new UniqueSymbol(Symbol(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/alphabet/SubtreeWildcardSymbol.h b/alib2data/src/alphabet/SubtreeWildcardSymbol.h index e13bafcab14a8bf3e9c0c46d586bccdf05542a9b..e820c63341df4b542f6f3cde21d02de0b8698bd7 100644 --- a/alib2data/src/alphabet/SubtreeWildcardSymbol.h +++ b/alib2data/src/alphabet/SubtreeWildcardSymbol.h @@ -54,7 +54,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual SymbolBase * next ( ) const; virtual SymbolBase * inc ( ) &&; }; diff --git a/alib2data/src/alphabet/Symbol.cpp b/alib2data/src/alphabet/Symbol.cpp index 44ef696abce3fa0af985290b64d2171f8bd609f3..a9453bcde036c14a39d7c39ea686f6ecc1ea4564 100644 --- a/alib2data/src/alphabet/Symbol.cpp +++ b/alib2data/src/alphabet/Symbol.cpp @@ -7,35 +7,12 @@ #include "Symbol.h" #include "LabeledSymbol.h" -#include <climits> -#include "SymbolException.h" #include <core/xmlApi.hpp> namespace alphabet { -Symbol Symbol::next ( ) const { - return Symbol ( this->getData ( ).next ( ) ); -} - void Symbol::inc ( ) { - SymbolBase * res = std::move ( this->getData ( ) ).inc ( ); - - if ( res == NULL ) return; - - this->setData ( res ); -} - -alphabet::Symbol createUniqueSymbol ( alphabet::Symbol attempt, const std::set < alphabet::Symbol > & terminalAlphabet, const std::set < alphabet::Symbol > & nonterminalAlphabet ) { - int i = 0; - - do { - if ( ( terminalAlphabet.count ( attempt ) == 0 ) && ( nonterminalAlphabet.count ( attempt ) == 0 ) ) - return attempt; - - attempt.inc ( ); - } while ( i++ < INT_MAX ); - - throw SymbolException ( "Could not create unique symbol." ); + this->operator ++ ( ); } alphabet::Symbol symbolFrom ( int number ) { diff --git a/alib2data/src/alphabet/Symbol.h b/alib2data/src/alphabet/Symbol.h index 50b0fe07218b23ecad81198cba9d4ed6fe3ad7d3..93f1f8555b260d20629ce6be1c763b73e9ce4478 100644 --- a/alib2data/src/alphabet/Symbol.h +++ b/alib2data/src/alphabet/Symbol.h @@ -23,7 +23,6 @@ class Symbol : public alib::WrapperBase < SymbolBase > { using alib::WrapperBase < SymbolBase >::WrapperBase; public: - Symbol next ( ) const; void inc ( ); static const std::string & getXmlTagRefName() { @@ -33,15 +32,6 @@ public: } }; -/** - * Creates and adds unique state to grammar. If given state name is - * already used, appends apostrophe or integer suffix - * @param name name of the state - * @throws AutomatonException if symbol could not be created - * @return created symbol - */ -alphabet::Symbol createUniqueSymbol ( alphabet::Symbol base, const std::set < alphabet::Symbol > & terminals, const std::set < alphabet::Symbol > & nonterminals ); - alphabet::Symbol symbolFrom ( int number ); alphabet::Symbol symbolFrom ( char character ); alphabet::Symbol symbolFrom ( std::string string ); diff --git a/alib2data/src/alphabet/SymbolBase.h b/alib2data/src/alphabet/SymbolBase.h index 19d3afc794722d86cc845290c6d14e852f92f706..11b11c2f46d67d4ac07725fedbcf4834664bad07 100644 --- a/alib2data/src/alphabet/SymbolBase.h +++ b/alib2data/src/alphabet/SymbolBase.h @@ -20,7 +20,6 @@ public: virtual SymbolBase* clone() const = 0; virtual SymbolBase* plunder() && = 0; - virtual SymbolBase* next() const = 0; virtual SymbolBase* inc() && = 0; }; diff --git a/alib2data/src/alphabet/SymbolPairSymbol.cpp b/alib2data/src/alphabet/SymbolPairSymbol.cpp index 9f468814878e373df38bb1250a9ba34851311561..537b321d7b52894a3e3d12071c2e6573a2a2c396 100644 --- a/alib2data/src/alphabet/SymbolPairSymbol.cpp +++ b/alib2data/src/alphabet/SymbolPairSymbol.cpp @@ -69,10 +69,6 @@ void SymbolPairSymbol::compose(std::deque<sax::Token>& out) const { out.emplace_back(SymbolPairSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -SymbolBase* SymbolPairSymbol::next() const { - return new UniqueSymbol(Symbol(*this), primitive::Integer(0)); -} - SymbolBase* SymbolPairSymbol::inc() && { return new UniqueSymbol(Symbol(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/alphabet/SymbolPairSymbol.h b/alib2data/src/alphabet/SymbolPairSymbol.h index af1e8fc494bf273046f3607f7cd61aba2fc9cc75..9b98cdde0f8757b08129d8689abaf62438fdeb21 100644 --- a/alib2data/src/alphabet/SymbolPairSymbol.h +++ b/alib2data/src/alphabet/SymbolPairSymbol.h @@ -58,7 +58,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual SymbolBase * next ( ) const; virtual SymbolBase * inc ( ) &&; }; diff --git a/alib2data/src/alphabet/SymbolSetSymbol.cpp b/alib2data/src/alphabet/SymbolSetSymbol.cpp index e3d90fc8b112cd74eec13a0243b39182f9b24641..09538a10fef433a8ada10951d83c45a7e07940fa 100644 --- a/alib2data/src/alphabet/SymbolSetSymbol.cpp +++ b/alib2data/src/alphabet/SymbolSetSymbol.cpp @@ -73,10 +73,6 @@ void SymbolSetSymbol::compose(std::deque<sax::Token>& out) const { out.emplace_back(SymbolSetSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -SymbolBase* SymbolSetSymbol::next() const { - return new UniqueSymbol(Symbol(*this), primitive::Integer(0)); -} - SymbolBase* SymbolSetSymbol::inc() && { return new UniqueSymbol(Symbol(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/alphabet/SymbolSetSymbol.h b/alib2data/src/alphabet/SymbolSetSymbol.h index 0cb4005698832792123cc36176bdc3644e24c5b7..cee0ad9fc963d10b9969673de17ad18665005381 100644 --- a/alib2data/src/alphabet/SymbolSetSymbol.h +++ b/alib2data/src/alphabet/SymbolSetSymbol.h @@ -58,7 +58,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual SymbolBase * next ( ) const; virtual SymbolBase * inc ( ) &&; }; diff --git a/alib2data/src/alphabet/UniqueSymbol.cpp b/alib2data/src/alphabet/UniqueSymbol.cpp index 0286ea525a2fcb455994cfb04cb86e9577dd0dea..85aa4edfd0498293b03d1945ed63760380ef6e02 100644 --- a/alib2data/src/alphabet/UniqueSymbol.cpp +++ b/alib2data/src/alphabet/UniqueSymbol.cpp @@ -76,12 +76,8 @@ void UniqueSymbol::compose(std::deque<sax::Token>& out) const { out.emplace_back(UniqueSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -SymbolBase* UniqueSymbol::next() const { - return new UniqueSymbol(m_symbol, m_id.next()); -} - SymbolBase* UniqueSymbol::inc() && { - m_id.inc(); + std::move(m_id).inc(); return NULL; } diff --git a/alib2data/src/alphabet/UniqueSymbol.h b/alib2data/src/alphabet/UniqueSymbol.h index 2194b8c3966e4a6bb17172586fa5511fe3c285b4..fbd2ee13fd52247aa8a0bc5b9a72bf49878f6ae0 100644 --- a/alib2data/src/alphabet/UniqueSymbol.h +++ b/alib2data/src/alphabet/UniqueSymbol.h @@ -63,7 +63,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual SymbolBase * next ( ) const; virtual SymbolBase * inc ( ) &&; }; diff --git a/alib2data/src/alphabet/VariablesBarSymbol.cpp b/alib2data/src/alphabet/VariablesBarSymbol.cpp index 4b47037c55cca17bd96b196b8854976d6fe99c1c..f24a09228531aef67c87b88ac009e794b5746b52 100644 --- a/alib2data/src/alphabet/VariablesBarSymbol.cpp +++ b/alib2data/src/alphabet/VariablesBarSymbol.cpp @@ -53,10 +53,6 @@ void VariablesBarSymbol::compose ( std::deque < sax::Token > & out ) const { out.emplace_back ( VariablesBarSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT ); } -SymbolBase * VariablesBarSymbol::next ( ) const { - return new UniqueSymbol ( Symbol ( * this ), primitive::Integer ( 0 ) ); -} - SymbolBase * VariablesBarSymbol::inc ( ) && { return new UniqueSymbol ( Symbol ( std::move ( * this ) ), primitive::Integer ( 0 ) ); } diff --git a/alib2data/src/alphabet/VariablesBarSymbol.h b/alib2data/src/alphabet/VariablesBarSymbol.h index d09d19b43ccf68b0b9919f2374ec54c44f81b3f5..5f3d3671a2c842a251ca62edec7ff5dba848830f 100644 --- a/alib2data/src/alphabet/VariablesBarSymbol.h +++ b/alib2data/src/alphabet/VariablesBarSymbol.h @@ -54,7 +54,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual SymbolBase * next ( ) const; virtual SymbolBase * inc ( ) &&; }; diff --git a/alib2data/src/automaton/FSM/CompactNFA.h b/alib2data/src/automaton/FSM/CompactNFA.h index 3786afe47d9459100046cd5b151dfdf89be3ba7e..24f460cc6cb0fcc3f4e0b39fe9b1f172e741cb6c 100644 --- a/alib2data/src/automaton/FSM/CompactNFA.h +++ b/alib2data/src/automaton/FSM/CompactNFA.h @@ -15,6 +15,7 @@ #include <core/components.hpp> #include <sax/FromXMLParserHelper.h> +#include <common/createUnique.hpp> #include "../AutomatonBase.h" #include "../AutomatonFeatures.h" @@ -199,7 +200,7 @@ CompactNFA < SymbolType, StateType >::CompactNFA ( const EpsilonNFA < > & other } template < class SymbolType, class StateType > -CompactNFA < SymbolType, StateType >::CompactNFA ( const MultiInitialStateNFA < > & other ) : CompactNFA ( other.getStates ( ) + std::set < StateType > { label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ) }, other.getInputAlphabet ( ), label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ), other.getFinalStates ( ) ) { +CompactNFA < SymbolType, StateType >::CompactNFA ( const MultiInitialStateNFA < > & other ) : CompactNFA ( other.getStates ( ) + std::set < StateType > { common::createUnique ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ) }, other.getInputAlphabet ( ), common::createUnique ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ), other.getFinalStates ( ) ) { for ( const auto & transition : other.getTransitions ( ) ) { std::pair < StateType, std::vector < SymbolType > > key = std::make_pair ( transition.first.first, std::vector < SymbolType > { transition.first.second } ); transitions[key] = transition.second; diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.cpp b/alib2data/src/automaton/FSM/EpsilonNFA.cpp index e5c35eca426c052609ee00f609903cf35c9dc418..42c130800e7f71b224af63b7ab2d66b41da85598 100644 --- a/alib2data/src/automaton/FSM/EpsilonNFA.cpp +++ b/alib2data/src/automaton/FSM/EpsilonNFA.cpp @@ -19,7 +19,7 @@ auto epsilonNFAParserRegister2 = xmlApi < alib::Object >::ParserRegister < autom auto EpsilonNFAFromDFA = castApi::CastRegister < automaton::EpsilonNFA < >, automaton::DFA < > > ( ); auto EpsilonNFAFromNFA = castApi::CastRegister < automaton::EpsilonNFA < >, automaton::NFA < > > ( ); -// auto EpsilonNFAFromMultiInitialStateNFA = castApi::CastRegister < automaton::EpsilonNFA < >, automaton::MultiInitialStateNFA < > > ( ); TODO +auto EpsilonNFAFromMultiInitialStateNFA = castApi::CastRegister < automaton::EpsilonNFA < >, automaton::MultiInitialStateNFA < > > ( ); auto EpsilonNFACastBinder = castApi::CastPoolStringBinder < automaton::EpsilonNFA < > > ( automaton::EpsilonNFA < >::getXmlTagName() ); } /* namespace alib */ diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.h b/alib2data/src/automaton/FSM/EpsilonNFA.h index 72a18ea9b3a65ab17b5b2ba32dfdeb91b2f16244..98a82fab026c1d15b1c6aa520efd9337a6c5baf6 100644 --- a/alib2data/src/automaton/FSM/EpsilonNFA.h +++ b/alib2data/src/automaton/FSM/EpsilonNFA.h @@ -15,6 +15,7 @@ #include <sax/FromXMLParserHelper.h> #include <core/components.hpp> +#include <common/createUnique.hpp> #include "../AutomatonException.h" #include "../AutomatonBase.h" @@ -22,6 +23,8 @@ #include "../common/AutomatonFromXMLParser.h" #include "../common/AutomatonToXMLComposer.h" +#include "../../label/InitialStateLabel.h" + namespace automaton { /** @@ -41,7 +44,7 @@ protected: public: explicit EpsilonNFA ( StateType initialState ); explicit EpsilonNFA ( std::set < StateType > states, std::set < SymbolType > inputAlphabet, StateType initialState, std::set < StateType > finalStates ); -// explicit EpsilonNFA ( const MultiInitialStateNFA < > & other ); TODO + explicit EpsilonNFA ( const MultiInitialStateNFA < > & other ); explicit EpsilonNFA ( const NFA<> & other ); explicit EpsilonNFA ( const DFA<> & other ); @@ -259,18 +262,18 @@ template<class SymbolType, class EpsilonType, class StateType > EpsilonNFA < SymbolType, EpsilonType, StateType >::EpsilonNFA ( StateType initialState ) : EpsilonNFA ( std::set < StateType > { initialState }, std::set < SymbolType > { }, initialState, std::set < StateType > { } ) { } -/* TODO + template<class SymbolType, class EpsilonType, class StateType > -EpsilonNFA < SymbolType, EpsilonType, StateType >::EpsilonNFA ( const MultiInitialStateNFA < > & other ) : EpsilonNFA ( other.getStates ( ) + std::set < StateType > { label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ) }, other.getInputAlphabet ( ), label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ), other.getFinalStates ( ) ) { +EpsilonNFA < SymbolType, EpsilonType, StateType >::EpsilonNFA ( const MultiInitialStateNFA < > & other ) : EpsilonNFA ( other.getStates ( ) + std::set < StateType > { common::createUnique ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ) }, other.getInputAlphabet ( ), common::createUnique ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ), other.getFinalStates ( ) ) { for ( const auto & transition : other.getTransitions ( ) ) { std::pair < StateType, std::variant < EpsilonType, SymbolType > > key = std::make_pair ( transition.first.first, std::variant < EpsilonType, SymbolType > ( transition.first.second ) ); transitions[key] = transition.second; } - std::pair < StateType, std::variant < EpsilonType, SymbolType > > key = std::make_pair ( this->getInitialState ( ), std::variant < EpsilonType, SymbolType >::template from < EpsilonType > ( ) ); + std::pair < StateType, std::variant < EpsilonType, SymbolType > > key = std::make_pair ( getInitialState ( ), std::variant < EpsilonType, SymbolType >::template from < EpsilonType > ( ) ); transitions[key] = other.getInitialStates ( ); } -*/ + template<class SymbolType, class EpsilonType, class StateType > EpsilonNFA < SymbolType, EpsilonType, StateType >::EpsilonNFA ( const NFA <> & other ) : EpsilonNFA ( other.getStates ( ), other.getInputAlphabet ( ), other.getInitialState ( ), other.getFinalStates ( ) ) { diff --git a/alib2data/src/automaton/FSM/ExtendedNFA.h b/alib2data/src/automaton/FSM/ExtendedNFA.h index a99b3a9970a5d38ee8e560acfd12103bae4c19fa..ea66f192aa40026dcaa8bae074db5b74ce010925 100644 --- a/alib2data/src/automaton/FSM/ExtendedNFA.h +++ b/alib2data/src/automaton/FSM/ExtendedNFA.h @@ -15,6 +15,7 @@ #include <sax/FromXMLParserHelper.h> #include <core/components.hpp> +#include <common/createUnique.hpp> #include "../AutomatonException.h" #include "../AutomatonBase.h" @@ -217,7 +218,7 @@ ExtendedNFA < SymbolType, StateType >::ExtendedNFA ( const EpsilonNFA < > & othe } template<class SymbolType, class StateType > -ExtendedNFA < SymbolType, StateType >::ExtendedNFA ( const MultiInitialStateNFA < > & other ) : ExtendedNFA ( other.getStates ( ) + std::set < StateType > { label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ) }, other.getInputAlphabet ( ), label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ), other.getFinalStates ( ) ) { +ExtendedNFA < SymbolType, StateType >::ExtendedNFA ( const MultiInitialStateNFA < > & other ) : ExtendedNFA ( other.getStates ( ) + std::set < StateType > { common::createUnique ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ) }, other.getInputAlphabet ( ), common::createUnique ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ), other.getFinalStates ( ) ) { for ( const auto & transition : other.getTransitions ( ) ) { std::pair < StateType, regexp::UnboundedRegExpStructure < SymbolType > > key = std::make_pair ( transition.first.first, regexp::UnboundedRegExpStructure < SymbolType > ( regexp::UnboundedRegExpSymbol < SymbolType > ( transition.first.second ) ) ); transitions[key] = transition.second; diff --git a/alib2data/src/label/FailStateLabel.cpp b/alib2data/src/label/FailStateLabel.cpp index 16e9b80be310b13182f900645bb016601103ebf8..50567d717d5fb3594ef03dc844e5c0a46fbb32b0 100644 --- a/alib2data/src/label/FailStateLabel.cpp +++ b/alib2data/src/label/FailStateLabel.cpp @@ -52,10 +52,6 @@ void FailStateLabel::compose(std::deque<sax::Token>& out) const { out.emplace_back(FailStateLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -LabelBase* FailStateLabel::next() const { - return new UniqueLabel(Label(*this), primitive::Integer(0)); -} - LabelBase* FailStateLabel::inc() && { return new UniqueLabel(Label(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/label/FailStateLabel.h b/alib2data/src/label/FailStateLabel.h index a7acb6519d082a9d10bebdd39cc3f5d33d57fc19..e5ec06158c7b32769564eced44397de22999d6ae 100644 --- a/alib2data/src/label/FailStateLabel.h +++ b/alib2data/src/label/FailStateLabel.h @@ -53,7 +53,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual LabelBase * next ( ) const; virtual LabelBase * inc ( ) &&; }; diff --git a/alib2data/src/label/FinalStateLabel.cpp b/alib2data/src/label/FinalStateLabel.cpp index 085bc8e238bb608a224118cca845324a2943d4d3..a7e2b97032e6344045b098768607877d3618977a 100644 --- a/alib2data/src/label/FinalStateLabel.cpp +++ b/alib2data/src/label/FinalStateLabel.cpp @@ -52,10 +52,6 @@ void FinalStateLabel::compose(std::deque<sax::Token>& out) const { out.emplace_back(FinalStateLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -LabelBase* FinalStateLabel::next() const { - return new UniqueLabel(Label(*this), primitive::Integer(0)); -} - LabelBase* FinalStateLabel::inc() && { return new UniqueLabel(Label(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/label/FinalStateLabel.h b/alib2data/src/label/FinalStateLabel.h index cb2b69a17a0b87da1e19a75ec255049001eb81f0..037c26a618f56f76502bf0f62f93c2d12254ade6 100644 --- a/alib2data/src/label/FinalStateLabel.h +++ b/alib2data/src/label/FinalStateLabel.h @@ -53,7 +53,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual LabelBase * next ( ) const; virtual LabelBase * inc ( ) &&; }; diff --git a/alib2data/src/label/HexavigesimalLabel.cpp b/alib2data/src/label/HexavigesimalLabel.cpp index 2ba50c0c02579e2dfeba644429928689a8137e12..106cce5d7a735036e2952799cdd79db599cd8287 100644 --- a/alib2data/src/label/HexavigesimalLabel.cpp +++ b/alib2data/src/label/HexavigesimalLabel.cpp @@ -58,10 +58,6 @@ void HexavigesimalLabel::compose(std::deque<sax::Token>& out) const { out.emplace_back(HexavigesimalLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -LabelBase* HexavigesimalLabel::next() const { - return new HexavigesimalLabel(m_hexavigesimal + 1); -} - LabelBase* HexavigesimalLabel::inc() && { m_hexavigesimal++; return NULL; diff --git a/alib2data/src/label/HexavigesimalLabel.h b/alib2data/src/label/HexavigesimalLabel.h index f3135e7e7ba19569e4556998c826d97ec05325f7..ec2fc9efb6d31aa45506751750a5e37543f54ded 100644 --- a/alib2data/src/label/HexavigesimalLabel.h +++ b/alib2data/src/label/HexavigesimalLabel.h @@ -61,7 +61,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual LabelBase * next ( ) const; virtual LabelBase * inc ( ) &&; }; diff --git a/alib2data/src/label/InitialStateLabel.cpp b/alib2data/src/label/InitialStateLabel.cpp index 0fcf418d933393a1c2be6b011e1c53f2b3ebc568..92a5f7a75d065781836f715621530d3b5acf648e 100644 --- a/alib2data/src/label/InitialStateLabel.cpp +++ b/alib2data/src/label/InitialStateLabel.cpp @@ -52,10 +52,6 @@ void InitialStateLabel::compose(std::deque<sax::Token>& out) const { out.emplace_back(InitialStateLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -LabelBase* InitialStateLabel::next() const { - return new UniqueLabel(Label(*this), primitive::Integer(0)); -} - LabelBase* InitialStateLabel::inc() && { return new UniqueLabel(Label(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/label/InitialStateLabel.h b/alib2data/src/label/InitialStateLabel.h index d5ea7a506838224793f04261ba98fd6e2b9fb534..0db1bc89a7bc9589961caf9559a509077df8cf5c 100644 --- a/alib2data/src/label/InitialStateLabel.h +++ b/alib2data/src/label/InitialStateLabel.h @@ -53,7 +53,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual LabelBase * next ( ) const; virtual LabelBase * inc ( ) &&; }; diff --git a/alib2data/src/label/LR0ItemsLabel.cpp b/alib2data/src/label/LR0ItemsLabel.cpp index aeed4b08a8ae9884ea8b2d39127ee54aafde2c0d..971cf9b92d2d59edd06d4834733e4b8f5edc08e8 100644 --- a/alib2data/src/label/LR0ItemsLabel.cpp +++ b/alib2data/src/label/LR0ItemsLabel.cpp @@ -69,10 +69,6 @@ void LR0ItemsLabel::compose(std::deque<sax::Token>& out) const { out.emplace_back ( LR0ItemsLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT ); } -LabelBase* LR0ItemsLabel::next ( ) const { - return new UniqueLabel ( Label ( *this ), primitive::Integer ( 0 ) ); -} - LabelBase* LR0ItemsLabel::inc ( ) && { return new UniqueLabel ( Label ( std::move ( *this ) ), primitive::Integer ( 0 ) ); } diff --git a/alib2data/src/label/LR0ItemsLabel.h b/alib2data/src/label/LR0ItemsLabel.h index 78deb3994603d21b742f58af82dd6c869f639fcc..e04e7116c0e8f3efc7754095c6ab4c452fe5a32b 100644 --- a/alib2data/src/label/LR0ItemsLabel.h +++ b/alib2data/src/label/LR0ItemsLabel.h @@ -76,7 +76,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual LabelBase * next ( ) const; virtual LabelBase * inc ( ) &&; }; diff --git a/alib2data/src/label/Label.cpp b/alib2data/src/label/Label.cpp index 9c4b29bd6c0b96da03db3f6bd7dab01072611966..50a597a393d46b23b792c75ba62ee98e9c113604 100644 --- a/alib2data/src/label/Label.cpp +++ b/alib2data/src/label/Label.cpp @@ -10,34 +10,11 @@ #include "LabelPairLabel.h" #include <primitive/Primitive.h> #include <core/xmlApi.hpp> -#include <exception/CommonException.h> -#include <climits> namespace label { -Label Label::next ( ) const { - return Label ( this->getData ( ).next ( ) ); -} - void Label::inc ( ) { - LabelBase * res = std::move ( this->getData ( ) ).inc ( ); - - if ( res == NULL ) return; - - this->setData ( res ); -} - -label::Label createUniqueLabel ( label::Label nextState, const std::set < label::Label > & other ) { - int i = 0; - - do { - if ( other.count ( nextState ) == 0 ) - return nextState; - - nextState.inc ( ); - } while ( i++ < INT_MAX ); - - throw exception::CommonException ( "Could not create unique label." ); + this->operator ++ (); } label::Label labelFrom ( int number ) { diff --git a/alib2data/src/label/Label.h b/alib2data/src/label/Label.h index 7897fa6679feb6453e69c2fc8f232ff97bbd1ef0..65e19cc719d2f5422f5195f1d6afe83aa38e2c9c 100644 --- a/alib2data/src/label/Label.h +++ b/alib2data/src/label/Label.h @@ -22,7 +22,6 @@ class Label : public alib::WrapperBase < LabelBase > { using alib::WrapperBase < LabelBase >::WrapperBase; public: - Label next ( ) const; void inc ( ); static const std::string & getXmlTagRefName() { @@ -32,8 +31,6 @@ public: } }; -label::Label createUniqueLabel ( label::Label base, const std::set < label::Label > & other ); - label::Label labelFrom ( label::Label label1, label::Label label2 ); label::Label labelFrom ( int number ); label::Label labelFrom ( int number1, int number2 ); diff --git a/alib2data/src/label/LabelBase.h b/alib2data/src/label/LabelBase.h index 4e301f90fe146962ec8a54e2cad17076dcafd5ac..9acd07d6b74f3504ee168360d0f1abe91511ee6a 100644 --- a/alib2data/src/label/LabelBase.h +++ b/alib2data/src/label/LabelBase.h @@ -20,7 +20,6 @@ public: virtual LabelBase* clone() const = 0; virtual LabelBase* plunder() && = 0; - virtual LabelBase* next() const = 0; virtual LabelBase* inc() && = 0; }; diff --git a/alib2data/src/label/LabelPairLabel.cpp b/alib2data/src/label/LabelPairLabel.cpp index 21fe6068b983dbff765bb694df500acdc49a0f7f..4b1a0c1a6034295c9f56ca811f5f8aeea96bf41d 100644 --- a/alib2data/src/label/LabelPairLabel.cpp +++ b/alib2data/src/label/LabelPairLabel.cpp @@ -69,10 +69,6 @@ void LabelPairLabel::compose(std::deque<sax::Token>& out) const { out.emplace_back(LabelPairLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -LabelBase* LabelPairLabel::next() const { - return new UniqueLabel(Label(*this), primitive::Integer(0)); -} - LabelBase* LabelPairLabel::inc() && { return new UniqueLabel(Label(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/label/LabelPairLabel.h b/alib2data/src/label/LabelPairLabel.h index e57d94b9ae0cb6f2426ada54322efb0db5d0e0e0..a7eb054078d22260c211522661f6c7a48405e675 100644 --- a/alib2data/src/label/LabelPairLabel.h +++ b/alib2data/src/label/LabelPairLabel.h @@ -58,7 +58,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual LabelBase * next ( ) const; virtual LabelBase * inc ( ) &&; }; diff --git a/alib2data/src/label/LabelSetLabel.cpp b/alib2data/src/label/LabelSetLabel.cpp index b42840dbf4a5300c233f624ae55bf9f09e0b04f4..69976e3708e1017959d4c2652d707b286288dfab 100644 --- a/alib2data/src/label/LabelSetLabel.cpp +++ b/alib2data/src/label/LabelSetLabel.cpp @@ -74,10 +74,6 @@ void LabelSetLabel::compose(std::deque<sax::Token>& out) const { out.emplace_back(LabelSetLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -LabelBase* LabelSetLabel::next() const { - return new UniqueLabel(Label(*this), primitive::Integer(0)); -} - LabelBase* LabelSetLabel::inc() && { return new UniqueLabel(Label(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/label/LabelSetLabel.h b/alib2data/src/label/LabelSetLabel.h index 4fe385513dc1a21f0009aaea814092d754abc210..3f6a3d11096fe36a6f69a2174fa61c4163373345 100644 --- a/alib2data/src/label/LabelSetLabel.h +++ b/alib2data/src/label/LabelSetLabel.h @@ -58,7 +58,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual LabelBase * next ( ) const; virtual LabelBase * inc ( ) &&; }; diff --git a/alib2data/src/label/ObjectLabel.cpp b/alib2data/src/label/ObjectLabel.cpp index bbdfbb518a486e54e62c9f72443f2c0fa1b8d8b8..67de15198dd918d03591aec4dfd64df214311652 100644 --- a/alib2data/src/label/ObjectLabel.cpp +++ b/alib2data/src/label/ObjectLabel.cpp @@ -55,10 +55,6 @@ void ObjectLabel::compose(std::deque<sax::Token>& out) const { out.emplace_back(ObjectLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -LabelBase* ObjectLabel::next() const { - return new UniqueLabel(Label(*this), primitive::Integer(0)); -} - LabelBase* ObjectLabel::inc() && { return new UniqueLabel(Label(std::move(*this)), primitive::Integer(0)); } diff --git a/alib2data/src/label/ObjectLabel.h b/alib2data/src/label/ObjectLabel.h index ffc449de3e59e57bec20b6ef5c45cae7c5c8b7c9..0ef6fe33913b92b696cd3098d010de6e452600d0 100644 --- a/alib2data/src/label/ObjectLabel.h +++ b/alib2data/src/label/ObjectLabel.h @@ -59,7 +59,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual LabelBase * next ( ) const; virtual LabelBase * inc ( ) &&; }; diff --git a/alib2data/src/label/PrimitiveLabel.cpp b/alib2data/src/label/PrimitiveLabel.cpp index da424a14d84bc479b35a65d10db01b2b4cbf5dc9..281e544ee173319acdfaf07677082a423bba6519 100644 --- a/alib2data/src/label/PrimitiveLabel.cpp +++ b/alib2data/src/label/PrimitiveLabel.cpp @@ -59,10 +59,6 @@ void PrimitiveLabel::compose(std::deque<sax::Token>& out) const { out.emplace_back(PrimitiveLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -LabelBase* PrimitiveLabel::next() const { - return new PrimitiveLabel(m_primitive.next()); -} - LabelBase* PrimitiveLabel::inc() && { m_primitive.inc(); return NULL; diff --git a/alib2data/src/label/PrimitiveLabel.h b/alib2data/src/label/PrimitiveLabel.h index 889abfda31bf064c1c10d08661521336e4f8fdfc..cc84f9b888e63106f793acbb4171379ef37c689d 100644 --- a/alib2data/src/label/PrimitiveLabel.h +++ b/alib2data/src/label/PrimitiveLabel.h @@ -61,7 +61,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual LabelBase * next ( ) const; virtual LabelBase * inc ( ) &&; }; diff --git a/alib2data/src/label/UniqueLabel.cpp b/alib2data/src/label/UniqueLabel.cpp index 5e5a82834ce2756a381a056de93492e8117808de..6839764cb77ce7a4a92067dbcc178b91400cdf2c 100644 --- a/alib2data/src/label/UniqueLabel.cpp +++ b/alib2data/src/label/UniqueLabel.cpp @@ -76,12 +76,8 @@ void UniqueLabel::compose(std::deque<sax::Token>& out) const { out.emplace_back(UniqueLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } -LabelBase* UniqueLabel::next() const { - return new UniqueLabel(m_label, m_id.next()); -} - LabelBase* UniqueLabel::inc() && { - m_id.inc(); + std::move(m_id).inc(); return NULL; } diff --git a/alib2data/src/label/UniqueLabel.h b/alib2data/src/label/UniqueLabel.h index 63cd3e77994d3989e5e12a21aa12b196c6aa0728..b24fd45678f45cd994a874c83d73be638ac4d972 100644 --- a/alib2data/src/label/UniqueLabel.h +++ b/alib2data/src/label/UniqueLabel.h @@ -63,7 +63,6 @@ public: void compose ( std::deque < sax::Token > & out ) const; - virtual LabelBase * next ( ) const; virtual LabelBase * inc ( ) &&; };