From a94ce6ce90028e369cccfd4afde1c771261f3723 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Wed, 23 Sep 2015 18:26:19 +0200
Subject: [PATCH] cast tree to LinearString

---
 alib2data/src/string/LinearString.cpp | 10 ++++++++++
 alib2data/src/string/LinearString.h   |  2 ++
 2 files changed, 12 insertions(+)

diff --git a/alib2data/src/string/LinearString.cpp b/alib2data/src/string/LinearString.cpp
index d275307c13..69d6079942 100644
--- a/alib2data/src/string/LinearString.cpp
+++ b/alib2data/src/string/LinearString.cpp
@@ -8,6 +8,7 @@
 #include "LinearString.h"
 #include "Epsilon.h"
 #include "../tree/ranked/PrefixRankedTree.h"
+#include "../tree/ranked/PrefixRankedBarTree.h"
 #include "../exception/AlibException.h"
 
 #include <sstream>
@@ -58,6 +59,14 @@ LinearString::LinearString ( const tree::PrefixRankedTree & tree ) {
 		this->m_Data.push_back ( alphabet::Symbol ( symbol ) );
 }
 
+LinearString::LinearString ( const tree::PrefixRankedBarTree & tree ) {
+	for ( const alphabet::RankedSymbol & symbol : tree.getAlphabet ( ) )
+		this->alphabet.insert ( alphabet::Symbol ( std::move ( symbol ) ) );
+
+	for ( const alphabet::RankedSymbol & symbol : tree.getContent ( ) )
+		this->m_Data.push_back ( alphabet::Symbol ( symbol ) );
+}
+
 StringBase * LinearString::clone ( ) const {
 	return new LinearString ( * this );
 }
@@ -157,6 +166,7 @@ xmlApi < alib::Object >::ParserRegister < string::LinearString > linearStringPar
 
 auto LinearStringFromEpsilon = castApi::CastRegister < string::LinearString, string::Epsilon > ( );
 auto LinearStringFromPrefixRankedTree = castApi::CastRegister < string::LinearString, tree::PrefixRankedTree > ( );
+auto LinearStringFromPrefixRankedBarTree = castApi::CastRegister < string::LinearString, tree::PrefixRankedBarTree > ( );
 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 8b4445c895..b959f58d21 100644
--- a/alib2data/src/string/LinearString.h
+++ b/alib2data/src/string/LinearString.h
@@ -19,6 +19,7 @@
 namespace tree {
 
 class PrefixRankedTree;
+class PrefixRankedBarTree;
 }
 
 namespace string {
@@ -35,6 +36,7 @@ class LinearString : public StringBase, public StringAlphabet {
 public:
 	explicit LinearString ( );
 	explicit LinearString ( const tree::PrefixRankedTree & tree );
+	explicit LinearString ( const tree::PrefixRankedBarTree & 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