Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2020-07-07 19:39:24 +0300
committerJacques Lucke <jacques@blender.org>2020-07-07 19:39:24 +0300
commita8627ea66d7825d676889e5e1b6fc915e5dd772f (patch)
tree86654a3fe0bbfc4f0868dc17c6d6cda7d956b5ec /source/blender/functions
parent4990e4dd01f2b085f5d1842dfa31d79e4df92fbd (diff)
Functions: Add debug print and destruct callback to CPPType
Diffstat (limited to 'source/blender/functions')
-rw-r--r--source/blender/functions/FN_cpp_type.hh24
1 files changed, 24 insertions, 0 deletions
diff --git a/source/blender/functions/FN_cpp_type.hh b/source/blender/functions/FN_cpp_type.hh
index 1681ff9fe8c..63e841e9612 100644
--- a/source/blender/functions/FN_cpp_type.hh
+++ b/source/blender/functions/FN_cpp_type.hh
@@ -104,6 +104,8 @@ class CPPType {
using FillUninitializedF = void (*)(const void *value, void *dst, uint n);
using FillUninitializedIndicesF = void (*)(const void *value, void *dst, IndexMask index_mask);
+ using DebugPrintF = void (*)(const void *value, std::stringstream &ss);
+
CPPType(std::string name,
uint size,
uint alignment,
@@ -130,6 +132,7 @@ class CPPType {
FillInitializedIndicesF fill_initialized_indices,
FillUninitializedF fill_uninitialized,
FillUninitializedIndicesF fill_uninitialized_indices,
+ DebugPrintF debug_print,
const void *default_value)
: size_(size),
alignment_(alignment),
@@ -156,6 +159,7 @@ class CPPType {
fill_initialized_indices_(fill_initialized_indices),
fill_uninitialized_(fill_uninitialized),
fill_uninitialized_indices_(fill_uninitialized_indices),
+ debug_print_(debug_print),
default_value_(default_value),
name_(name)
{
@@ -277,6 +281,11 @@ class CPPType {
destruct_indices_(ptr, index_mask);
}
+ DestructF destruct_cb() const
+ {
+ return destruct_;
+ }
+
/**
* Copy an instance of this type from src to dst.
*
@@ -457,6 +466,12 @@ class CPPType {
fill_uninitialized_indices_(value, dst, index_mask);
}
+ void debug_print(const void *value, std::stringstream &ss) const
+ {
+ BLI_assert(this->pointer_can_point_to_instance(value));
+ debug_print_(value, ss);
+ }
+
/**
* Get a pointer to a constant value of this type. The specific value depends on the type.
* It is usually a zero-initialized or default constructed value.
@@ -523,6 +538,8 @@ class CPPType {
FillUninitializedF fill_uninitialized_;
FillUninitializedIndicesF fill_uninitialized_indices_;
+ DebugPrintF debug_print_;
+
const void *default_value_;
std::string name_;
};
@@ -683,6 +700,12 @@ void fill_uninitialized_indices_cb(const void *value, void *dst, IndexMask index
index_mask.foreach_index([&](uint i) { new (dst_ + i) T(value_); });
}
+template<typename T> void debug_print_cb(const void *value, std::stringstream &ss)
+{
+ const T &value_ = *(const T *)value;
+ ss << value_;
+}
+
} // namespace CPPTypeUtil
template<typename T>
@@ -715,6 +738,7 @@ static std::unique_ptr<const CPPType> create_cpp_type(StringRef name, const T &d
fill_initialized_indices_cb<T>,
fill_uninitialized_cb<T>,
fill_uninitialized_indices_cb<T>,
+ debug_print_cb<T>,
(const void *)&default_value);
return std::unique_ptr<const CPPType>(type);
}