diff --git a/alib2data/src/string/LinearString.cpp b/alib2data/src/string/LinearString.cpp index 69d6079942abbf8615f80e9b69bc619d65ce1123..f7c45d4a1f216ca3921f5e5d5520427571e7545a 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 f8066f15a42a5ba14966d68a4664a392dcba4a43..f290d1b4711fd5cacb15cf345114fb67f109a768 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 );