From 6ceec458dc82cb51d9c41226b555e82cd3df6fae Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Mon, 25 Aug 2014 15:59:31 +0200 Subject: [PATCH] LinearString in CompactFSM --- .../src/automaton/AutomatonFromXMLParser.cpp | 6 ++-- .../src/automaton/AutomatonFromXMLParser.h | 2 +- .../src/automaton/AutomatonToXMLComposer.cpp | 4 +-- .../src/automaton/AutomatonToXMLComposer.h | 2 +- alib2data/src/automaton/FSM/CompactNFA.cpp | 30 +++++++++---------- alib2data/src/automaton/FSM/CompactNFA.h | 12 ++++---- 6 files changed, 28 insertions(+), 28 deletions(-) diff --git a/alib2data/src/automaton/AutomatonFromXMLParser.cpp b/alib2data/src/automaton/AutomatonFromXMLParser.cpp index e139fe8c12..4d04ffa462 100644 --- a/alib2data/src/automaton/AutomatonFromXMLParser.cpp +++ b/alib2data/src/automaton/AutomatonFromXMLParser.cpp @@ -394,7 +394,7 @@ void AutomatonFromXMLParser::parseTransition(std::list<sax::Token>& input, Epsil void AutomatonFromXMLParser::parseTransition(std::list<sax::Token>& input, CompactNFA& automaton) const { State from = parseTransitionFrom(input); - string::String inputString = parseTransitionInputString(input); + string::LinearString inputString = parseTransitionInputString(input); State to = parseTransitionTo(input); automaton.addTransition(from, inputString, to); @@ -570,9 +570,9 @@ std::variant<string::Epsilon, alphabet::Symbol> AutomatonFromXMLParser::parseTra } } -string::String AutomatonFromXMLParser::parseTransitionInputString(std::list<sax::Token>& input) const { +string::LinearString AutomatonFromXMLParser::parseTransitionInputString(std::list<sax::Token>& input) const { popToken(input, sax::Token::TokenType::START_ELEMENT, "input"); - string::String result(alib::api<string::String>::parse(input)); + string::LinearString result(alib::api<string::LinearString>::parse(input)); popToken(input, sax::Token::TokenType::END_ELEMENT, "input"); return result; } diff --git a/alib2data/src/automaton/AutomatonFromXMLParser.h b/alib2data/src/automaton/AutomatonFromXMLParser.h index 58416fefb5..ef49696ae5 100644 --- a/alib2data/src/automaton/AutomatonFromXMLParser.h +++ b/alib2data/src/automaton/AutomatonFromXMLParser.h @@ -72,7 +72,7 @@ class AutomatonFromXMLParser : public sax::FromXMLParserHelper { alphabet::Symbol parseTransitionInputSymbol(std::list<sax::Token> &input) const; std::variant<string::Epsilon, alphabet::Symbol> parseTransitionInputEpsilonSymbol(std::list<sax::Token> &input) const; std::variant<string::Epsilon, alphabet::Symbol> parseTransitionInputBlankEpsilonSymbol(std::list<sax::Token> &input) const; - string::String parseTransitionInputString(std::list<sax::Token> &input) const; + string::LinearString parseTransitionInputString(std::list<sax::Token> &input) const; regexp::RegExp parseTransitionInputRegexp(std::list<sax::Token> &input) const; alphabet::Symbol parseTransitionOutputSymbol(std::list<sax::Token> &input) const; diff --git a/alib2data/src/automaton/AutomatonToXMLComposer.cpp b/alib2data/src/automaton/AutomatonToXMLComposer.cpp index dc493a25de..6c8537d5d8 100644 --- a/alib2data/src/automaton/AutomatonToXMLComposer.cpp +++ b/alib2data/src/automaton/AutomatonToXMLComposer.cpp @@ -331,9 +331,9 @@ void AutomatonToXMLComposer::composeTransitionOutputEpsilonSymbol(std::list<sax: out.push_back(sax::Token("output", sax::Token::TokenType::END_ELEMENT)); } -void AutomatonToXMLComposer::composeTransitionInputString(std::list<sax::Token>& out, const string::String& string) const { +void AutomatonToXMLComposer::composeTransitionInputString(std::list<sax::Token>& out, const string::LinearString& string) const { out.push_back(sax::Token("input", sax::Token::TokenType::START_ELEMENT)); - out.splice(out.end(), alib::api<string::String>::compose(string)); + out.splice(out.end(), alib::api<string::LinearString>::compose(string)); out.push_back(sax::Token("input", sax::Token::TokenType::END_ELEMENT)); } diff --git a/alib2data/src/automaton/AutomatonToXMLComposer.h b/alib2data/src/automaton/AutomatonToXMLComposer.h index 6a5cd16aee..729b97dcaa 100644 --- a/alib2data/src/automaton/AutomatonToXMLComposer.h +++ b/alib2data/src/automaton/AutomatonToXMLComposer.h @@ -66,7 +66,7 @@ class AutomatonToXMLComposer { void composeTransitionInputEpsilonSymbol(std::list<sax::Token>&, const std::variant<string::Epsilon, alphabet::Symbol>&) const; void composeTransitionOutputSymbol(std::list<sax::Token>&, const alphabet::Symbol& symbol) const; void composeTransitionOutputEpsilonSymbol(std::list<sax::Token>&, const std::variant<string::Epsilon, alphabet::Symbol>&) const; - void composeTransitionInputString(std::list<sax::Token>&, const string::String& string) const; + void composeTransitionInputString(std::list<sax::Token>&, const string::LinearString& string) const; void composeTransitionInputRegexp(std::list<sax::Token>&, const regexp::RegExp& regexp) const; /** diff --git a/alib2data/src/automaton/FSM/CompactNFA.cpp b/alib2data/src/automaton/FSM/CompactNFA.cpp index 3acec8095c..961df1e191 100644 --- a/alib2data/src/automaton/FSM/CompactNFA.cpp +++ b/alib2data/src/automaton/FSM/CompactNFA.cpp @@ -32,7 +32,7 @@ bool CompactNFA::removeState(const State& state) { throw AutomatonException("State \"" + (std::string) state.getName() + "\" is final state."); } - for (std::map<std::pair<State, string::String>, std::set<State> >::const_iterator t = transitions.begin(); t != transitions.end(); t++) { + for (std::map<std::pair<State, string::LinearString>, std::set<State> >::const_iterator t = transitions.begin(); t != transitions.end(); t++) { if (t->first.first == state || t->second.find(state) != t->second.end()) throw AutomatonException("State \"" + (std::string) state.getName() + "\" is used in transition."); } @@ -41,21 +41,21 @@ bool CompactNFA::removeState(const State& state) { } bool CompactNFA::removeInputSymbol(const alphabet::Symbol& symbol) { - for (std::map<std::pair<State, string::String>, std::set<State> >::const_iterator transition = transitions.begin(); transition != transitions.end(); + for (std::map<std::pair<State, string::LinearString>, std::set<State> >::const_iterator transition = transitions.begin(); transition != transitions.end(); transition++) { - if (string::StringAlphabetGetter::STRING_ALPHABET_GETTER.getAlphabet(transition->first.second).count(symbol) == 1) + if (transition->first.second.getAlphabet().count(symbol) == 1) throw AutomatonException("Input symbol \"" + (std::string) symbol + "\" is used."); } return inputAlphabet.erase(symbol); } -bool CompactNFA::addTransition(const State& from, const string::String& input, const State& to) { +bool CompactNFA::addTransition(const State& from, const string::LinearString& input, const State& to) { if (states.find(from) == states.end()) throw AutomatonException("State \"" + (std::string) from.getName() + "\" doesn't exist."); std::set<alphabet::Symbol> inputStringAlphabetDiff; - std::set<alphabet::Symbol> inputStringAlphabet = string::StringAlphabetGetter::STRING_ALPHABET_GETTER.getAlphabet(input); + std::set<alphabet::Symbol> inputStringAlphabet = input.getAlphabet(); std::set_difference(inputAlphabet.begin(), inputAlphabet.end(), inputStringAlphabet.begin(), inputStringAlphabet.end(), std::inserter(inputStringAlphabetDiff, inputStringAlphabetDiff.end())); if (inputStringAlphabetDiff.size() != 0) @@ -64,27 +64,27 @@ bool CompactNFA::addTransition(const State& from, const string::String& input, c if (states.find(to) == states.end()) throw AutomatonException("State \"" + (std::string) to.getName() + "\" doesn't exist."); - std::pair<State, string::String> key = std::make_pair(from, input); + std::pair<State, string::LinearString> key = std::make_pair(from, input); return transitions[key].insert(to).second; } -bool CompactNFA::removeTransition(const State& from, const string::String& input, const State& to) { - std::pair<State, string::String> key = std::make_pair(from, input); +bool CompactNFA::removeTransition(const State& from, const string::LinearString& input, const State& to) { + std::pair<State, string::LinearString> key = std::make_pair(from, input); return transitions[key].erase(to); } -const std::map<std::pair<State, string::String>, std::set<State>>& CompactNFA::getTransitions() const { +const std::map<std::pair<State, string::LinearString>, std::set<State>>& CompactNFA::getTransitions() const { return transitions; } -std::map<std::pair<State, string::String>, std::set<State>> CompactNFA::getTransitionsFromState(const State& from) const { +std::map<std::pair<State, string::LinearString>, std::set<State>> CompactNFA::getTransitionsFromState(const State& from) const { if( states.find(from) == states.end()) throw AutomatonException("State \"" + (std::string) from.getName() + "\" doesn't exist"); - std::map<std::pair<State, string::String>, std::set<State>> transitionsFromState; - for (std::map<std::pair<State, string::String>, std::set<State>>::const_iterator transition = transitions.begin(); transition != transitions.end(); + std::map<std::pair<State, string::LinearString>, std::set<State>> transitionsFromState; + for (std::map<std::pair<State, string::LinearString>, std::set<State>>::const_iterator transition = transitions.begin(); transition != transitions.end(); transition++) { if (transition->first.first == from) { transitionsFromState.insert(make_pair(transition->first, transition->second)); @@ -94,12 +94,12 @@ std::map<std::pair<State, string::String>, std::set<State>> CompactNFA::getTrans return transitionsFromState; } -std::map<std::pair<State, string::String>, std::set<State>> CompactNFA::getTransitionsToState(const State& to) const { +std::map<std::pair<State, string::LinearString>, std::set<State>> CompactNFA::getTransitionsToState(const State& to) const { if( states.find(to) == states.end()) throw AutomatonException("State \"" + (std::string) to.getName() + "\" doesn't exist"); - std::map<std::pair<State, string::String>, std::set<State>> transitionsToState; - for (std::map<std::pair<State, string::String>, std::set<State>>::const_iterator transition = transitions.begin(); transition != transitions.end(); + std::map<std::pair<State, string::LinearString>, std::set<State>> transitionsToState; + for (std::map<std::pair<State, string::LinearString>, std::set<State>>::const_iterator transition = transitions.begin(); transition != transitions.end(); transition++) { if (transition->second.find(to) != transition->second.end()) { transitionsToState.insert(make_pair(transition->first, transition->second)); diff --git a/alib2data/src/automaton/FSM/CompactNFA.h b/alib2data/src/automaton/FSM/CompactNFA.h index 12681a0a1b..80a5069763 100644 --- a/alib2data/src/automaton/FSM/CompactNFA.h +++ b/alib2data/src/automaton/FSM/CompactNFA.h @@ -22,7 +22,7 @@ namespace automaton { */ class CompactNFA : public std::acceptor<CompactNFA, VisitableAutomatonBase, std::acceptor<CompactNFA, alib::VisitableObjectBase, AutomatonBase> >, public MultiInitialStates, public InputAlphabet { protected: - std::map<std::pair<State, string::String>, std::set<State> > transitions; //TODO LinearString + std::map<std::pair<State, string::LinearString>, std::set<State> > transitions; public: virtual AutomatonBase* clone() const; @@ -46,29 +46,29 @@ public: * @param next next state * @throws AutomatonException when transition already exists or when transition contains state or symbol not present in the automaton */ - bool addTransition(const State& current, const string::String& input, const State& next); + bool addTransition(const State& current, const string::LinearString& input, const State& next); /** * Removes transition from the automaton. * @param transition transition to remove * @throws AutomatonException when transition doesn't exists. */ - bool removeTransition(const State& current, const string::String& input, const State& next); + bool removeTransition(const State& current, const string::LinearString& input, const State& next); /** * @return automaton transitions */ - const std::map<std::pair<State, string::String>, std::set<State>>& getTransitions() const; + const std::map<std::pair<State, string::LinearString>, std::set<State>>& getTransitions() const; /** * @return automaton transitions from state */ - std::map<std::pair<State, string::String>, std::set<State>> getTransitionsFromState(const State& from) const; + std::map<std::pair<State, string::LinearString>, std::set<State>> getTransitionsFromState(const State& from) const; /** * @return automaton transitions to state */ - std::map<std::pair<State, string::String>, std::set<State>> getTransitionsToState(const State& from) const; + std::map<std::pair<State, string::LinearString>, std::set<State>> getTransitionsToState(const State& from) const; virtual bool operator<(const alib::ObjectBase& other) const; virtual bool operator==(const alib::ObjectBase& other) const; -- GitLab