diff --git a/alib2common/src/PrimitiveRegistrator.cpp b/alib2common/src/PrimitiveRegistrator.cpp index 43bba9d747a3b73a4d5def1f34de6ac74bdda45d..11f7d761309359e5b0fd2689f1dc6a92cb3f04dd 100644 --- a/alib2common/src/PrimitiveRegistrator.cpp +++ b/alib2common/src/PrimitiveRegistrator.cpp @@ -17,6 +17,14 @@ namespace { class PrimitiveRegistrator { + static const ext::set < object::Object > & denormalizeSetObject ( const object::Object & o ) { + const object::AnyObjectBase & data = o.getData ( ); + const object::AnyObject < ext::set < object::Object > > * innerData = dynamic_cast < const object::AnyObject < ext::set < object::Object > > * > ( & data ); + if ( innerData ) + return innerData->getData ( ); + throw std::invalid_argument ( "Casted object does not contain data of type " + ext::to_string < ext::set < object::Object > > ( ) + "." ); + } + public: PrimitiveRegistrator ( ) { abstraction::CastRegistry::registerCast < double, int > ( ); @@ -37,6 +45,8 @@ public: abstraction::CastRegistry::registerCast < long, int > ( "long", ext::to_string < int > ( ) ); + abstraction::CastRegistry::registerCastAlgorithm < const ext::set < object::Object > &, const object::Object & > ( "SetOfObjects", ext::to_string < object::Object > ( ), denormalizeSetObject, true ); + abstraction::ContainerRegistry::registerSet < int > ( ); abstraction::ValuePrinterRegistry::registerValuePrinter < int > ( );