From 91698c5484e60e6d76cc02fab904dd62af605d83 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Mon, 5 Dec 2016 10:04:43 +0100
Subject: [PATCH] ease requirements on SymbolType in some places

---
 .../src/alphabet/NonlinearVariableSymbol.h    |  4 +++-
 .../src/regexp/formal/FormalRegExpSymbol.h    | 20 +++-------------
 .../regexp/unbounded/UnboundedRegExpSymbol.h  | 20 +++-------------
 alib2data/test-src/regexp/RegExpTest.cpp      | 24 +++++++++----------
 4 files changed, 21 insertions(+), 47 deletions(-)

diff --git a/alib2data/src/alphabet/NonlinearVariableSymbol.h b/alib2data/src/alphabet/NonlinearVariableSymbol.h
index 13a8fb9bca..08a93a59e5 100644
--- a/alib2data/src/alphabet/NonlinearVariableSymbol.h
+++ b/alib2data/src/alphabet/NonlinearVariableSymbol.h
@@ -101,7 +101,9 @@ const SymbolType& NonlinearVariableSymbol < SymbolType >::getSymbol() const {
 
 template < class SymbolType >
 int NonlinearVariableSymbol < SymbolType >::compare ( const NonlinearVariableSymbol & other ) const {
-	return this->m_symbol.getData ( ).compare ( other.m_symbol.getData ( ) );
+	std::compare < decltype ( m_symbol ) > comp;
+
+	return comp ( m_symbol, other.m_symbol );
 }
 
 template < class SymbolType >
diff --git a/alib2data/src/regexp/formal/FormalRegExpSymbol.h b/alib2data/src/regexp/formal/FormalRegExpSymbol.h
index 25b2528750..c48c6a97d7 100644
--- a/alib2data/src/regexp/formal/FormalRegExpSymbol.h
+++ b/alib2data/src/regexp/formal/FormalRegExpSymbol.h
@@ -26,10 +26,6 @@ public:
 		visitor.visit ( * this );
 	}
 
-	explicit FormalRegExpSymbol ( int number ); // TODO remove these
-	explicit FormalRegExpSymbol ( char character );
-	explicit FormalRegExpSymbol ( const std::string & label );
-
 	explicit FormalRegExpSymbol ( SymbolType symbol );
 
 	/**
@@ -89,18 +85,6 @@ public:
 
 namespace regexp {
 
-template < class SymbolType >
-FormalRegExpSymbol < SymbolType >::FormalRegExpSymbol ( int number ) : m_symbol ( alphabet::symbolFrom ( number ) ) {
-}
-
-template < class SymbolType >
-FormalRegExpSymbol < SymbolType >::FormalRegExpSymbol ( char character ) : m_symbol ( alphabet::symbolFrom ( character ) ) {
-}
-
-template < class SymbolType >
-FormalRegExpSymbol < SymbolType >::FormalRegExpSymbol ( const std::string & label ) : m_symbol ( alphabet::symbolFrom ( label ) ) {
-}
-
 template < class SymbolType >
 FormalRegExpSymbol < SymbolType >::FormalRegExpSymbol ( SymbolType symbol ) : m_symbol ( std::move ( symbol ) ) {
 }
@@ -122,7 +106,9 @@ std::smart_ptr < UnboundedRegExpElement < SymbolType > > FormalRegExpSymbol < Sy
 
 template < class SymbolType >
 int FormalRegExpSymbol < SymbolType >::compare ( const FormalRegExpSymbol & other ) const {
-	return m_symbol.getData ( ).compare ( other.m_symbol.getData ( ) );
+	std::compare < decltype ( m_symbol ) > comp;
+
+	return comp ( m_symbol, other.m_symbol );
 }
 
 template < class SymbolType >
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h b/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
index a21e8bf342..c1ada6f4ec 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
@@ -26,10 +26,6 @@ public:
 		visitor.visit ( * this );
 	}
 
-	explicit UnboundedRegExpSymbol ( int number );
-	explicit UnboundedRegExpSymbol ( char character );
-	explicit UnboundedRegExpSymbol ( const std::string & label );
-
 	explicit UnboundedRegExpSymbol ( SymbolType symbol );
 
 	/**
@@ -91,18 +87,6 @@ public:
 
 namespace regexp {
 
-template < class SymbolType >
-UnboundedRegExpSymbol < SymbolType >::UnboundedRegExpSymbol ( int number ) : m_symbol ( alphabet::symbolFrom ( number ) ) {
-}
-
-template < class SymbolType >
-UnboundedRegExpSymbol < SymbolType >::UnboundedRegExpSymbol ( char character ) : m_symbol ( alphabet::symbolFrom ( character ) ) {
-}
-
-template < class SymbolType >
-UnboundedRegExpSymbol < SymbolType >::UnboundedRegExpSymbol ( const std::string & label ) : m_symbol ( alphabet::symbolFrom ( label ) ) {
-}
-
 template < class SymbolType >
 UnboundedRegExpSymbol < SymbolType >::UnboundedRegExpSymbol ( SymbolType symbol ) : m_symbol ( std::move ( symbol ) ) {
 }
@@ -124,7 +108,9 @@ std::smart_ptr < FormalRegExpElement < SymbolType > > UnboundedRegExpSymbol < Sy
 
 template < class SymbolType >
 int UnboundedRegExpSymbol < SymbolType >::compare ( const UnboundedRegExpSymbol & other ) const {
-	return m_symbol.getData ( ).compare ( other.m_symbol.getData ( ) );
+	std::compare < decltype ( m_symbol ) > comp;
+
+	return comp ( m_symbol, other.m_symbol );
 }
 
 template < class SymbolType >
diff --git a/alib2data/test-src/regexp/RegExpTest.cpp b/alib2data/test-src/regexp/RegExpTest.cpp
index 52d806644c..7b3e3cbc20 100644
--- a/alib2data/test-src/regexp/RegExpTest.cpp
+++ b/alib2data/test-src/regexp/RegExpTest.cpp
@@ -27,8 +27,8 @@ void RegExpTest::tearDown() {
 
 void RegExpTest::testCopyConstruct() {
 	{
-		regexp::UnboundedRegExpSymbol < alphabet::Symbol > l1 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >("1");
-		regexp::UnboundedRegExpSymbol < alphabet::Symbol > l2 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >("2");
+		regexp::UnboundedRegExpSymbol < alphabet::Symbol > l1 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "1" ) );
+		regexp::UnboundedRegExpSymbol < alphabet::Symbol > l2 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "2" ) );
 
 		regexp::UnboundedRegExpConcatenation < alphabet::Symbol > con = regexp::UnboundedRegExpConcatenation < alphabet::Symbol >();
 		con.appendElement(l1);
@@ -51,8 +51,8 @@ void RegExpTest::testCopyConstruct() {
 		CPPUNIT_ASSERT( regexp2 == regexp3 );
 	}
 	{
-		regexp::FormalRegExpSymbol < alphabet::Symbol > l1 = regexp::FormalRegExpSymbol < alphabet::Symbol >("1");
-		regexp::FormalRegExpSymbol < alphabet::Symbol > l2 = regexp::FormalRegExpSymbol < alphabet::Symbol >("2");
+		regexp::FormalRegExpSymbol < alphabet::Symbol > l1 = regexp::FormalRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "1" ) );
+		regexp::FormalRegExpSymbol < alphabet::Symbol > l2 = regexp::FormalRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "2" ) );
 
 		regexp::FormalRegExpConcatenation < alphabet::Symbol > con = regexp::FormalRegExpConcatenation < alphabet::Symbol >(l1, l2);
 
@@ -71,8 +71,8 @@ void RegExpTest::testCopyConstruct() {
 		CPPUNIT_ASSERT( regexp2 == regexp3 );
 	}
 	{
-		regexp::FormalRegExpSymbol < alphabet::Symbol > l1 = regexp::FormalRegExpSymbol < alphabet::Symbol >("1");
-		regexp::FormalRegExpSymbol < alphabet::Symbol > l2 = regexp::FormalRegExpSymbol < alphabet::Symbol >("2");
+		regexp::FormalRegExpSymbol < alphabet::Symbol > l1 = regexp::FormalRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "1" ) );
+		regexp::FormalRegExpSymbol < alphabet::Symbol > l2 = regexp::FormalRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "2" ) );
 
 		regexp::FormalRegExpConcatenation < alphabet::Symbol > con = regexp::FormalRegExpConcatenation < alphabet::Symbol >(l1, l2);
 
@@ -91,8 +91,8 @@ void RegExpTest::testCopyConstruct() {
 
 void RegExpTest::testXMLParser() {
 
-	regexp::UnboundedRegExpSymbol < alphabet::Symbol > l1 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >("1");
-	regexp::UnboundedRegExpSymbol < alphabet::Symbol > l2 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >("2");
+	regexp::UnboundedRegExpSymbol < alphabet::Symbol > l1 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "1" ) );
+	regexp::UnboundedRegExpSymbol < alphabet::Symbol > l2 = regexp::UnboundedRegExpSymbol < alphabet::Symbol >( alphabet::symbolFrom ( "2" ) );
 
 	regexp::UnboundedRegExpConcatenation < alphabet::Symbol > con = regexp::UnboundedRegExpConcatenation < alphabet::Symbol >();
 	con.appendElement(l1);
@@ -128,7 +128,7 @@ void RegExpTest::testXMLParser() {
 }
 
 void RegExpTest::testOrder() {
-	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s1("1");
+	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s1( alphabet::symbolFrom ( "1" ) );
 	regexp::UnboundedRegExpEmpty < alphabet::Symbol > e1;
 	regexp::UnboundedRegExpEpsilon < alphabet::Symbol > e2;
 	regexp::UnboundedRegExpIteration < alphabet::Symbol > i1(s1);
@@ -328,9 +328,9 @@ void RegExpTest::testOrder() {
 }
 
 void RegExpTest::testOrder2() {
-	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s1("1");
-	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s2("2");
-	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s3("3");
+	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s1( alphabet::symbolFrom ( "1" ) );
+	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s2( alphabet::symbolFrom ( "2" ) );
+	regexp::UnboundedRegExpSymbol < alphabet::Symbol > s3( alphabet::symbolFrom ( "3" ) );
 
 	regexp::UnboundedRegExpEmpty < alphabet::Symbol > e1;
 	regexp::UnboundedRegExpEpsilon < alphabet::Symbol > e2;
-- 
GitLab