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