Blender V4.3
object_identifier.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2019 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
5
6#include "BKE_duplilist.hh"
7
8namespace blender::io {
9
11 Object *duplicated_by,
12 const PersistentID &persistent_id)
13 : object(object), duplicated_by(duplicated_by), persistent_id(persistent_id)
14{
15}
16
21
23{
24 if (context == nullptr) {
25 return for_graph_root();
26 }
27 if (context->duplicator != nullptr) {
28 return ObjectIdentifier(context->object, context->duplicator, context->persistent_id);
29 }
30 return for_real_object(context->object);
31}
32
34 Object *duplicated_by)
35{
36 return ObjectIdentifier(dupli_object->ob, duplicated_by, PersistentID(dupli_object));
37}
38
43
45{
46 return object == nullptr;
47}
48
49bool operator<(const ObjectIdentifier &obj_ident_a, const ObjectIdentifier &obj_ident_b)
50{
51 if (obj_ident_a.object != obj_ident_b.object) {
52 return obj_ident_a.object < obj_ident_b.object;
53 }
54
55 if (obj_ident_a.duplicated_by != obj_ident_b.duplicated_by) {
56 return obj_ident_a.duplicated_by < obj_ident_b.duplicated_by;
57 }
58
59 if (obj_ident_a.duplicated_by == nullptr) {
60 /* Both are real objects, no need to check the persistent ID. */
61 return false;
62 }
63
64 /* Same object, both are duplicated, use the persistent IDs to determine order. */
65 return obj_ident_a.persistent_id < obj_ident_b.persistent_id;
66}
67
68bool operator==(const ObjectIdentifier &obj_ident_a, const ObjectIdentifier &obj_ident_b)
69{
70 if (obj_ident_a.object != obj_ident_b.object) {
71 return false;
72 }
73 if (obj_ident_a.duplicated_by != obj_ident_b.duplicated_by) {
74 return false;
75 }
76 if (obj_ident_a.duplicated_by == nullptr) {
77 return true;
78 }
79
80 /* Same object, both are duplicated, use the persistent IDs to determine equality. */
81 return obj_ident_a.persistent_id == obj_ident_b.persistent_id;
82}
83
84} // namespace blender::io
static ObjectIdentifier for_graph_root()
static ObjectIdentifier for_duplicated_object(const DupliObject *dupli_object, Object *duplicated_by)
static ObjectIdentifier for_real_object(Object *object)
static ObjectIdentifier for_hierarchy_context(const HierarchyContext *context)
ObjectIdentifier(Object *object, Object *duplicated_by, const PersistentID &persistent_id)
bool operator<(const PersistentID &persistent_id_a, const PersistentID &persistent_id_b)
bool operator==(const PersistentID &persistent_id_a, const PersistentID &persistent_id_b)