50 while (elem_a !=
nullptr && elem_b !=
nullptr) {
54 elem_a = elem_a->
next;
55 elem_b = elem_b->
next;
57 if (elem_a ==
nullptr && elem_b ==
nullptr) {
196 elem->base.type = type;
289 new_elem->
id = old_elem->id;
301 new_elem->
node_id = old_elem->node_id;
313 new_elem->
node_id = old_elem->node_id;
320 new_elem->iteration = old_elem->iteration;
328 new_elem->index = old_elem->index;
335 new_elem->evaluate_node_id = old_elem->evaluate_node_id;
336 new_elem->source_node_tree = old_elem->source_node_tree;
347 if (a->
type !=
b->type) {
359 return a_elem->
id == b_elem->id;
369 return a_elem->
node_id == b_elem->node_id;
379 return a_elem->
node_id == b_elem->node_id;
386 a_elem->iteration == b_elem->iteration);
393 a_elem->index == b_elem->index);
399 a_elem->evaluate_node_id == b_elem->evaluate_node_id &&
400 a_elem->source_node_tree == b_elem->source_node_tree;
412 return get_default_hash(elem.
type, typed_elem.id ? typed_elem.id->session_uid : 0);
416 return get_default_hash(elem.
type, typed_elem.modifier_uid);
420 return get_default_hash(elem.
type, typed_elem.node_id);
424 return get_default_hash(elem.
type, typed_elem.sim_output_node_id);
428 return get_default_hash(elem.
type, typed_elem.node_id);
432 return get_default_hash(elem.
type, typed_elem.repeat_output_node_id, typed_elem.iteration);
437 return get_default_hash(elem.
type, typed_elem.zone_output_node_id, typed_elem.index);
441 return get_default_hash(
443 typed_elem.evaluate_node_id,
444 typed_elem.source_output_node_id,
445 typed_elem.source_node_tree ?
446 reinterpret_cast<const ID *
>(typed_elem.source_node_tree)->
session_uid :
@ IDWALK_CB_DIRECT_WEAK_LINK
#define BKE_LIB_FOREACHID_PROCESS_ID(data_, id_, cb_flag_)
@ VIEWER_PATH_EQUAL_FLAG_IGNORE_ITERATION
@ VIEWER_PATH_EQUAL_FLAG_CONSIDER_UI_NAME
#define BLI_assert_unreachable()
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_string(BlendDataReader *reader, char **ptr_p)
void BLO_write_string(BlendWriter *writer, const char *data_ptr)
#define BLO_read_struct_list(reader, struct_name, list)
@ VIEWER_PATH_ELEM_TYPE_GROUP_NODE
@ VIEWER_PATH_ELEM_TYPE_SIMULATION_ZONE
@ VIEWER_PATH_ELEM_TYPE_FOREACH_GEOMETRY_ELEMENT_ZONE
@ VIEWER_PATH_ELEM_TYPE_VIEWER_NODE
@ VIEWER_PATH_ELEM_TYPE_REPEAT_ZONE
@ VIEWER_PATH_ELEM_TYPE_MODIFIER
@ VIEWER_PATH_ELEM_TYPE_EVALUATE_CLOSURE
@ VIEWER_PATH_ELEM_TYPE_ID
Read Guarded memory(de)allocation.
BMesh const char void * data
unsigned long long int uint64_t
IDRemapperApplyResult apply(ID **r_id_ptr, IDRemapperApplyOptions options, ID *id_self=nullptr) const
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
uint64_t get_default_hash(const T &v, const Args &...args)
int32_t source_output_node_id
int repeat_output_node_id
int32_t sim_output_node_id
struct ViewerPathElem * next
void BKE_viewer_path_copy(ViewerPath *dst, const ViewerPath *src)
void BKE_viewer_path_id_remap(ViewerPath *viewer_path, const blender::bke::id::IDRemapper &mappings)
uint64_t BKE_viewer_path_elem_hash(const ViewerPathElem &elem)
EvaluateClosureNodeViewerPathElem * BKE_viewer_path_elem_new_evaluate_closure()
ViewerPathElem * BKE_viewer_path_elem_copy(const ViewerPathElem *src)
ViewerNodeViewerPathElem * BKE_viewer_path_elem_new_viewer_node()
ViewerPathElem * BKE_viewer_path_elem_new(const ViewerPathElemType type)
void BKE_viewer_path_elem_free(ViewerPathElem *elem)
void BKE_viewer_path_foreach_id(LibraryForeachIDData *data, ViewerPath *viewer_path)
void BKE_viewer_path_clear(ViewerPath *viewer_path)
void BKE_viewer_path_init(ViewerPath *viewer_path)
SimulationZoneViewerPathElem * BKE_viewer_path_elem_new_simulation_zone()
ForeachGeometryElementZoneViewerPathElem * BKE_viewer_path_elem_new_foreach_geometry_element_zone()
GroupNodeViewerPathElem * BKE_viewer_path_elem_new_group_node()
static T * make_elem(const ViewerPathElemType type)
IDViewerPathElem * BKE_viewer_path_elem_new_id()
bool BKE_viewer_path_elem_equal(const ViewerPathElem *a, const ViewerPathElem *b, const ViewerPathEqualFlag flag)
ModifierViewerPathElem * BKE_viewer_path_elem_new_modifier()
void BKE_viewer_path_blend_read_data(BlendDataReader *reader, ViewerPath *viewer_path)
uint64_t BKE_viewer_path_hash(const ViewerPath &viewer_path)
bool BKE_viewer_path_equal(const ViewerPath *a, const ViewerPath *b, const ViewerPathEqualFlag flag)
RepeatZoneViewerPathElem * BKE_viewer_path_elem_new_repeat_zone()
void BKE_viewer_path_blend_write(BlendWriter *writer, const ViewerPath *viewer_path)