From 7495a1767d7955428deb010047403a3a8a709f0d Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Tue, 27 Oct 2015 21:14:19 +0100
Subject: [PATCH] cast RankedPatterns to LinearString

---
 alib2data/src/string/LinearString.cpp | 24 ++++++++++++++++++++++--
 alib2data/src/string/LinearString.h   |  5 +++++
 2 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/alib2data/src/string/LinearString.cpp b/alib2data/src/string/LinearString.cpp
index 69d6079942..f7c45d4a1f 100644
--- a/alib2data/src/string/LinearString.cpp
+++ b/alib2data/src/string/LinearString.cpp
@@ -8,7 +8,9 @@
 #include "LinearString.h"
 #include "Epsilon.h"
 #include "../tree/ranked/PrefixRankedTree.h"
+#include "../tree/ranked/PrefixRankedPattern.h"
 #include "../tree/ranked/PrefixRankedBarTree.h"
+#include "../tree/ranked/PrefixRankedBarPattern.h"
 #include "../exception/AlibException.h"
 
 #include <sstream>
@@ -53,7 +55,15 @@ LinearString::LinearString ( const Epsilon & epsilon ) {
 
 LinearString::LinearString ( const tree::PrefixRankedTree & tree ) {
 	for ( const alphabet::RankedSymbol & symbol : tree.getAlphabet ( ) )
-		this->alphabet.insert ( alphabet::Symbol ( std::move ( symbol ) ) );
+		this->alphabet.insert ( alphabet::Symbol ( symbol ) );
+
+	for ( const alphabet::RankedSymbol & symbol : tree.getContent ( ) )
+		this->m_Data.push_back ( alphabet::Symbol ( symbol ) );
+}
+
+LinearString::LinearString ( const tree::PrefixRankedPattern & tree ) {
+	for ( const alphabet::RankedSymbol & symbol : tree.getAlphabet ( ) )
+		this->alphabet.insert ( alphabet::Symbol ( symbol ) );
 
 	for ( const alphabet::RankedSymbol & symbol : tree.getContent ( ) )
 		this->m_Data.push_back ( alphabet::Symbol ( symbol ) );
@@ -61,7 +71,15 @@ LinearString::LinearString ( const tree::PrefixRankedTree & tree ) {
 
 LinearString::LinearString ( const tree::PrefixRankedBarTree & tree ) {
 	for ( const alphabet::RankedSymbol & symbol : tree.getAlphabet ( ) )
-		this->alphabet.insert ( alphabet::Symbol ( std::move ( symbol ) ) );
+		this->alphabet.insert ( alphabet::Symbol ( symbol ) );
+
+	for ( const alphabet::RankedSymbol & symbol : tree.getContent ( ) )
+		this->m_Data.push_back ( alphabet::Symbol ( symbol ) );
+}
+
+LinearString::LinearString ( const tree::PrefixRankedBarPattern & tree ) {
+	for ( const alphabet::RankedSymbol & symbol : tree.getAlphabet ( ) )
+		this->alphabet.insert ( alphabet::Symbol ( symbol ) );
 
 	for ( const alphabet::RankedSymbol & symbol : tree.getContent ( ) )
 		this->m_Data.push_back ( alphabet::Symbol ( symbol ) );
@@ -166,7 +184,9 @@ xmlApi < alib::Object >::ParserRegister < string::LinearString > linearStringPar
 
 auto LinearStringFromEpsilon = castApi::CastRegister < string::LinearString, string::Epsilon > ( );
 auto LinearStringFromPrefixRankedTree = castApi::CastRegister < string::LinearString, tree::PrefixRankedTree > ( );
+auto LinearStringFromPrefixRankedPattern = castApi::CastRegister < string::LinearString, tree::PrefixRankedPattern > ( );
 auto LinearStringFromPrefixRankedBarTree = castApi::CastRegister < string::LinearString, tree::PrefixRankedBarTree > ( );
+auto LinearStringFromPrefixRankedBarPattern = castApi::CastRegister < string::LinearString, tree::PrefixRankedBarPattern > ( );
 auto LinearStringCastBinder = castApi::CastPoolStringBinder < string::LinearString > ( string::LinearString::XML_TAG_NAME );
 
 } /* namespace alib */
diff --git a/alib2data/src/string/LinearString.h b/alib2data/src/string/LinearString.h
index f8066f15a4..f290d1b471 100644
--- a/alib2data/src/string/LinearString.h
+++ b/alib2data/src/string/LinearString.h
@@ -19,7 +19,10 @@
 namespace tree {
 
 class PrefixRankedTree;
+class PrefixRankedPattern;
 class PrefixRankedBarTree;
+class PrefixRankedBarPattern;
+
 }
 
 namespace string {
@@ -36,7 +39,9 @@ class LinearString : public StringBase, public StringAlphabet {
 public:
 	explicit LinearString ( );
 	explicit LinearString ( const tree::PrefixRankedTree & tree );
+	explicit LinearString ( const tree::PrefixRankedPattern & tree );
 	explicit LinearString ( const tree::PrefixRankedBarTree & tree );
+	explicit LinearString ( const tree::PrefixRankedBarPattern & tree );
 	explicit LinearString ( std::set < alphabet::Symbol > alphabet, std::vector < alphabet::Symbol > data );
 	explicit LinearString ( std::vector < alphabet::Symbol > data );
 	explicit LinearString ( const std::string & string );
-- 
GitLab