Functions: Add debug print and destruct callback to CPPType

This commit is contained in:
Jacques Lucke
2020-07-07 18:39:24 +02:00
parent 4990e4dd01
commit a8627ea66d
2 changed files with 40 additions and 0 deletions

View File

@@ -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);
}