85 const std::shared_ptr<const FieldInputs> &
field_inputs()
const;
113 operator bool()
const
115 return node_ !=
nullptr;
204 static_assert(std::is_same_v<T, U>);
215static constexpr bool is_field_v = std::is_base_of_v<detail::TypedFieldBase, T> &&
216 !std::is_same_v<detail::TypedFieldBase, T>;
226 std::shared_ptr<const mf::MultiFunction> owned_function_;
242 static std::shared_ptr<FieldOperation>
Create(std::shared_ptr<const mf::MultiFunction> function,
337 struct OutputPointerInfo {
351 bool is_evaluated_ =
false;
359 : context_(context), mask_(*
mask)
365 : context_(context), mask_(scope_.construct<
IndexMask>(
size))
385 selection_field_ = std::move(selection);
431 output_pointer_infos_.
append(OutputPointerInfo{
451 return evaluated_varrays_[field_index];
490 const FieldContext &context,
571 return this == &other;
602 int output_counter = 0;
606 if (output_counter == output_index) {
#define BLI_assert_unreachable()
#define UNUSED_VARS_NDEBUG(...)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static const CPPType & get()
VArray< T > typed() const
int64_t append_and_get_index(const T &value)
void append(const T &value)
FieldConstant(const CPPType &type, const void *value)
const CPPType & type() const
const CPPType & output_cpp_type(int output_index) const override
~FieldConstant() override
virtual GVArray get_varray_for_input(const FieldInput &field_input, const IndexMask &mask, ResourceScope &scope) const
virtual ~FieldContext()=default
FieldEvaluator(const FieldContext &context, const int64_t size)
FieldEvaluator(const FieldContext &context, const IndexMask *mask)
void set_selection(Field< bool > selection)
int add(GField field, GVArray *varray_ptr)
IndexMask get_evaluated_as_mask(int field_index)
int add(Field< T > field, VArray< T > *varray_ptr)
IndexMask get_evaluated_selection_as_mask() const
int add_with_destination(Field< T > field, MutableSpan< T > dst)
VArray< T > get_evaluated(const int field_index)
int add_with_destination(GField field, GVMutableArray dst)
const GVArray & get_evaluated(const int field_index) const
int add_with_destination(Field< T > field, VMutableArray< T > dst)
FieldNodeType node_type() const
virtual void for_each_field_input_recursive(FunctionRef< void(const FieldInput &)> fn) const
std::shared_ptr< const FieldInputs > field_inputs_
virtual bool is_equal_to(const FieldNode &other) const
virtual uint64_t hash() const
virtual const CPPType & output_cpp_type(int output_index) const =0
FieldNode(FieldNodeType node_type)
bool depends_on_input() const
const std::shared_ptr< const FieldInputs > & field_inputs() const
static std::shared_ptr< FieldOperation > Create(std::shared_ptr< const mf::MultiFunction > function, Vector< GField > inputs={})
Span< GField > inputs() const
static std::shared_ptr< FieldOperation > Create(const mf::MultiFunction &function, Vector< GField > inputs={})
~FieldOperation() override
FieldOperation(std::shared_ptr< const mf::MultiFunction > function, Vector< GField > inputs={})
const CPPType & output_cpp_type(int output_index) const override
const mf::MultiFunction & multi_function() const
Field(std::shared_ptr< FieldNode > node, const int node_output_index=0)
GFieldBase(NodePtr node, const int node_output_index)
const CPPType & cpp_type() const
const FieldNode & node() const
int node_output_index() const
friend bool operator==(const GFieldBase &a, const GFieldBase &b)
GFieldRef(const FieldNode &node, const int node_output_index=0)
GFieldRef(const GField &field)
GField(std::shared_ptr< FieldNode > node, const int node_output_index=0)
const CPPType & single_type() const
ParamType param_type(int param_index) const
IndexRange param_indices() const
const DataType & data_type() const
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
bool operator==(const FieldNode &a, const FieldNode &b)
bool operator!=(const FieldNode &a, const FieldNode &b)
GField make_constant_field(const CPPType &type, const void *value)
Vector< GVArray > evaluate_fields(ResourceScope &scope, Span< GFieldRef > fields_to_evaluate, const IndexMask &mask, const FieldContext &context, Span< GVMutableArray > dst_varrays={})
GField make_field_constant_if_possible(GField field)
Field< bool > invert_boolean_field(const Field< bool > &field)
void evaluate_constant_field(const GField &field, void *r_value)
static constexpr bool is_field_v
uint64_t get_default_hash(const T &v, const Args &...args)
unsigned __int64 uint64_t