From 590506967a0ae1d8e96e49d174b6a827dc6ee86b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= <peckato1@fit.cvut.cz>
Date: Sun, 7 Sep 2014 11:04:21 +0200
Subject: [PATCH] algo: rg2rg interface

---
 .../lrg2rrg/LeftToRightRegularGrammar.cpp     | 25 ++++++------------
 .../rg2rg/lrg2rrg/LeftToRightRegularGrammar.h | 17 ++----------
 .../rrg2lrg/RightToLeftRegularGrammar.cpp     | 26 ++++++-------------
 .../rg2rg/rrg2lrg/RightToLeftRegularGrammar.h | 15 +----------
 .../test-src/conversions/rg2rg/rg2rgTest.cpp  |  8 +++---
 5 files changed, 23 insertions(+), 68 deletions(-)

diff --git a/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.cpp b/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.cpp
index e6c8b8ff74..c9b1a00677 100644
--- a/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.cpp
+++ b/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.cpp
@@ -9,31 +9,22 @@
 
 namespace rg2rg {
 
-LeftToRightRegularGrammar::LeftToRightRegularGrammar( const grammar::LeftRG & lrg ) : m_lrg( lrg ) {
-
-}
-
-LeftToRightRegularGrammar::~LeftToRightRegularGrammar( void )
-{
-
-}
-
-grammar::RightRG LeftToRightRegularGrammar::convert( void )
+grammar::RightRG LeftToRightRegularGrammar::convert(const grammar::LeftRG& lrg)
 {
 	// 1.
-	alphabet::Symbol s = alphabet::createUniqueSymbol( m_lrg.getInitialSymbol( ), m_lrg.getNonterminalAlphabet(), m_lrg.getTerminalAlphabet() );
+	alphabet::Symbol s = alphabet::createUniqueSymbol( lrg.getInitialSymbol( ), lrg.getNonterminalAlphabet(), lrg.getTerminalAlphabet() );
 
 	grammar::RightRG rrg( s );
 
-	for(const auto & nonterminalSymbol : m_lrg.getNonterminalAlphabet() ) {
+	for(const auto & nonterminalSymbol : lrg.getNonterminalAlphabet() ) {
 		rrg.addNonterminalSymbol( nonterminalSymbol );
 	}
 
-	rrg.setTerminalAlphabet( m_lrg.getTerminalAlphabet( ) );
-	rrg.setGeneratesEpsilon( m_lrg.getGeneratesEpsilon( ) );
+	rrg.setTerminalAlphabet( lrg.getTerminalAlphabet( ) );
+	rrg.setGeneratesEpsilon( lrg.getGeneratesEpsilon( ) );
 
 	// 2
-	for( const auto & rule : m_lrg.getRules( ) ) {
+	for( const auto & rule : lrg.getRules( ) ) {
 		const alphabet::Symbol& lhs = rule.first;
 
 		for(const auto & ruleRHS : rule.second ) {
@@ -44,7 +35,7 @@ grammar::RightRG LeftToRightRegularGrammar::convert( void )
 				std::pair<alphabet::Symbol, alphabet::Symbol> rightSide = std::make_pair( rhs.second, lhs );
 				rrg.addRule( leftSide, rightSide );
 
-				if( lhs == m_lrg.getInitialSymbol( ) ) {
+				if( lhs == lrg.getInitialSymbol( ) ) {
 					alphabet::Symbol leftSide = rhs.first;
 					alphabet::Symbol rightSide = rhs.second;
 					rrg.addRule( leftSide, rightSide );
@@ -56,7 +47,7 @@ grammar::RightRG LeftToRightRegularGrammar::convert( void )
 				std::pair<alphabet::Symbol, alphabet::Symbol> rightSide = std::make_pair( rhs, lhs );
 				rrg.addRule( leftSide, rightSide );
 
-				if( lhs == m_lrg.getInitialSymbol( ) ) {
+				if( lhs == lrg.getInitialSymbol( ) ) {
 					alphabet::Symbol leftSide = rrg.getInitialSymbol( );
 					alphabet::Symbol rightSide = rhs;
 					rrg.addRule( leftSide, rightSide );
diff --git a/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.h b/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.h
index e008920170..f01665d3b3 100644
--- a/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.h
+++ b/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.h
@@ -17,24 +17,11 @@ namespace rg2rg
 class LeftToRightRegularGrammar
 {
 public:
-    /**
-     * @param lrg Original left regular grammar.
-     */
-    LeftToRightRegularGrammar( const grammar::LeftRG & lrg );
-
-    ~LeftToRightRegularGrammar( void );
-
-    /**
+   /**
      * Performs conversion.
      * @return right regular grammar which is equivalent to source left regular grammar.
      */
-    grammar::RightRG convert( void );
-
-protected:
-    /**
-     * input grammar
-     */
-    const grammar::LeftRG & m_lrg;
+    grammar::RightRG convert(const grammar::LeftRG& lrg);
 };
 
 } /* namespace rg2rg */
diff --git a/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.cpp b/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.cpp
index 420b9365a8..f51ab73248 100644
--- a/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.cpp
+++ b/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.cpp
@@ -10,32 +10,22 @@
 namespace rg2rg
 {
 
-RightToLeftRegularGrammar::RightToLeftRegularGrammar( const grammar::RightRG & rrg ) : m_rrg( rrg )
-{
-
-}
-
-RightToLeftRegularGrammar::~RightToLeftRegularGrammar( void )
-{
-
-}
-
-grammar::LeftRG RightToLeftRegularGrammar::convert( void )
+grammar::LeftRG RightToLeftRegularGrammar::convert(const grammar::RightRG& rrg)
 {
 	// 1.
-	alphabet::Symbol s = alphabet::createUniqueSymbol( m_rrg.getInitialSymbol( ), m_rrg.getNonterminalAlphabet(), m_rrg.getTerminalAlphabet() );
+	alphabet::Symbol s = alphabet::createUniqueSymbol( rrg.getInitialSymbol( ), rrg.getNonterminalAlphabet(), rrg.getTerminalAlphabet() );
 
 	grammar::LeftRG lrg(s);
 
-	for(const auto & nonterminalSymbol : m_rrg.getNonterminalAlphabet()) {
+	for(const auto & nonterminalSymbol : rrg.getNonterminalAlphabet()) {
 		lrg.addNonterminalSymbol( nonterminalSymbol );
 	}
 
-	lrg.setTerminalAlphabet( m_rrg.getTerminalAlphabet( ) );
-	lrg.setGeneratesEpsilon( m_rrg.getGeneratesEpsilon( ) );
+	lrg.setTerminalAlphabet( rrg.getTerminalAlphabet( ) );
+	lrg.setGeneratesEpsilon( rrg.getGeneratesEpsilon( ) );
 
 	// 2.
-	for( const auto & rule : m_rrg.getRules( ) ) {
+	for( const auto & rule : rrg.getRules( ) ) {
 		const alphabet::Symbol& lhs = rule.first;
 
 		for(const auto & ruleRHS : rule.second ) {
@@ -46,7 +36,7 @@ grammar::LeftRG RightToLeftRegularGrammar::convert( void )
 				std::pair<alphabet::Symbol, alphabet::Symbol> rightSide = std::make_pair( lhs, rhs.first );
 				lrg.addRule( leftSide, rightSide );
 
-				if( lhs == m_rrg.getInitialSymbol( ) ) {
+				if( lhs == rrg.getInitialSymbol( ) ) {
 					alphabet::Symbol leftSide = rhs.second;
 					alphabet::Symbol rightSide = rhs.first;
 					lrg.addRule( leftSide, rightSide );
@@ -58,7 +48,7 @@ grammar::LeftRG RightToLeftRegularGrammar::convert( void )
 				std::pair<alphabet::Symbol, alphabet::Symbol> rightSide = std::make_pair ( lhs, rhs );
 				lrg.addRule( leftSide, rightSide );
 
-				if( lhs == m_rrg.getInitialSymbol( ) ) {
+				if( lhs == rrg.getInitialSymbol( ) ) {
 					alphabet::Symbol leftSide = lrg.getInitialSymbol( );
 					alphabet::Symbol rightSide = rhs;
 					lrg.addRule( leftSide, rightSide );
diff --git a/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.h b/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.h
index 73dcdc3968..8b7e3dc720 100644
--- a/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.h
+++ b/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.h
@@ -20,24 +20,11 @@ namespace rg2rg
 class RightToLeftRegularGrammar
 {
 public:
-    /**
-     * @param rrg Original right regular grammar.
-     */
-    RightToLeftRegularGrammar( const grammar::RightRG & rrg );
-
-    ~RightToLeftRegularGrammar( void );
-
     /**
      * Performs conversion.
      * @return left regular grammar which is equivalent to source right regular grammar.
      */
-    grammar::LeftRG convert( void );
-
-private:
-    /**
-     *
-     */
-     const grammar::RightRG & m_rrg;
+    grammar::LeftRG convert(const grammar::RightRG& rrg);
 };
 
 } /* namespace rg2rg */
diff --git a/alib2algo/test-src/conversions/rg2rg/rg2rgTest.cpp b/alib2algo/test-src/conversions/rg2rg/rg2rgTest.cpp
index aa812511ff..24b8c9772e 100644
--- a/alib2algo/test-src/conversions/rg2rg/rg2rgTest.cpp
+++ b/alib2algo/test-src/conversions/rg2rg/rg2rgTest.cpp
@@ -32,8 +32,8 @@ void rg2rgTest::testConversion() {
   rrGrammar.addRule(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(2)))), std::make_pair(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("b")))), alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(3))))));
   rrGrammar.addRule(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(3)))), alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("a")))));
 
-  rg2rg::RightToLeftRegularGrammar convertor(rrGrammar);
-  grammar::LeftRG lrGrammar = convertor.convert();
+  rg2rg::RightToLeftRegularGrammar convertor;;
+  grammar::LeftRG lrGrammar = convertor.convert(rrGrammar);
 
   grammar::LeftRG lrGrammarRef(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(4)))));
 
@@ -64,8 +64,8 @@ void rg2rgTest::testConversion2() {
   lrGrammar.addRule(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(3)))), std::make_pair(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(2)))), alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("b"))))));
   lrGrammar.addRule(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(4)))), std::make_pair(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(3)))), alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("a"))))));
 
-  rg2rg::LeftToRightRegularGrammar convertor(lrGrammar);
-  grammar::RightRG rrGrammar = convertor.convert();
+  rg2rg::LeftToRightRegularGrammar convertor;
+  grammar::RightRG rrGrammar = convertor.convert(lrGrammar);
 
   grammar::RightRG rrGrammarRef(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(5)))));
 
-- 
GitLab