[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