From e14da2a2e709d1dd9739dd1d9d7632d448f5e39d Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Thu, 21 May 2015 01:44:06 +0200
Subject: [PATCH] unify data types specialisation

---
 alib2data/src/object/ObjectBase.h | 49 +++++++++++++++++++++----------
 1 file changed, 33 insertions(+), 16 deletions(-)

diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index 2682c9137c..5d13cb6a58 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -146,9 +146,11 @@ class UnrankedTree;
 
 namespace alib {
 
+// ----------------------------------------------------------------------------------------------------------------------
+
 class ObjectBase;
 
-typedef std::acceptor_base<ObjectBase,
+typedef std::tuple<
 			Void,
 			exception::AlibException,
 			automaton::DFA, automaton::NFA, automaton::MultiInitialStateNFA, automaton::EpsilonNFA, automaton::CompactNFA, automaton::ExtendedNFA, automaton::DFTA, automaton::NFTA, automaton::DPDA, automaton::SinglePopDPDA, automaton::InputDrivenDPDA, automaton::VisiblyPushdownDPDA, automaton::RealTimeHeightDeterministicDPDA, automaton::NPDA, automaton::SinglePopNPDA, automaton::InputDrivenNPDA, automaton::VisiblyPushdownNPDA, automaton::RealTimeHeightDeterministicNPDA, automaton::OneTapeDTM,
@@ -161,26 +163,41 @@ typedef std::acceptor_base<ObjectBase,
 			container::ObjectsSet, container::ObjectsVector, container::ObjectsPair, container::ObjectsMap,
 			primitive::String, primitive::Integer, primitive::Character, primitive::Unsigned, primitive::Bool,
 			tree::RankedTree, tree::PrefixRankedNotation, tree::UnrankedTree
-	> VisitableObjectBase;
+	> Types;
+
+// ----------------------------------------------------------------------------------------------------------------------
+
+template<typename T>
+class acceptor_base_helper {
+};
+
+template<typename ... Ts>
+class acceptor_base_helper< std::tuple< Ts ... > > :
+	public std::acceptor_base<
+			ObjectBase, Ts ...
+	> {
+};
+
+typedef acceptor_base_helper< Types > VisitableObjectBase;
 
-class ObjectBase :
+// ----------------------------------------------------------------------------------------------------------------------
+
+template<typename T>
+class ObjectBaseHelper {
+};
+
+template<typename ... Ts>
+class ObjectBaseHelper< std::tuple< Ts ... > >:
 	public alib::base<
-			ObjectBase,
-			Void,
-			exception::AlibException,
-			automaton::DFA, automaton::NFA, automaton::MultiInitialStateNFA, automaton::EpsilonNFA, automaton::CompactNFA, automaton::ExtendedNFA, automaton::DFTA, automaton::NFTA, automaton::DPDA, automaton::SinglePopDPDA, automaton::InputDrivenDPDA, automaton::VisiblyPushdownDPDA, automaton::RealTimeHeightDeterministicDPDA, automaton::NPDA, automaton::SinglePopNPDA, automaton::InputDrivenNPDA, automaton::VisiblyPushdownNPDA, automaton::RealTimeHeightDeterministicNPDA, automaton::OneTapeDTM,
-			grammar::LeftLG, grammar::LeftRG, grammar::RightLG, grammar::RightRG, grammar::LG, grammar::CFG, grammar::EpsilonFreeCFG, grammar::CNF, grammar::GNF, grammar::CSG, grammar::NonContractingGrammar, grammar::ContextPreservingUnrestrictedGrammar, grammar::UnrestrictedGrammar,
-			graph::DirectedGraph, graph::UndirectedGraph,
-			label::PrimitiveLabel, label::HexavigesimalLabel, label::ObjectLabel, label::LabelSetLabel, label::LabelPairLabel, label::UniqueLabel,
-			regexp::UnboundedRegExp, regexp::FormalRegExp,
-			string::Epsilon, string::LinearString, string::CyclicString,
-			alphabet::EndSymbol, alphabet::LabeledSymbol, alphabet::BlankSymbol, alphabet::BottomOfTheStackSymbol, alphabet::RankedSymbol, alphabet::BarSymbol, alphabet::RankedBarSymbol, alphabet::SubtreeWildcardSymbol, alphabet::SymbolPairSymbol, alphabet::SymbolSetSymbol, alphabet::UniqueSymbol, alphabet::StartSymbol,
-			container::ObjectsSet, container::ObjectsVector, container::ObjectsPair, container::ObjectsMap,
-			primitive::String, primitive::Integer, primitive::Character, primitive::Unsigned, primitive::Bool,
-			tree::RankedTree, tree::PrefixRankedNotation, tree::UnrankedTree
+			ObjectBase, Ts ...
 	>, public VisitableObjectBase, public std::cow_shared_ptr_base {
 };
 
+class ObjectBase : public ObjectBaseHelper< Types > {
+};
+
+// ----------------------------------------------------------------------------------------------------------------------
+
 } /* namespace alib */
 
 namespace std {
-- 
GitLab