From 8c7cc855ff9cc0037c86ba17b06539942d02bb44 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Tue, 21 Nov 2017 20:16:30 +0100
Subject: [PATCH] register component accessors in set component

---
 .../src/core/components/setComponents.hpp     | 30 +++++++++++++++++--
 1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/alib2common/src/core/components/setComponents.hpp b/alib2common/src/core/components/setComponents.hpp
index f24dd9cb28..356e94f2c1 100644
--- a/alib2common/src/core/components/setComponents.hpp
+++ b/alib2common/src/core/components/setComponents.hpp
@@ -232,9 +232,33 @@ public:
 	}
 
 	static void registerComponent ( ) {
-		std::array < std::string, 0 > names;
-		ComponentType & ( Derived::* method ) ( ) = & SetComponent < Derived, ComponentType, typename ComponentType::value_type, ComponentName >::get;
-		abstraction::AlgorithmRegistry::registerMethod < ComponentName > ( method, "get", names );
+		std::array < std::string, 0 > emptyNames;
+		std::array < std::string, 1 > elementNames = { { "element" } };
+		std::array < std::string, 1 > dataNames = { { "data" } };
+
+		ComponentType & ( Derived::* getMethod ) ( ) = & SetComponent < Derived, ComponentType, typename ComponentType::value_type, ComponentName >::get;
+		abstraction::AlgorithmRegistry::registerMethod < ComponentName > ( getMethod, "get", emptyNames );
+
+		const ComponentType & ( Derived::* constGetMethod ) ( ) const = & SetComponent < Derived, ComponentType, typename ComponentType::value_type, ComponentName >::get;
+		abstraction::AlgorithmRegistry::registerMethod < ComponentName > ( constGetMethod, "get", emptyNames );
+
+		void ( Derived::* setMethod ) ( ComponentType ) = & SetComponent < Derived, ComponentType, typename ComponentType::value_type, ComponentName >::set;
+		abstraction::AlgorithmRegistry::registerMethod < ComponentName > ( setMethod, "set", dataNames );
+
+		bool ( Derived::* addElement ) ( typename ComponentType::value_type ) = & SetComponent < Derived, ComponentType, typename ComponentType::value_type, ComponentName >::add;
+		abstraction::AlgorithmRegistry::registerMethod < ComponentName > ( addElement, "add", elementNames );
+
+		void ( Derived::* addSet ) ( ComponentType ) = & SetComponent < Derived, ComponentType, typename ComponentType::value_type, ComponentName >::add;
+		abstraction::AlgorithmRegistry::registerMethod < ComponentName > ( addSet, "add", dataNames );
+
+		bool ( Derived::* removeElement ) ( const typename ComponentType::value_type & ) = & SetComponent < Derived, ComponentType, typename ComponentType::value_type, ComponentName >::remove;
+		abstraction::AlgorithmRegistry::registerMethod < ComponentName > ( removeElement, "remove", elementNames );
+
+		void ( Derived::* removeSet ) ( const ComponentType & ) = & SetComponent < Derived, ComponentType, typename ComponentType::value_type, ComponentName >::remove;
+		abstraction::AlgorithmRegistry::registerMethod < ComponentName > ( removeSet, "remove", dataNames );
+
+		bool ( Derived::* emptyMethod ) ( ) const = & SetComponent < Derived, ComponentType, typename ComponentType::value_type, ComponentName >::empty;
+		abstraction::AlgorithmRegistry::registerMethod < ComponentName > ( emptyMethod, "empty", emptyNames );
 	}
 };
 
-- 
GitLab