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