From 1316f85edd36823172534ac5c92d1ada1cf99576 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Fri, 21 Apr 2017 13:40:34 +0200 Subject: [PATCH] + missing str callbacks for AnyObject set/unsigned --- .../src/object/ObjectToStringComposer.cpp | 43 +++------- alib2str/src/object/ObjectToStringComposer.h | 81 +++++++++++++++++++ 2 files changed, 90 insertions(+), 34 deletions(-) diff --git a/alib2str/src/object/ObjectToStringComposer.cpp b/alib2str/src/object/ObjectToStringComposer.cpp index 955e1d22bd..8ade7fa43d 100644 --- a/alib2str/src/object/ObjectToStringComposer.cpp +++ b/alib2str/src/object/ObjectToStringComposer.cpp @@ -52,33 +52,16 @@ void ObjectToStringComposer::compose(std::ostream& out, const Void&) { auto ObjectToStringComposerVoid = ObjectBaseDispatcher::RegistratorWrapper<void, Void>(ObjectToStringComposer::compose); -template < class T, class R > -void ObjectToStringComposer::compose(std::ostream& out, const container::ObjectsPair < T, R > & object) { - out << '<'; - compose(out, object.first); - out << ", "; - compose(out, object.second); - out << '>'; -} +auto ObjectToStringComposerAnyObjectSet = ObjectBaseDispatcher::RegistratorWrapper<void, AnyObject < std::set < Object > > >(ObjectToStringComposer::compose); -auto ObjectToStringComposerObjectsPair = ObjectBaseDispatcher::RegistratorWrapper<void, container::ObjectsPair < Object, Object > >(ObjectToStringComposer::compose); +auto ObjectToStringComposerAnyObjectUnsigned = ObjectBaseDispatcher::RegistratorWrapper<void, AnyObject < unsigned > >(ObjectToStringComposer::compose); -template < class T > -void ObjectToStringComposer::compose(std::ostream& out, const container::ObjectsSet < T > & object) { - out << '['; - bool first = true; - for(const T & innerObject : object) { - if(!first) - out << ", "; - else - first = false; - compose(out, innerObject); - } - out << ']'; -} +auto ObjectToStringComposerObjectsPair = ObjectBaseDispatcher::RegistratorWrapper<void, container::ObjectsPair < Object, Object > >(ObjectToStringComposer::compose); auto ObjectToStringComposerObjectsSet = ObjectBaseDispatcher::RegistratorWrapper<void, container::ObjectsSet < Object > >(ObjectToStringComposer::compose); +auto ObjectToStringComposerObjectsVector = ObjectBaseDispatcher::RegistratorWrapper<void, container::ObjectsVector < Object > >(ObjectToStringComposer::compose); + // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- void ObjectToStringComposer::compose(std::ostream& out, const primitive::String& primitive) { @@ -105,6 +88,10 @@ void ObjectToStringComposer::compose(std::ostream& out, const primitive::Unsigne auto ObjectToStringComposerUnsigned = ObjectBaseDispatcher::RegistratorWrapper<void, primitive::Unsigned>(ObjectToStringComposer::compose); +void ObjectToStringComposer::compose(std::ostream& out, unsigned primitive) { + out << primitive; +} + void ObjectToStringComposer::compose(std::ostream& out, const primitive::Bool& primitive) { out << (primitive.getData() ? "true" : "false"); } @@ -191,12 +178,6 @@ void ObjectToStringComposer::compose(std::ostream& out, const alphabet::StartSym auto ObjectToStringComposerStartSymbol = ObjectBaseDispatcher::RegistratorWrapper<void, alphabet::StartSymbol>(ObjectToStringComposer::compose); -template < class SymbolType, class RankType > -void ObjectToStringComposer::compose(std::ostream& out, const alphabet::RankedSymbol < SymbolType, RankType > & symbol) { - compose(out, symbol.getSymbol()); - compose(out, symbol.getRank()); -} - auto ObjectToStringComposerRankedSymbol = ObjectBaseDispatcher::RegistratorWrapper<void, alphabet::RankedSymbol < > >(ObjectToStringComposer::compose); void ObjectToStringComposer::compose(std::ostream& out, const alphabet::BarSymbol&) { @@ -217,12 +198,6 @@ void ObjectToStringComposer::compose(std::ostream& out, const alphabet::SubtreeW auto ObjectToStringComposerSubtreeWildcardSymbol = ObjectBaseDispatcher::RegistratorWrapper<void, alphabet::SubtreeWildcardSymbol>(ObjectToStringComposer::compose); -template < class SymbolType > -void ObjectToStringComposer::compose(std::ostream& out, const alphabet::NonlinearVariableSymbol < SymbolType > & symbol ) { - out << "$"; - compose(out, symbol.getSymbol()); -} - auto ObjectToStringComposerNonlinearVariableSymbol = ObjectBaseDispatcher::RegistratorWrapper<void, alphabet::NonlinearVariableSymbol < > >(ObjectToStringComposer::compose); void ObjectToStringComposer::compose(std::ostream& out, const alphabet::UniqueSymbol& symbol) { diff --git a/alib2str/src/object/ObjectToStringComposer.h b/alib2str/src/object/ObjectToStringComposer.h index 5cc79d1933..0ca79aff1e 100644 --- a/alib2str/src/object/ObjectToStringComposer.h +++ b/alib2str/src/object/ObjectToStringComposer.h @@ -14,6 +14,7 @@ #include <object/Void.h> #include <container/ObjectsPair.h> #include <container/ObjectsSet.h> +#include <container/ObjectsVector.h> #include "alphabet/LabeledSymbol.h" #include "alphabet/StartSymbol.h" @@ -59,6 +60,7 @@ public: static void compose(std::ostream& output, const primitive::String& primitive); static void compose(std::ostream& output, const primitive::Character& primitive); static void compose(std::ostream& output, const primitive::Unsigned& primitive); + static void compose(std::ostream& output, unsigned primitive); static void compose(std::ostream& output, const primitive::Bool& primitive); /** @@ -111,15 +113,94 @@ public: */ static void compose(std::ostream& output, const Object& object); static void compose(std::ostream& output, const Void& object); + template < class T > + static void compose(std::ostream& output, const AnyObject < T > & object); template < class T, class R > static void compose(std::ostream& output, const container::ObjectsPair < T, R > & object); + template < class T, class R > + static void compose(std::ostream& output, const std::pair < T, R > & object); template < class T > static void compose(std::ostream& output, const container::ObjectsSet < T > & object); + template < class T > + static void compose(std::ostream& output, const std::set < T > & object); + template < class T > + static void compose(std::ostream& output, const container::ObjectsVector < T > & object); + template < class T > + static void compose(std::ostream& output, const std::vector < T > & object); static void compose(std::ostream& output, const CommonBaseBase& object); static void compose(std::ostream& output, const WrapperBaseBase& object); }; +template < class SymbolType, class RankType > +void ObjectToStringComposer::compose(std::ostream& out, const alphabet::RankedSymbol < SymbolType, RankType > & symbol) { + compose(out, symbol.getSymbol()); + compose(out, symbol.getRank()); +} + +template < class SymbolType > +void ObjectToStringComposer::compose(std::ostream& out, const alphabet::NonlinearVariableSymbol < SymbolType > & symbol ) { + out << "$"; + compose(out, symbol.getSymbol()); +} + +template < class T > +void ObjectToStringComposer::compose(std::ostream& out, const AnyObject < T > & object) { + compose ( out, object.getData ( ) ); +} + +template < class T, class R > +void ObjectToStringComposer::compose(std::ostream& out, const container::ObjectsPair < T, R > & object) { + compose ( out, static_cast < const std::pair < T, R > > ( object ) ); +} + +template < class T, class R > +void ObjectToStringComposer::compose(std::ostream& out, const std::pair < T, R > & object) { + out << '<'; + compose(out, object.first); + out << ", "; + compose(out, object.second); + out << '>'; +} + +template < class T > +void ObjectToStringComposer::compose(std::ostream& out, const container::ObjectsSet < T > & object) { + compose ( out, static_cast < const std::set < T > > ( object ) ); +} + +template < class T > +void ObjectToStringComposer::compose(std::ostream& out, const std::set < T > & object) { + out << '['; + bool first = true; + for(const T & innerObject : object) { + if(!first) + out << ", "; + else + first = false; + compose(out, innerObject); + } + out << ']'; +} + +template < class T > +void ObjectToStringComposer::compose(std::ostream& out, const container::ObjectsVector < T > & object) { + compose ( out, static_cast < const std::vector < T > > ( object ) ); +} + +template < class T > +void ObjectToStringComposer::compose(std::ostream& out, const std::vector < T > & object) { + out << '['; + bool first = true; + for(const T & innerObject : object) { + if(!first) + out << ", "; + else + first = false; + compose(out, innerObject); + } + out << ']'; +} + } /* namespace alib */ #endif /* OBJECT_TO_STRING_COMPOSER_H_ */ -- GitLab