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;
111 void (*default_construct_indices_)(
void *
ptr,
const IndexMask &
mask) =
nullptr;
113 void (*value_initialize_)(
void *
ptr) =
nullptr;
114 void (*value_initialize_indices_)(
void *
ptr,
const IndexMask &
mask) =
nullptr;
116 void (*destruct_)(
void *
ptr) =
nullptr;
119 void (*copy_assign_)(
const void *src,
void *dst) =
nullptr;
120 void (*copy_assign_indices_)(
const void *src,
void *dst,
const IndexMask &
mask) =
nullptr;
121 void (*copy_assign_compressed_)(
const void *src,
void *dst,
const IndexMask &
mask) =
nullptr;
123 void (*copy_construct_)(
const void *src,
void *dst) =
nullptr;
124 void (*copy_construct_indices_)(
const void *src,
void *dst,
const IndexMask &
mask) =
nullptr;
125 void (*copy_construct_compressed_)(
const void *src,
void *dst,
const IndexMask &
mask) =
nullptr;
127 void (*move_assign_)(
void *src,
void *dst) =
nullptr;
128 void (*move_assign_indices_)(
void *src,
void *dst,
const IndexMask &
mask) =
nullptr;
130 void (*move_construct_)(
void *src,
void *dst) =
nullptr;
131 void (*move_construct_indices_)(
void *src,
void *dst,
const IndexMask &
mask) =
nullptr;
133 void (*relocate_assign_)(
void *src,
void *dst) =
nullptr;
134 void (*relocate_assign_indices_)(
void *src,
void *dst,
const IndexMask &
mask) =
nullptr;
136 void (*relocate_construct_)(
void *src,
void *dst) =
nullptr;
137 void (*relocate_construct_indices_)(
void *src,
void *dst,
const IndexMask &
mask) =
nullptr;
139 void (*fill_assign_indices_)(
const void *value,
void *dst,
const IndexMask &
mask) =
nullptr;
141 void (*fill_construct_indices_)(
const void *value,
void *dst,
const 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_;
151 template<
typename T, CPPTypeFlags Flags>
222 return is_trivially_destructible_;
239 return default_construct_ !=
nullptr;
244 return copy_assign_ !=
nullptr;
249 return move_assign_ !=
nullptr;
254 return destruct_ !=
nullptr;
259 return copy_assign_ !=
nullptr;
264 return copy_construct_ !=
nullptr;
269 return print_ !=
nullptr;
274 return is_equal_ !=
nullptr;
279 return hash_ !=
nullptr;
293 return has_special_member_functions_;
321 default_construct_(
ptr);
331 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(
ptr));
333 default_construct_indices_(
ptr, mask);
346 value_initialize_(
ptr);
356 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(
ptr));
358 value_initialize_indices_(
ptr, mask);
383 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(
ptr));
385 destruct_indices_(
ptr, mask);
399 copy_assign_(src, dst);
410 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
411 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
413 copy_assign_indices_(src, dst, mask);
422 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
423 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
425 copy_assign_compressed_(src, dst, mask);
442 copy_construct_(src, dst);
453 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
454 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
456 copy_construct_indices_(src, dst, mask);
465 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
466 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
468 copy_construct_compressed_(src, dst, mask);
484 move_assign_(src, dst);
495 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
496 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
498 move_assign_indices_(src, dst, mask);
515 move_construct_(src, dst);
526 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
527 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
529 move_construct_indices_(src, dst, mask);
546 relocate_assign_(src, dst);
557 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
558 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
560 relocate_assign_indices_(src, dst, mask);
577 relocate_construct_(src, dst);
588 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
589 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
591 relocate_construct_indices_(src, dst, mask);
606 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(value));
607 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
609 fill_assign_indices_(value, dst, mask);
624 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(value));
625 BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
627 fill_construct_indices_(value, dst, mask);
632 return size_ <= buffer_size && alignment_ <= buffer_alignment;
635 void print(
const void *value, std::stringstream &ss)
const
641 std::string
to_string(
const void *value)
const;
649 return is_equal_(a,
b);
669 return this->
hash(value);
671 return fallback_hash;
680 return default_value_;
693 template<
typename T>
bool is()
const
698 template<
typename... T>
bool is_any()
const
700 return (this->is<T>() || ...);
715 using Callback = void (*)(
const Fn &fn);
725 fn.template operator()<Types>();
742 template<
typename Fn>
struct TypeTagExecutor {
745 template<
typename T>
void operator()()
const
750 void operator()()
const
766 TypeTagExecutor<Fn> executor{fn};
779#define BUFFER_FOR_CPP_TYPE_VALUE(type, variable_name) \
780 blender::DynamicStackBuffer<64, 64> stack_buffer_for_##variable_name((type).size(), \
781 (type).alignment()); \
782 void *variable_name = stack_buffer_for_##variable_name.buffer();
#define ENUM_OPERATORS(_type, _max)
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, const IndexMask &mask) const
void to_static_type(const Fn &fn) const
void default_construct_n(void *ptr, int64_t n) const
virtual ~CPPType()=default
void destruct_n(void *ptr, int64_t n) const
void copy_assign_indices(const void *src, void *dst, const IndexMask &mask) const
void move_construct_n(void *src, void *dst, int64_t n) 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 fill_construct_indices(const void *value, void *dst, const IndexMask &mask) const
void relocate_assign_n(void *src, void *dst, int64_t n) const
void copy_construct_indices(const void *src, void *dst, const IndexMask &mask) const
void fill_assign_indices(const void *value, void *dst, const IndexMask &mask) const
void move_assign(void *src, void *dst) const
bool is_printable() const
std::string to_string(const void *value) const
void move_assign_indices(void *src, void *dst, const IndexMask &mask) 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_impl()
static const CPPType & get()
void relocate_assign_indices(void *src, void *dst, const IndexMask &mask) const
void copy_construct_compressed(const void *src, void *dst, const IndexMask &mask) const
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
uint64_t hash(const void *value) const
void destruct_indices(void *ptr, const IndexMask &mask) const
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
bool is_copy_assignable() const
int64_t alignment() const
void default_construct_indices(void *ptr, const IndexMask &mask) 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
void to_static_type_tag(const Fn &fn) const
const void * default_value() 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 print(const void *value, std::stringstream &ss) 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
CPPType(TypeTag< T >, TypeForValue< CPPTypeFlags, Flags >, StringRef debug_name)
void relocate_assign(void *src, void *dst) const
void default_construct(void *ptr) const
void relocate_construct_indices(void *src, void *dst, const IndexMask &mask) const
void copy_assign_compressed(const void *src, void *dst, const IndexMask &mask) const
void move_construct_indices(void *src, void *dst, const IndexMask &mask) const
friend bool operator==(const CPPType &a, const CPPType &b)
void value_initialize(void *ptr) const
Value lookup_default(const Key &key, const Value &default_value) const
void add_new(const Key &key, const Value &value)
local_group_size(16, 16) .push_constant(Type b
DEGForeachIDComponentCallback callback
ccl_device_inline float4 mask(const int4 mask, const float4 a)
uint64_t get_default_hash(const T &v)
void register_cpp_types()
_W64 unsigned int uintptr_t
unsigned __int64 uint64_t