diff options
author | Jacques Lucke <jacques@blender.org> | 2020-07-07 19:39:24 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2020-07-07 19:39:24 +0300 |
commit | a8627ea66d7825d676889e5e1b6fc915e5dd772f (patch) | |
tree | 86654a3fe0bbfc4f0868dc17c6d6cda7d956b5ec /source/blender/functions/FN_cpp_type.hh | |
parent | 4990e4dd01f2b085f5d1842dfa31d79e4df92fbd (diff) |
Functions: Add debug print and destruct callback to CPPType
Diffstat (limited to 'source/blender/functions/FN_cpp_type.hh')
-rw-r--r-- | source/blender/functions/FN_cpp_type.hh | 24 |
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); } |