106 bool is_trivial_ =
false;
107 bool is_trivially_destructible_ =
false;
108 bool has_special_member_functions_ =
false;
110 void (*default_construct_)(
void *
ptr) =
nullptr;
113 void (*value_initialize_)(
void *
ptr) =
nullptr;
116 void (*destruct_)(
void *
ptr) =
nullptr;
119 void (*copy_assign_)(
const void *
src,
void *dst) =
nullptr;
123 void (*copy_construct_)(
const void *
src,
void *dst) =
nullptr;
127 void (*move_assign_)(
void *
src,
void *dst) =
nullptr;
130 void (*move_construct_)(
void *
src,
void *dst) =
nullptr;
133 void (*relocate_assign_)(
void *
src,
void *dst) =
nullptr;
136 void (*relocate_construct_)(
void *
src,
void *dst) =
nullptr;
139 void (*fill_assign_indices_)(
const void *value,
void *dst,
IndexMask mask) =
nullptr;
141 void (*fill_construct_indices_)(
const void *value,
void *dst,
IndexMask mask) =
nullptr;
143 void (*print_)(
const void *value, std::stringstream &ss) =
nullptr;
144 bool (*is_equal_)(
const void *
a,
const void *
b) =
nullptr;
145 uint64_t (*hash_)(
const void *value) =
nullptr;
147 const void *default_value_ =
nullptr;
148 std::string debug_name_;
176 static const CPPType &
type = CPPType::get_impl<std::remove_cv_t<T>>();
221 return is_trivially_destructible_;
238 return default_construct_ !=
nullptr;
243 return copy_assign_ !=
nullptr;
248 return move_assign_ !=
nullptr;
253 return destruct_ !=
nullptr;
258 return copy_assign_ !=
nullptr;
263 return copy_construct_ !=
nullptr;
268 return print_ !=
nullptr;
273 return is_equal_ !=
nullptr;
278 return hash_ !=
nullptr;
292 return has_special_member_functions_;
320 default_construct_(
ptr);
332 default_construct_indices_(
ptr,
mask);
345 value_initialize_(
ptr);
357 value_initialize_indices_(
ptr,
mask);
398 copy_assign_(
src, dst);
410 BLI_assert(
mask.size() == 0 || this->pointer_can_point_to_instance(dst));
412 copy_assign_indices_(
src, dst,
mask);
422 BLI_assert(
mask.size() == 0 || this->pointer_can_point_to_instance(dst));
424 copy_assign_compressed_(
src, dst,
mask);
441 copy_construct_(
src, dst);
453 BLI_assert(
mask.size() == 0 || this->pointer_can_point_to_instance(dst));
455 copy_construct_indices_(
src, dst,
mask);
465 BLI_assert(
mask.size() == 0 || this->pointer_can_point_to_instance(dst));
467 copy_construct_compressed_(
src, dst,
mask);
483 move_assign_(
src, dst);
495 BLI_assert(
mask.size() == 0 || this->pointer_can_point_to_instance(dst));
497 move_assign_indices_(
src, dst,
mask);
514 move_construct_(
src, dst);
526 BLI_assert(
mask.size() == 0 || this->pointer_can_point_to_instance(dst));
528 move_construct_indices_(
src, dst,
mask);
545 relocate_assign_(
src, dst);
557 BLI_assert(
mask.size() == 0 || this->pointer_can_point_to_instance(dst));
559 relocate_assign_indices_(
src, dst,
mask);
576 relocate_construct_(
src, dst);
588 BLI_assert(
mask.size() == 0 || this->pointer_can_point_to_instance(dst));
590 relocate_construct_indices_(
src, dst,
mask);
605 BLI_assert(
mask.size() == 0 || this->pointer_can_point_to_instance(value));
606 BLI_assert(
mask.size() == 0 || this->pointer_can_point_to_instance(dst));
608 fill_assign_indices_(value, dst,
mask);
623 BLI_assert(
mask.size() == 0 || this->pointer_can_point_to_instance(value));
624 BLI_assert(
mask.size() == 0 || this->pointer_can_point_to_instance(dst));
626 fill_construct_indices_(value, dst,
mask);
631 return size_ <= buffer_size && alignment_ <= buffer_alignment;
634 void print(
const void *value, std::stringstream &ss)
const
642 std::stringstream ss;
643 this->
print(value, ss);
650 this->
print(value, ss);
661 return is_equal_(
a,
b);
681 return this->
hash(value);
683 return fallback_hash;
692 return default_value_;
705 template<
typename T>
bool is()
const
707 return this == &CPPType::get<std::decay_t<T>>();
722 using Callback =
void (*)(
const Fn &fn);
729 (callback_map.
add_new(&CPPType::get<Types>(),
732 fn.template operator()<Types>();
753 template<
typename Fn>
struct TypeTagExecutor {
763 fn(type_tag<void>{});
777 TypeTagExecutor<Fn> executor{fn};
785 #define BUFFER_FOR_CPP_TYPE_VALUE(type, variable_name) \
786 blender::DynamicStackBuffer<64, 64> stack_buffer_for_##variable_name((type).size(), \
787 (type).alignment()); \
788 void *variable_name = stack_buffer_for_##variable_name.buffer();
#define ENUM_OPERATORS(_type, _max)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
void destruct_indices(void *ptr, IndexMask mask) const
void relocate_construct_indices(void *src, void *dst, IndexMask mask) const
bool is_copy_constructible() const
void copy_construct_n(const void *src, void *dst, int64_t n) const
void(*)(void *) destruct_fn() const
void value_initialize_indices(void *ptr, IndexMask mask) const
void to_static_type(const Fn &fn) const
void default_construct_n(void *ptr, int64_t n) const
void fill_assign_indices(const void *value, void *dst, IndexMask mask) const
virtual ~CPPType()=default
void destruct_n(void *ptr, int64_t n) const
void move_construct_n(void *src, void *dst, int64_t n) const
void default_construct_indices(void *ptr, IndexMask mask) const
void fill_assign_n(const void *value, void *dst, int64_t n) const
uint64_t hash_or_fallback(const void *value, uint64_t fallback_hash) const
bool is_equal(const void *a, const void *b) const
void copy_assign_indices(const void *src, void *dst, IndexMask mask) const
void relocate_assign_n(void *src, void *dst, int64_t n) const
void move_assign(void *src, void *dst) const
bool is_printable() const
std::string to_string(const void *value) const
void fill_construct_n(const void *value, void *dst, int64_t n) const
bool is_move_assignable() const
void relocate_construct(void *src, void *dst) const
void move_assign_n(void *src, void *dst, int64_t n) const
bool is_equal_or_false(const void *a, const void *b) const
bool has_special_member_functions() const
friend bool operator!=(const CPPType &a, const CPPType &b)
StringRefNull name() const
static const CPPType & get()
void copy_assign_n(const void *src, void *dst, int64_t n) const
bool is_equality_comparable() const
void value_initialize_n(void *ptr, int64_t n) const
void copy_construct_compressed(const void *src, void *dst, IndexMask mask) const
void copy_assign_compressed(const void *src, void *dst, IndexMask mask) const
uint64_t hash(const void *value) const
CPPType(CPPTypeParam< T, Flags >, StringRef debug_name)
void copy_construct(const void *src, void *dst) const
void destruct(void *ptr) const
bool pointer_has_valid_alignment(const void *ptr) const
bool is_default_constructible() const
void fill_construct_indices(const void *value, void *dst, IndexMask mask) const
bool is_copy_assignable() const
int64_t alignment() const
bool is_destructible() const
bool is_move_constructible() const
void print_or_default(const void *value, std::stringstream &ss, StringRef default_value) const
void copy_assign(const void *src, void *dst) const
static const CPPType & get_impl()
void to_static_type_tag(const Fn &fn) const
void move_construct(void *src, void *dst) const
bool can_exist_in_buffer(const int64_t buffer_size, const int64_t buffer_alignment) const
void relocate_assign_indices(void *src, void *dst, IndexMask mask) const
void print(const void *value, std::stringstream &ss) const
const void * default_value() const
bool pointer_can_point_to_instance(const void *ptr) const
void relocate_construct_n(void *src, void *dst, int64_t n) const
bool is_trivially_destructible() const
void move_assign_indices(void *src, void *dst, IndexMask mask) const
void relocate_assign(void *src, void *dst) const
void default_construct(void *ptr) const
friend bool operator==(const CPPType &a, const CPPType &b)
void value_initialize(void *ptr) const
void move_construct_indices(void *src, void *dst, IndexMask mask) const
void copy_construct_indices(const void *src, void *dst, IndexMask mask) const
Value lookup_default(const Key &key, const Value &default_value) const
void add_new(const Key &key, const Value &value)
DEGForeachIDComponentCallback callback
SyclQueue void void * src
SyclQueue void void size_t num_bytes void
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
uint64_t get_default_hash(const T &v)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
_W64 unsigned int uintptr_t
unsigned __int64 uint64_t