[Bf-blender-cvs] [cca48e2d00f] functions: different way to store Type Relations

Jacques Lucke noreply at git.blender.org
Mon Feb 18 18:19:24 CET 2019


Commit: cca48e2d00fa52372e15074cbcd67c8e34f726f0
Author: Jacques Lucke
Date:   Mon Feb 18 17:22:52 2019 +0100
Branches: functions
https://developer.blender.org/rBcca48e2d00fa52372e15074cbcd67c8e34f726f0

different way to store Type Relations

===================================================================

M	source/blender/functions/core/type_relations.cpp
M	source/blender/functions/core/type_relations.hpp
M	source/blender/functions/types/numeric.cpp

===================================================================

diff --git a/source/blender/functions/core/type_relations.cpp b/source/blender/functions/core/type_relations.cpp
index 913d391baf0..69257605121 100644
--- a/source/blender/functions/core/type_relations.cpp
+++ b/source/blender/functions/core/type_relations.cpp
@@ -2,15 +2,30 @@
 
 namespace FN {
 
-	const char *ListTypeInfo::identifier_in_composition()
+	void ListTypeRelations::insert(
+		SharedType &base_type,
+		SharedType &list_type,
+		SharedFunction &get_element,
+		SharedFunction &set_element)
 	{
-		return "List Type Info";
-	}
+		BLI_assert(base_type == list_type);
 
-	void ListTypeInfo::free_self(void *value)
-	{
-		ListTypeInfo *v = (ListTypeInfo *)value;
-		delete v;
+		BLI_assert(get_element->signature().has_interface(
+			{list_type, m_index_type},
+			{base_type}));
+
+		BLI_assert(set_element->signature().has_interface(
+			{list_type, m_index_type, base_type},
+			{list_type}));
+
+		Relation relation = {
+			base_type,
+			list_type,
+			get_element,
+			set_element
+		};
+
+		m_relations.append(relation);
 	}
 
 } /* namespace FN */
\ No newline at end of file
diff --git a/source/blender/functions/core/type_relations.hpp b/source/blender/functions/core/type_relations.hpp
index 2092e4fb726..569510864f0 100644
--- a/source/blender/functions/core/type_relations.hpp
+++ b/source/blender/functions/core/type_relations.hpp
@@ -1,17 +1,30 @@
+#pragma once
+
 #include "core.hpp"
+#include "vector"
 
 namespace FN {
 
-	class ListTypeInfo {
+	class ListTypeRelations {
 	private:
-		SharedType m_base_type;
+		struct Relation {
+			SharedType base_type;
+			SharedType list_type;
+			SharedFunction get_element;
+			SharedFunction set_element;
+		};
+
+		SharedType m_index_type;
+		SmallVector<Relation> m_relations;
 
 	public:
-		static const char *identifier_in_composition();
-		static void free_self(void *value);
+		ListTypeRelations(SharedType &index_type);
 
-		ListTypeInfo(SharedType &base_type)
-			: m_base_type(base_type) {}
+		void insert(
+			SharedType &base_type,
+			SharedType &list_type,
+			SharedFunction &get_element,
+			SharedFunction &set_element);
 	};
 
 } /* namespace FN */
\ No newline at end of file
diff --git a/source/blender/functions/types/numeric.cpp b/source/blender/functions/types/numeric.cpp
index b617c810566..b3b4ac231e0 100644
--- a/source/blender/functions/types/numeric.cpp
+++ b/source/blender/functions/types/numeric.cpp
@@ -33,7 +33,6 @@ namespace FN { namespace Types {
 	{
 		SharedType type = SharedType::New("Float List");
 		type->extend(new CPPTypeInfoForType<SmallVector<float>>());
-		type->extend(new ListTypeInfo(get_float_type()));
 		return type;
 	}



More information about the Bf-blender-cvs mailing list