From e908bf1eda9a4a519123307692276cf2a497c7ff Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Sun, 13 Nov 2016 21:23:46 +0100 Subject: [PATCH] use new createUnique approach --- .../src/automaton/convert/ToGrammarLeftRG.cpp | 5 ++-- .../automaton/convert/ToGrammarRightRG.cpp | 5 ++-- .../convert/ToRegExpStateElimination.cpp | 6 +++-- alib2algo/src/automaton/simplify/Total.cpp | 5 ++-- .../AutomataUnionEpsilonTransition.cpp | 7 +++--- .../transform/AutomatonIteration.cpp | 5 ++-- .../AutomatonIterationEpsilonTransition.cpp | 3 ++- .../src/automaton/transform/PDAToRHPDA.cpp | 17 +++++++------ alib2algo/src/grammar/convert/ToAutomaton.cpp | 6 +++-- .../src/grammar/convert/ToGrammarLeftRG.cpp | 3 ++- .../src/grammar/convert/ToGrammarRightRG.cpp | 3 ++- .../grammar/parsing/AbsorbTerminalSymbol.cpp | 3 ++- alib2algo/src/grammar/parsing/LRParser.cpp | 5 ++-- .../src/grammar/parsing/LeftFactorize.cpp | 3 ++- .../grammar/simplify/LeftRecursionRemover.cpp | 3 ++- alib2algo/src/grammar/simplify/ToCNF.cpp | 9 ++++--- alib2algo/src/grammar/simplify/ToGNF.cpp | 3 ++- .../convert/ToGrammarRightRGDerivation.cpp | 3 ++- .../grammar/parsing/AbsorbTerminalSymbol.cpp | 8 +++--- .../parsing/HandleFirstFollowConflict.cpp | 6 ++--- .../GrammarLeftRecursionRemoverTest.cpp | 9 ++++--- .../grammar/simplify/GrammarToGNFTest.cpp | 21 ++++++++-------- alib2common/src/base/WrapperBase.hpp | 10 ++++++++ alib2common/src/primitive/Bool.cpp | 7 ++---- alib2common/src/primitive/Bool.h | 3 +-- alib2common/src/primitive/Character.cpp | 7 ++---- alib2common/src/primitive/Character.h | 3 +-- alib2common/src/primitive/Integer.cpp | 7 ++---- alib2common/src/primitive/Integer.h | 3 +-- alib2common/src/primitive/Primitive.cpp | 9 +------ alib2common/src/primitive/Primitive.h | 1 - alib2common/src/primitive/PrimitiveBase.h | 2 +- alib2common/src/primitive/String.cpp | 7 ++---- alib2common/src/primitive/String.h | 3 +-- alib2common/src/primitive/Unsigned.cpp | 7 ++---- alib2common/src/primitive/Unsigned.h | 3 +-- alib2data/src/alphabet/BarSymbol.cpp | 4 --- alib2data/src/alphabet/BarSymbol.h | 1 - alib2data/src/alphabet/BlankSymbol.cpp | 4 --- alib2data/src/alphabet/BlankSymbol.h | 1 - .../src/alphabet/BottomOfTheStackSymbol.cpp | 4 --- .../src/alphabet/BottomOfTheStackSymbol.h | 1 - alib2data/src/alphabet/EndSymbol.cpp | 4 --- alib2data/src/alphabet/EndSymbol.h | 1 - alib2data/src/alphabet/LabeledSymbol.cpp | 4 --- alib2data/src/alphabet/LabeledSymbol.h | 1 - .../src/alphabet/NonlinearVariableSymbol.cpp | 4 --- .../src/alphabet/NonlinearVariableSymbol.h | 1 - alib2data/src/alphabet/RankedSymbol.h | 6 ----- alib2data/src/alphabet/StartSymbol.cpp | 4 --- alib2data/src/alphabet/StartSymbol.h | 1 - .../src/alphabet/SubtreeWildcardSymbol.cpp | 4 --- .../src/alphabet/SubtreeWildcardSymbol.h | 1 - alib2data/src/alphabet/Symbol.cpp | 25 +------------------ alib2data/src/alphabet/Symbol.h | 10 -------- alib2data/src/alphabet/SymbolBase.h | 1 - alib2data/src/alphabet/SymbolPairSymbol.cpp | 4 --- alib2data/src/alphabet/SymbolPairSymbol.h | 1 - alib2data/src/alphabet/SymbolSetSymbol.cpp | 4 --- alib2data/src/alphabet/SymbolSetSymbol.h | 1 - alib2data/src/alphabet/UniqueSymbol.cpp | 6 +---- alib2data/src/alphabet/UniqueSymbol.h | 1 - alib2data/src/alphabet/VariablesBarSymbol.cpp | 4 --- alib2data/src/alphabet/VariablesBarSymbol.h | 1 - alib2data/src/automaton/FSM/CompactNFA.h | 3 ++- alib2data/src/automaton/FSM/EpsilonNFA.cpp | 2 +- alib2data/src/automaton/FSM/EpsilonNFA.h | 13 ++++++---- alib2data/src/automaton/FSM/ExtendedNFA.h | 3 ++- alib2data/src/label/FailStateLabel.cpp | 4 --- alib2data/src/label/FailStateLabel.h | 1 - alib2data/src/label/FinalStateLabel.cpp | 4 --- alib2data/src/label/FinalStateLabel.h | 1 - alib2data/src/label/HexavigesimalLabel.cpp | 4 --- alib2data/src/label/HexavigesimalLabel.h | 1 - alib2data/src/label/InitialStateLabel.cpp | 4 --- alib2data/src/label/InitialStateLabel.h | 1 - alib2data/src/label/LR0ItemsLabel.cpp | 4 --- alib2data/src/label/LR0ItemsLabel.h | 1 - alib2data/src/label/Label.cpp | 25 +------------------ alib2data/src/label/Label.h | 3 --- alib2data/src/label/LabelBase.h | 1 - alib2data/src/label/LabelPairLabel.cpp | 4 --- alib2data/src/label/LabelPairLabel.h | 1 - alib2data/src/label/LabelSetLabel.cpp | 4 --- alib2data/src/label/LabelSetLabel.h | 1 - alib2data/src/label/ObjectLabel.cpp | 4 --- alib2data/src/label/ObjectLabel.h | 1 - alib2data/src/label/PrimitiveLabel.cpp | 4 --- alib2data/src/label/PrimitiveLabel.h | 1 - alib2data/src/label/UniqueLabel.cpp | 6 +---- alib2data/src/label/UniqueLabel.h | 1 - 91 files changed, 124 insertions(+), 292 deletions(-) diff --git a/alib2algo/src/automaton/convert/ToGrammarLeftRG.cpp b/alib2algo/src/automaton/convert/ToGrammarLeftRG.cpp index 87a5f55bfb..ab9278fd56 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 a8ea9e281e..5f16e6f98d 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 17b6d64bf7..240a20ad24 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 a0cf558eea..99c8ac5fa9 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 b636b0e4f8..e4f8c7b6da 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 704657ba66..b298142286 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 d73327dcce..c0a49d1f1b 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 a573c8a76a..008e876c99 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 e4e8da96a9..e1c7aab5be 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 ced00f9e09..3b7659b4a2 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 74a132e8d0..d7c9b0e10d 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 85788374b5..c7449c555a 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 66a34c7ad6..7f2e02fd94 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 a802810ea5..0016f1a2ef 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 ce92b6aeae..dea34db7fa 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 c6bc18486f..2d88f8c92a 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 a1d6c5e027..2612150f25 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 02c716c4d6..6c771f85f1 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 5857ccda28..7de89773ec 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 a5916eb856..559e16a390 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 f2d52b932c..445aa9a5c3 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 50ef9c98ba..9a6a25e903 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 af3d469d68..5384672094 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 7075c1b5b9..067301de95 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 eae50fff10..6b10404bd2 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 dd6cc85cb9..3c43143269 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 c80ed46cb2..1ff9d4a451 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 ae9b0013e8..03dce0f6c5 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 6ad4fec405..55a0f641aa 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 a87b35dd4d..bee63bbfd1 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 8f3c61d797..4bb0971e19 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 ae47adac52..a7bd39c2ec 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 c70588f88b..38d18e52a8 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 371fc901e3..6be80b664e 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 d4b899c5b0..487e96fb31 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 627e54cd17..d8a718007d 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 1575208790..f9d267a094 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 684ecd1cc0..f01113bc6e 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 595820943f..e250d84a12 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 102eec43e8..d3e9540b47 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 761a90eb40..8b54944099 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 a745d7e366..9eda130ede 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 db2ccb5ebf..9879d7cd59 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 428628553c..d2b77c40ff 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 dde8bf7d73..121690acd9 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 bdefe486dd..0e209446bb 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 7315b0d968..0553135e53 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 abf2125fc4..4a5a35c149 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 282234ac40..dae75a6675 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 0b7a2f0474..28668e3a3f 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 4b1d2b99c1..3a322d3c8e 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 c624215c6b..b374d47678 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 e13bafcab1..e820c63341 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 44ef696abc..a9453bcde0 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 50b0fe0721..93f1f8555b 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 19d3afc794..11b11c2f46 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 9f46881487..537b321d7b 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 af1e8fc494..9b98cdde0f 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 e3d90fc8b1..09538a10fe 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 0cb4005698..cee0ad9fc9 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 0286ea525a..85aa4edfd0 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 2194b8c396..fbd2ee13fd 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 4b47037c55..f24a092285 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 d09d19b43c..5f3d3671a2 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 3786afe47d..24f460cc6c 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 e5c35eca42..42c130800e 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 72a18ea9b3..98a82fab02 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 a99b3a9970..ea66f192aa 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 16e9b80be3..50567d717d 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 a7acb6519d..e5ec06158c 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 085bc8e238..a7e2b97032 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 cb2b69a17a..037c26a618 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 2ba50c0c02..106cce5d7a 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 f3135e7e7b..ec2fc9efb6 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 0fcf418d93..92a5f7a75d 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 d5ea7a5068..0db1bc89a7 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 aeed4b08a8..971cf9b92d 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 78deb39946..e04e7116c0 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 9c4b29bd6c..50a597a393 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 7897fa6679..65e19cc719 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 4e301f90fe..9acd07d6b7 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 21fe6068b9..4b1a0c1a60 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 e57d94b9ae..a7eb054078 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 b42840dbf4..69976e3708 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 4fe385513d..3f6a3d1109 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 bbdfbb518a..67de15198d 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 ffc449de3e..0ef6fe3391 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 da424a14d8..281e544ee1 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 889abfda31..cc84f9b888 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 5e5a82834c..6839764cb7 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 63cd3e7799..b24fd45678 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 ( ) &&; }; -- GitLab