From f179e7200253a4f07ba95b1fb984e16be9c3629a Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Sun, 20 Sep 2015 21:29:03 +0200
Subject: [PATCH] casting within tree types

---
 alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp | 10 ++++++++++
 alib2data/src/tree/ranked/PrefixRankedBarPattern.h   |  1 +
 alib2data/src/tree/ranked/PrefixRankedBarTree.cpp    |  9 +++++++++
 alib2data/src/tree/ranked/PrefixRankedBarTree.h      |  1 +
 alib2data/src/tree/ranked/RankedPattern.cpp          |  4 ++++
 alib2data/src/tree/ranked/RankedTree.cpp             |  4 ++++
 alib2data/src/tree/unranked/UnrankedPattern.cpp      |  4 ++++
 alib2data/src/tree/unranked/UnrankedTree.cpp         |  4 ++++
 8 files changed, 37 insertions(+)

diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
index a689907aed..216e68780b 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
@@ -20,6 +20,10 @@
 #include "../Tree.h"
 #include "../../object/Object.h"
 #include "../../XmlApi.hpp"
+#include "../../CastApi.hpp"
+
+#include "../../alphabet/BarSymbol.h"
+#include "../../alphabet/VariablesBarSymbol.h"
 
 namespace tree {
 
@@ -40,6 +44,9 @@ PrefixRankedBarPattern::PrefixRankedBarPattern ( alphabet::Symbol bar, alphabet:
 	alphabet = std::set < alphabet::RankedSymbol > ( m_Data.begin ( ), m_Data.end ( ) );
 }
 
+PrefixRankedBarPattern::PrefixRankedBarPattern ( const RankedPattern & tree ) : PrefixRankedBarPattern ( alphabet::Symbol ( alphabet::BarSymbol::BAR ), alphabet::Symbol ( alphabet::VariablesBarSymbol::BAR ), tree ) {
+}
+
 void PrefixRankedBarPattern::toPrefixRankedBar ( const RankedNode & node ) {
 	if ( node.getSymbol ( ) == subtreeWildcard ) {
 		m_Data.push_back ( node.getSymbol ( ) );
@@ -197,4 +204,7 @@ namespace alib {
 xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarPattern > prefixRankedBarPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarPattern > ( tree::PrefixRankedBarPattern::XML_TAG_NAME, tree::PrefixRankedBarPattern::parse );
 xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarPattern > prefixRankedBarPatternParserRegister2 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarPattern > ( tree::PrefixRankedBarPattern::XML_TAG_NAME, tree::PrefixRankedBarPattern::parse );
 
+auto PrefixRankedBarPatternFromRankedPattern = castApi::CastRegister < tree::PrefixRankedBarPattern, tree::RankedPattern > ( );
+auto PrefixRankedBarPatternCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedBarPattern > ( tree::PrefixRankedBarPattern::XML_TAG_NAME );
+
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
index 6a5116cace..91d0ed76f5 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
@@ -34,6 +34,7 @@ public:
 	explicit PrefixRankedBarPattern ( alphabet::Symbol bar, alphabet::Symbol variablesBar, alphabet::RankedSymbol subtreeWildcard, std::set < alphabet::RankedSymbol > alphabet, std::vector < alphabet::RankedSymbol > data );
 	explicit PrefixRankedBarPattern ( alphabet::Symbol bar, alphabet::Symbol variablesBar, alphabet::RankedSymbol subtreeWildcard, std::vector < alphabet::RankedSymbol > data );
 	explicit PrefixRankedBarPattern ( alphabet::Symbol bar, alphabet::Symbol variablesBar, const RankedPattern & tree );
+	explicit PrefixRankedBarPattern ( const RankedPattern & tree );
 
 	void toPrefixRankedBar ( const RankedNode & node );
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
index 6a69b672ad..e66bccfb65 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
@@ -20,6 +20,9 @@
 #include "../Tree.h"
 #include "../../object/Object.h"
 #include "../../XmlApi.hpp"
+#include "../../CastApi.hpp"
+
+#include "../../alphabet/BarSymbol.h"
 
 namespace tree {
 
@@ -40,6 +43,9 @@ PrefixRankedBarTree::PrefixRankedBarTree ( alphabet::Symbol bar, const RankedTre
 	alphabet = std::set < alphabet::RankedSymbol > ( m_Data.begin ( ), m_Data.end ( ) );
 }
 
+PrefixRankedBarTree::PrefixRankedBarTree ( const RankedTree & tree ) : PrefixRankedBarTree ( alphabet::Symbol ( alphabet::BarSymbol::BAR ), tree ) {
+}
+
 void PrefixRankedBarTree::toPrefixRankedBar ( const RankedNode & node ) {
 	m_Data.push_back ( node.getSymbol ( ) );
 
@@ -177,4 +183,7 @@ namespace alib {
 xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarTree > prefixRankedBarTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarTree > ( tree::PrefixRankedBarTree::XML_TAG_NAME, tree::PrefixRankedBarTree::parse );
 xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarTree > prefixRankedBarTreeParserRegister2 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarTree > ( tree::PrefixRankedBarTree::XML_TAG_NAME, tree::PrefixRankedBarTree::parse );
 
+auto PrefixRankedBarTreeFromRankedTree = castApi::CastRegister < tree::PrefixRankedBarTree, tree::RankedTree > ( );
+auto PrefixRankedBarTreeCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedBarTree > ( tree::PrefixRankedBarTree::XML_TAG_NAME );
+
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.h b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
index 564a4c4bfd..54b7ae7d33 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
@@ -33,6 +33,7 @@ public:
 	explicit PrefixRankedBarTree ( alphabet::Symbol bar, std::set < alphabet::RankedSymbol > alphabet, std::vector < alphabet::RankedSymbol > data );
 	explicit PrefixRankedBarTree ( alphabet::Symbol bar, std::vector < alphabet::RankedSymbol > data );
 	explicit PrefixRankedBarTree ( alphabet::Symbol bar, const RankedTree & tree );
+	explicit PrefixRankedBarTree ( const RankedTree & tree );
 
 	void toPrefixRankedBar ( const RankedNode & node );
 
diff --git a/alib2data/src/tree/ranked/RankedPattern.cpp b/alib2data/src/tree/ranked/RankedPattern.cpp
index 2722335ead..55fa2dbd63 100644
--- a/alib2data/src/tree/ranked/RankedPattern.cpp
+++ b/alib2data/src/tree/ranked/RankedPattern.cpp
@@ -20,6 +20,7 @@
 #include "../Tree.h"
 #include "../../object/Object.h"
 #include "../../XmlApi.hpp"
+#include "../../CastApi.hpp"
 
 namespace tree {
 
@@ -168,4 +169,7 @@ namespace alib {
 xmlApi < tree::Tree >::ParserRegister < tree::RankedPattern > rankedPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::RankedPattern > ( tree::RankedPattern::XML_TAG_NAME, tree::RankedPattern::parse );
 xmlApi < alib::Object >::ParserRegister < tree::RankedPattern > rankedPatternParserRegister2 = xmlApi < alib::Object >::ParserRegister < tree::RankedPattern > ( tree::RankedPattern::XML_TAG_NAME, tree::RankedPattern::parse );
 
+auto RankedPatternFromUnrankedPattern = castApi::CastRegister < tree::RankedPattern, tree::UnrankedPattern > ( );
+auto RankedPatternCastBinder = castApi::CastPoolStringBinder < tree::RankedPattern > ( tree::RankedPattern::XML_TAG_NAME );
+
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/RankedTree.cpp b/alib2data/src/tree/ranked/RankedTree.cpp
index ad734dfb2b..274316be1d 100644
--- a/alib2data/src/tree/ranked/RankedTree.cpp
+++ b/alib2data/src/tree/ranked/RankedTree.cpp
@@ -20,6 +20,7 @@
 #include "../Tree.h"
 #include "../../object/Object.h"
 #include "../../XmlApi.hpp"
+#include "../../CastApi.hpp"
 
 namespace tree {
 
@@ -159,4 +160,7 @@ namespace alib {
 xmlApi < tree::Tree >::ParserRegister < tree::RankedTree > rankedTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::RankedTree > ( tree::RankedTree::XML_TAG_NAME, tree::RankedTree::parse );
 xmlApi < alib::Object >::ParserRegister < tree::RankedTree > rankedTreeParserRegister2 = xmlApi < alib::Object >::ParserRegister < tree::RankedTree > ( tree::RankedTree::XML_TAG_NAME, tree::RankedTree::parse );
 
+auto RankedTreeFromUnrankedTree = castApi::CastRegister < tree::RankedTree, tree::UnrankedTree > ( );
+auto RankedTreeCastBinder = castApi::CastPoolStringBinder < tree::RankedTree > ( tree::RankedTree::XML_TAG_NAME );
+
 } /* namespace alib */
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.cpp b/alib2data/src/tree/unranked/UnrankedPattern.cpp
index 4ca331c008..166bbd4a1e 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.cpp
+++ b/alib2data/src/tree/unranked/UnrankedPattern.cpp
@@ -20,6 +20,7 @@
 #include "../Tree.h"
 #include "../../object/Object.h"
 #include "../../XmlApi.hpp"
+#include "../../CastApi.hpp"
 
 namespace tree {
 
@@ -168,4 +169,7 @@ namespace alib {
 xmlApi < tree::Tree >::ParserRegister < tree::UnrankedPattern > unrankedPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::UnrankedPattern > ( tree::UnrankedPattern::XML_TAG_NAME, tree::UnrankedPattern::parse );
 xmlApi < alib::Object >::ParserRegister < tree::UnrankedPattern > unrankedPatternParserRegister2 = xmlApi < alib::Object >::ParserRegister < tree::UnrankedPattern > ( tree::UnrankedPattern::XML_TAG_NAME, tree::UnrankedPattern::parse );
 
+auto UnrankedPatternFromRankedPattern = castApi::CastRegister < tree::UnrankedPattern, tree::RankedPattern > ( );
+auto UnrankedPatternCastBinder = castApi::CastPoolStringBinder < tree::UnrankedPattern > ( tree::UnrankedPattern::XML_TAG_NAME );
+
 } /* namespace alib */
diff --git a/alib2data/src/tree/unranked/UnrankedTree.cpp b/alib2data/src/tree/unranked/UnrankedTree.cpp
index 7b49c3cf8e..a8e4686bff 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.cpp
+++ b/alib2data/src/tree/unranked/UnrankedTree.cpp
@@ -20,6 +20,7 @@
 #include "../Tree.h"
 #include "../../object/Object.h"
 #include "../../XmlApi.hpp"
+#include "../../CastApi.hpp"
 
 namespace tree {
 
@@ -159,4 +160,7 @@ namespace alib {
 xmlApi < tree::Tree >::ParserRegister < tree::UnrankedTree > unrankedTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::UnrankedTree > ( tree::UnrankedTree::XML_TAG_NAME, tree::UnrankedTree::parse );
 xmlApi < alib::Object >::ParserRegister < tree::UnrankedTree > unrankedTreeParserRegister2 = xmlApi < alib::Object >::ParserRegister < tree::UnrankedTree > ( tree::UnrankedTree::XML_TAG_NAME, tree::UnrankedTree::parse );
 
+auto UnrankedTreeFromRankedTree = castApi::CastRegister < tree::UnrankedTree, tree::RankedTree > ( );
+auto UnrankedTreeCastBinder = castApi::CastPoolStringBinder < tree::UnrankedTree > ( tree::UnrankedTree::XML_TAG_NAME );
+
 } /* namespace alib */
-- 
GitLab