Skip to content
Snippets Groups Projects
Commit 20c8fa05 authored by Jan Trávníček's avatar Jan Trávníček
Browse files

simplify operators

parent d5cacaf3
No related branches found
No related tags found
No related merge requests found
...@@ -194,6 +194,9 @@ bool UnknownAutomaton::operator>(const AutomatonBase& other) const { ...@@ -194,6 +194,9 @@ bool UnknownAutomaton::operator>(const AutomatonBase& other) const {
} }
   
bool UnknownAutomaton::operator==(const UnknownAutomaton& other) const { bool UnknownAutomaton::operator==(const UnknownAutomaton& other) const {
std::pointer<alphabet::Symbol> blankSymbolPointer(blankSymbol);
std::pointer<alphabet::Symbol> otherBlankSymbolPointer(other.blankSymbol);
return states == other.states return states == other.states
&& inputAlphabet == other.inputAlphabet && inputAlphabet == other.inputAlphabet
&& initialStates == other.initialStates && initialStates == other.initialStates
...@@ -201,7 +204,7 @@ bool UnknownAutomaton::operator==(const UnknownAutomaton& other) const { ...@@ -201,7 +204,7 @@ bool UnknownAutomaton::operator==(const UnknownAutomaton& other) const {
&& stackAlphabet == other.stackAlphabet && stackAlphabet == other.stackAlphabet
&& initialSymbols == other.initialSymbols && initialSymbols == other.initialSymbols
&& tapeAlphabet == other.tapeAlphabet && tapeAlphabet == other.tapeAlphabet
&& (blankSymbol == other.blankSymbol || (blankSymbol != NULL && other.blankSymbol != NULL && *blankSymbol == *other.blankSymbol)) && blankSymbolPointer == otherBlankSymbolPointer
&& transitions == other.transitions; && transitions == other.transitions;
} }
   
...@@ -213,6 +216,8 @@ bool UnknownAutomaton::operator<(const UnknownAutomaton& other) const { ...@@ -213,6 +216,8 @@ bool UnknownAutomaton::operator<(const UnknownAutomaton& other) const {
} }
   
void UnknownAutomaton::operator>>(std::ostream& out) const { void UnknownAutomaton::operator>>(std::ostream& out) const {
std::pointer<alphabet::Symbol> blankSymbolPointer(blankSymbol);
out << "(UnknownAutomaton" out << "(UnknownAutomaton"
<< " states = " << states << " states = " << states
<< " inputAlphabet = " << inputAlphabet << " inputAlphabet = " << inputAlphabet
...@@ -221,9 +226,8 @@ void UnknownAutomaton::operator>>(std::ostream& out) const { ...@@ -221,9 +226,8 @@ void UnknownAutomaton::operator>>(std::ostream& out) const {
<< " stackAlphabet = " << stackAlphabet << " stackAlphabet = " << stackAlphabet
<< " initialSymbols = " << initialSymbols << " initialSymbols = " << initialSymbols
<< " tapeAlphabet = " << tapeAlphabet << " tapeAlphabet = " << tapeAlphabet
<< " blankSymbol = "; << " blankSymbol = " << blankSymbolPointer
if(blankSymbol == NULL) out << "NULL"; else out << *blankSymbol; << " transitions = " << transitions
out << " transitions = " << transitions
<< ")"; << ")";
} }
   
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
   
#include "UnknownTransition.h" #include "UnknownTransition.h"
#include "../std/vector.hpp" #include "../std/vector.hpp"
#include "../std/pointer.hpp"
   
namespace automaton { namespace automaton {
   
...@@ -128,39 +129,35 @@ void UnknownTransition::setShift(const Shift& shift) { ...@@ -128,39 +129,35 @@ void UnknownTransition::setShift(const Shift& shift) {
} }
   
bool UnknownTransition::operator <(const UnknownTransition& other) const { bool UnknownTransition::operator <(const UnknownTransition& other) const {
if (from != other.from && from != NULL && other.from != NULL && *from != *other.from) { std::pointer<automaton::State> fromPointer(from);
if(from == NULL) return -1; std::pointer<automaton::State> otherFromPointer(other.from);
else if(other.from == NULL) return 1;
else return *from < *other.from; std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> inputPointer(input);
} else if (input != other.input && input != NULL && other.input != NULL && *input != *other.input) { std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> otherInputPointer(other.input);
if(input == NULL) return -1;
else if(other.input == NULL) return 1; std::pointer<automaton::State> toPointer(to);
else return *input < *other.input; std::pointer<automaton::State> otherToPointer(other.to);
} else if (pop != other.pop) {
return pop < other.pop; std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> outputPointer(output);
} else if (shift != other.shift) { std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> otherOutputPointer(other.output);
return shift < other.shift;
} else if (to != other.to && to != NULL && other.to != NULL && *to != *other.to) { return std::tie(fromPointer, inputPointer, pop, shift, toPointer, outputPointer, push) < std::tie(otherFromPointer, otherInputPointer, pop, shift, otherToPointer, otherOutputPointer, push);
if(to == NULL) return 1;
else if(other.to == NULL) return -1;
else return *to < *other.to;
} else if (output != other.output && output != NULL && other.output != NULL && *output != *other.output) {
if(output == NULL) return 1;
else if(other.output == NULL) return -1;
else return *output < *other.output;
} else {
return push < other.push;
}
} }
   
bool UnknownTransition::operator ==(const UnknownTransition& other) const { bool UnknownTransition::operator ==(const UnknownTransition& other) const {
return (from == other.from || (from != NULL && other.from != NULL && *from == *other.from)) std::pointer<automaton::State> fromPointer(from);
&& (input == other.input || (input != NULL && other.input != NULL && *input == *other.input)) std::pointer<automaton::State> otherFromPointer(other.from);
&& pop == other.pop
&& shift == other.shift std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> inputPointer(input);
&& (to == other.to || (to != NULL && other.to != NULL && *to == *other.to)) std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> otherInputPointer(other.input);
&& (output == other.output || (output != NULL && other.output != NULL && *output == *other.output))
&& push == other.push; std::pointer<automaton::State> toPointer(to);
std::pointer<automaton::State> otherToPointer(other.to);
std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> outputPointer(output);
std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> otherOutputPointer(other.output);
return fromPointer == otherFromPointer && inputPointer == otherInputPointer && pop == other.pop && shift == other.shift && toPointer == otherToPointer && outputPointer == otherOutputPointer && push == other.push;
} }
   
bool UnknownTransition::operator !=(const UnknownTransition& other) const { bool UnknownTransition::operator !=(const UnknownTransition& other) const {
...@@ -168,15 +165,17 @@ bool UnknownTransition::operator !=(const UnknownTransition& other) const { ...@@ -168,15 +165,17 @@ bool UnknownTransition::operator !=(const UnknownTransition& other) const {
} }
   
std::ostream& operator<<(std::ostream& out, const UnknownTransition& transition) { std::ostream& operator<<(std::ostream& out, const UnknownTransition& transition) {
out << "(UnknownTransition" << " from = "; std::pointer<automaton::State> fromPointer(transition.from);
if(transition.from == NULL) out << "NULL"; else out << *transition.from; std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> inputPointer(transition.input);
out << " input = "; std::pointer<automaton::State> toPointer(transition.to);
if(transition.input == NULL) out << "NULL"; else out << *transition.input; std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> outputPointer(transition.output);
out << " to = ";
if(transition.to == NULL) out << "NULL"; else out << *transition.to; out << "(UnknownTransition"
out << " output = "; << " from = " << fromPointer
if(transition.output == NULL) out << "NULL"; else out << *transition.output; << " input = " << inputPointer
out << " pop = " << transition.pop << " to = " << toPointer
<< " output = " << outputPointer
<< " pop = " << transition.pop
<< " push = " << transition.push << " push = " << transition.push
<< " shift = " << SHIFT_NAMES[transition.shift] << " shift = " << SHIFT_NAMES[transition.shift]
<< ")"; << ")";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment