[Bf-blender-cvs] [da0169bca47] functions-experimental-refactor: simplify CPPType construction

Jacques Lucke noreply at git.blender.org
Sun Nov 3 14:30:55 CET 2019


Commit: da0169bca4739256812556d438f39cec033e225f
Author: Jacques Lucke
Date:   Sun Nov 3 12:08:34 2019 +0100
Branches: functions-experimental-refactor
https://developer.blender.org/rBda0169bca4739256812556d438f39cec033e225f

simplify CPPType construction

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

M	source/blender/functions2/intern/cpp_types.cc

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

diff --git a/source/blender/functions2/intern/cpp_types.cc b/source/blender/functions2/intern/cpp_types.cc
index 3a0b35d4a6f..f0c17c88735 100644
--- a/source/blender/functions2/intern/cpp_types.cc
+++ b/source/blender/functions2/intern/cpp_types.cc
@@ -4,19 +4,15 @@
 #include "DNA_object_types.h"
 
 #include "BLI_math_cxx.h"
-#include "BLI_vector.h"
 
 namespace FN {
 
-using BLI::Vector;
-
-static Vector<CPPType *, 4, BLI::RawAllocator> allocated_types;
+void init_cpp_types()
+{
+}
 
 void free_cpp_types()
 {
-  for (CPPType *type : allocated_types) {
-    delete type;
-  }
 }
 
 template<typename T> void ConstructDefault_CB(const CPPType *UNUSED(self), void *ptr)
@@ -63,63 +59,38 @@ template<typename T> void RelocateToUninitialized_CB(void *src, void *dst)
   BLI::uninitialized_relocate((T *)src, (T *)dst);
 }
 
-#define CPP_TYPE_DECLARE(IDENTIFIER) static CPPType *TYPE_##IDENTIFIER = nullptr
-
-CPP_TYPE_DECLARE(float);
-CPP_TYPE_DECLARE(bool);
-CPP_TYPE_DECLARE(ObjectPtr);
-CPP_TYPE_DECLARE(int32);
-CPP_TYPE_DECLARE(rgba_f);
-CPP_TYPE_DECLARE(float3);
-CPP_TYPE_DECLARE(string);
-
-#undef CPP_TYPE_DECLARE
-
-void init_cpp_types()
+template<typename T> static std::unique_ptr<const CPPType> create_cpp_type(StringRef name)
 {
-
-#define CPP_TYPE_CONSTRUCTION(IDENTIFIER, TYPE_NAME) \
-  TYPE_##IDENTIFIER = new CPPType( \
-      STRINGIFY(IDENTIFIER), \
-      sizeof(TYPE_NAME), \
-      alignof(TYPE_NAME), \
-      std::is_trivially_destructible<TYPE_NAME>::value, \
-      DefaultConstructor<TYPE_NAME, \
-                         std::is_default_constructible<TYPE_NAME>::value>::get_callback(), \
-      Destruct_CB<TYPE_NAME>, \
-      DestructN_CB<TYPE_NAME>, \
-      CopyToInitialized_CB<TYPE_NAME>, \
-      CopyToUninitialized_CB<TYPE_NAME>, \
-      RelocateToInitialized_CB<TYPE_NAME>, \
-      RelocateToUninitialized_CB<TYPE_NAME>, \
-      nullptr); \
-  allocated_types.append(TYPE_##IDENTIFIER)
-
-  CPP_TYPE_CONSTRUCTION(float, float);
-  CPP_TYPE_CONSTRUCTION(bool, bool);
-  CPP_TYPE_CONSTRUCTION(ObjectPtr, Object *);
-  CPP_TYPE_CONSTRUCTION(int32, int32_t);
-  CPP_TYPE_CONSTRUCTION(rgba_f, BLI::rgba_f);
-  CPP_TYPE_CONSTRUCTION(float3, BLI::float3);
-  CPP_TYPE_CONSTRUCTION(string, std::string);
-
-#undef CPP_TYPE_CONSTRUCTION
+  const CPPType *type = new CPPType(
+      name,
+      sizeof(T),
+      alignof(T),
+      std::is_trivially_destructible<T>::value,
+      DefaultConstructor<T, std::is_default_constructible<T>::value>::get_callback(),
+      Destruct_CB<T>,
+      DestructN_CB<T>,
+      CopyToInitialized_CB<T>,
+      CopyToUninitialized_CB<T>,
+      RelocateToInitialized_CB<T>,
+      RelocateToUninitialized_CB<T>,
+      nullptr);
+  return std::unique_ptr<const CPPType>(type);
 }
 
-#define CPP_TYPE_GETTER(IDENTIFIER, TYPE_NAME) \
+#define MAKE_CPP_TYPE(IDENTIFIER, TYPE_NAME) \
+  static std::unique_ptr<const CPPType> CPPTYPE_##IDENTIFIER = create_cpp_type<TYPE_NAME>( \
+      STRINGIFY(IDENTIFIER)); \
   template<> const CPPType &GET_TYPE<TYPE_NAME>() \
   { \
-    return *TYPE_##IDENTIFIER; \
+    return *CPPTYPE_##IDENTIFIER; \
   }
 
-CPP_TYPE_GETTER(float, float)
-CPP_TYPE_GETTER(bool, bool)
-CPP_TYPE_GETTER(ObjectPtr, Object *)
-CPP_TYPE_GETTER(int32, int32_t)
-CPP_TYPE_GETTER(rgba_f, BLI::rgba_f)
-CPP_TYPE_GETTER(float3, BLI::float3)
-CPP_TYPE_GETTER(string, std::string)
-
-#undef CPP_TYPE_GETTER
+MAKE_CPP_TYPE(float, float)
+MAKE_CPP_TYPE(bool, bool)
+MAKE_CPP_TYPE(ObjectPtr, Object *)
+MAKE_CPP_TYPE(int32, int32_t)
+MAKE_CPP_TYPE(rgba_f, BLI::rgba_f)
+MAKE_CPP_TYPE(float3, BLI::float3)
+MAKE_CPP_TYPE(string, std::string)
 
 }  // namespace FN



More information about the Bf-blender-cvs mailing list