From 956d893533ce079be3b56b29f7ff602e27c306ec Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Sun, 10 Feb 2019 19:37:59 +0100
Subject: [PATCH] allow to unpack set of Objects by explicit cast

---
 alib2common/src/PrimitiveRegistrator.cpp | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/alib2common/src/PrimitiveRegistrator.cpp b/alib2common/src/PrimitiveRegistrator.cpp
index 43bba9d747..11f7d76130 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 > ( );
-- 
GitLab