28 #ifdef DEBUG_OVERRIDE_TIMEIT
42 #include "RNA_prototypes.h"
64 const char *rna_path_prefix =
NULL;
66 if (r_rna_path !=
NULL) {
83 owner_id = ((
Key *)
id)->from;
84 rna_path_prefix =
"shape_keys.";
96 if (r_rna_path ==
NULL) {
102 *r_rna_path = rna_path;
103 if (rna_path_prefix !=
NULL) {
104 *r_rna_path =
BLI_sprintfN(
"%s%s", rna_path_prefix, rna_path);
168 const bool is_overridable)
241 if (
ELEM(
NULL, prop_dst, prop_src)) {
247 .subitem_reference_index = index,
248 .subitem_local_index = index,
251 bmain,
ptr, fromptr,
NULL, prop_dst, prop_src,
NULL,
NULL,
NULL,
NULL, &opop);
257 const char *rna_path,
258 const size_t rna_path_len,
283 if (ptr_a ==
NULL && ptr_b ==
NULL) {
286 if (ptr_a ==
NULL || ptr_b ==
NULL) {
328 const char *rna_path,
329 const size_t rna_path_len,
360 const bool is_array_a = prop_a->
is_array;
361 const bool is_array_b = prop_b->
is_array;
363 if (is_array_a != is_array_b) {
366 return is_array_a ? 1 : -1;
373 if (len_a != len_b) {
376 return len_a > len_b ? 1 : -1;
379 if (is_array_a && len_a == 0) {
389 override_diff =
NULL;
395 override_diff =
NULL;
400 if (override_diff ==
NULL) {
405 if (override_diff ==
NULL) {
407 "'%s' gives unmatching or NULL RNA diff callbacks, should not happen (%d vs. %d)",
415 bool override_changed =
false;
422 const int diff = override_diff(bmain,
431 if (override_changed && r_report_flags) {
450 int len_local, len_reference, len_storage = 0;
451 bool changed =
false;
453 if (ptr_storage ==
NULL) {
464 if (len_local != len_reference || len_local != len_storage) {
475 override_store =
NULL;
481 override_store =
NULL;
486 if (override_store ==
NULL) {
493 override_store =
NULL;
496 if (override_store ==
NULL) {
498 "'%s' gives unmatching or NULL RNA store callbacks, should not happen (%d vs. %d)",
508 if (!
ELEM(opop->operation,
515 if (override_store(bmain,
545 int len_dst, len_src, len_storage = 0;
547 const short override_op = opop->
operation;
550 opop, ptr_dst, ptr_src, ptr_storage, prop_dst, prop_src, prop_storage)) {
563 override_apply =
NULL;
569 override_apply =
NULL;
574 if (override_apply ==
NULL) {
581 override_apply =
NULL;
584 if (override_apply ==
NULL) {
586 "'%s' gives unmatching or NULL RNA apply callbacks, should not happen (%d vs. %d)",
588 prop_dst->identifier,
602 if (len_dst != len_src || (ptr_storage && len_dst != len_storage)) {
609 const bool success = override_apply(bmain,
629 const char *root_path,
630 const size_t root_path_len,
637 bool matching =
true;
647 #ifdef DEBUG_OVERRIDE_TIMEIT
648 static float _sum_time_global = 0.0f;
649 static float _num_time_global = 0.0f;
650 double _timeit_time_global;
651 static float _sum_time_diffing = 0.0f;
652 static float _delta_time_diffing = 0.0f;
653 static int _num_delta_time_diffing = 0.0f;
654 static float _num_time_diffing = 0.0f;
655 double _timeit_time_diffing;
658 _delta_time_diffing = 0.0f;
659 _num_delta_time_diffing = 0;
723 #define RNA_PATH_BUFFSIZE 8192
726 char *rna_path = rna_path_buffer;
727 size_t rna_path_len = 0;
731 BLI_assert(strlen(root_path) == root_path_len);
733 const char *prop_name = prop_local.
identifier;
734 const size_t prop_name_len = strlen(prop_name);
738 rna_path_len = root_path_len + 1 + prop_name_len;
740 rna_path =
MEM_mallocN(rna_path_len + 1, __func__);
743 memcpy(rna_path, root_path, root_path_len);
744 rna_path[root_path_len] =
'.';
745 memcpy(rna_path + root_path_len + 1, prop_name, prop_name_len);
746 rna_path[rna_path_len] =
'\0';
749 rna_path_len = root_path_len + 2 + prop_name_len + 2;
751 rna_path =
MEM_mallocN(rna_path_len + 1, __func__);
754 memcpy(rna_path, root_path, root_path_len);
755 rna_path[root_path_len] =
'[';
756 rna_path[root_path_len + 1] =
'"';
757 memcpy(rna_path + root_path_len + 2, prop_name, prop_name_len);
758 rna_path[root_path_len + 2 + prop_name_len] =
'"';
759 rna_path[root_path_len + 2 + prop_name_len + 1] =
']';
760 rna_path[rna_path_len] =
'\0';
766 if (rna_path !=
NULL) {
767 rna_path_len = strlen(rna_path);
770 if (rna_path ==
NULL) {
777 if (ignore_overridden && op !=
NULL) {
780 if (rna_path != rna_path_buffer) {
786 #ifdef DEBUG_OVERRIDE_TIMEIT
803 #ifdef DEBUG_OVERRIDE_TIMEIT
806 _delta_time_diffing += _delta_time;
807 _num_delta_time_diffing++;
811 matching = matching &&
diff == 0;
812 if (r_report_flags) {
813 *r_report_flags |= report_flags;
832 .subitem_reference_index = -1,
833 .subitem_local_index = -1,
846 if (r_report_flags) {
854 "overriding data on non-editable property.");
863 if (!(do_create || do_restore)) {
865 if (rna_path != rna_path_buffer) {
873 if (rna_path != rna_path_buffer) {
876 #undef RNA_PATH_BUFFSIZE
880 #ifdef DEBUG_OVERRIDE_TIMEIT
883 _sum_time_global += _delta_time;
885 _sum_time_diffing += _delta_time_diffing;
887 printf(
"ID: %s\n", ((
ID *)ptr_local->
owner_id)->name);
888 printf(
"time end (%s): %.6f\n", __func__, _delta_time);
889 printf(
"time averaged (%s): %.6f (total: %.6f, in %d runs)\n",
891 (_sum_time_global / _num_time_global),
893 (
int)_num_time_global);
894 printf(
"diffing time end (%s): %.6f (in %d runs)\n",
897 _num_delta_time_diffing);
898 printf(
"diffing time averaged (%s): %.6f (total: %.6f, in %d runs)\n",
900 (_sum_time_diffing / _num_time_diffing),
902 (
int)_num_time_diffing);
915 bool changed =
false;
917 #ifdef DEBUG_OVERRIDE_TIMEIT
948 #ifdef DEBUG_OVERRIDE_TIMEIT
981 if (prop_storage !=
NULL) {
1029 if (prop_storage !=
NULL) {
1047 *r_ptr_item_dst = private_ptr_item_dst;
1048 *r_ptr_item_src = private_ptr_item_src;
1049 if (prop_storage !=
NULL) {
1050 *r_ptr_item_storage = private_ptr_item_storage;
1056 if ((*r_ptr_item_dst)->type ==
NULL &&
1061 "Failed to find destination sub-item '%s' (%d) of '%s' in new override data '%s'",
1067 if ((*r_ptr_item_src)->type ==
NULL &&
1072 "Failed to find source sub-item '%s' (%d) of '%s' in old override data '%s'",
1119 (id_dst->
lib == id_src->
lib && id_dst != id_owner_dst))) {
1124 CLOG_INFO(&
LOG, 3,
"Local override %s detected as needing resync", id_owner_dst->
name);
1139 const bool do_insert)
1142 if (!do_insert != !
ELEM(opop->operation,
1155 PointerRNA private_ptr_item_dst, private_ptr_item_src, private_ptr_item_storage;
1165 &private_ptr_item_dst,
1166 &private_ptr_item_src,
1167 &private_ptr_item_storage,
1184 "Failed to apply '%s' override operation on %s\n",
1203 #ifdef DEBUG_OVERRIDE_TIMEIT
1210 bool do_insert =
false;
1211 for (
int i = 0; i < 2; i++, do_insert =
true) {
1219 ptr_dst, op->rna_path, &data_dst, &prop_dst, &data_item_dst) &&
1221 ptr_src, op->rna_path, &data_src, &prop_src, &data_item_src)) {
1229 ptr_storage, op->rna_path, &data_storage, &prop_storage, &data_item_storage);
1247 bmain, ptr_dst, ptr_src, &prop_ptr_dst, &prop_ptr_src);
1262 PointerRNA private_ptr_item_dst, private_ptr_item_src;
1272 &private_ptr_item_dst,
1273 &private_ptr_item_src,
1279 bmain, ptr_dst, ptr_src, ptr_item_dst, ptr_item_src);
1306 if (id_dst !=
NULL) {
1309 "%s: Ignoring local override on ID pointer property '%s', as requested by "
1310 "RNA_OVERRIDE_APPLY_FLAG_IGNORE_ID_POINTERS flag",
1321 prop_storage ? &data_storage :
NULL,
1327 prop_storage ? &data_item_storage :
NULL,
1334 "Failed to apply library override operation to '%s.%s' "
1335 "(could not resolve some properties, local: %d, override: %d)",
1346 ID *id_dst = ptr_dst->
data;
1347 ID *id_src = ptr_src->
data;
1354 #ifdef DEBUG_OVERRIDE_TIMEIT
1367 if (rna_path !=
NULL) {
1369 (*r_owner_id)->override_library, rna_path);
1383 if (r_created !=
NULL) {
1388 if (rna_path !=
NULL) {
1413 op,
NULL,
NULL, index, index, strict, r_strict);
1420 const short operation,
1426 if (r_created !=
NULL) {
1437 op, operation,
NULL,
NULL, index, index, strict, r_strict, r_created);
1445 uint override_status = 0;
1448 return override_status;
1456 bmain,
ptr, prop, index,
false,
NULL);
1467 return override_status;
typedef float(TangentPoint)[2]
void BKE_pose_ensure(struct Main *bmain, struct Object *ob, struct bArmature *arm, bool do_id_user)
bool IDP_AddToGroup(struct IDProperty *group, struct IDProperty *prop) ATTR_NONNULL()
struct IDProperty * IDP_CopyProperty(const struct IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
const struct IDTypeInfo * BKE_idtype_get_info_from_id(const struct ID *id)
struct IDOverrideLibraryProperty * BKE_lib_override_library_property_get(struct IDOverrideLibrary *override, const char *rna_path, bool *r_created)
struct IDOverrideLibraryPropertyOperation * BKE_lib_override_library_property_operation_find(struct IDOverrideLibraryProperty *override_property, const char *subitem_refname, const char *subitem_locname, int subitem_refindex, int subitem_locindex, bool strict, bool *r_strict)
struct IDOverrideLibraryProperty * BKE_lib_override_library_property_find(struct IDOverrideLibrary *override, const char *rna_path)
void BKE_lib_override_library_operations_tag(struct IDOverrideLibraryProperty *override_property, short tag, bool do_set)
struct IDOverrideLibraryPropertyOperation * BKE_lib_override_library_property_operation_get(struct IDOverrideLibraryProperty *override_property, short operation, const char *subitem_refname, const char *subitem_locname, int subitem_refindex, int subitem_locindex, bool strict, bool *r_strict, bool *r_created)
bool BKE_lib_override_library_property_operation_operands_validate(struct IDOverrideLibraryPropertyOperation *override_property_operation, struct PointerRNA *ptr_dst, struct PointerRNA *ptr_src, struct PointerRNA *ptr_storage, struct PropertyRNA *prop_dst, struct PropertyRNA *prop_src, struct PropertyRNA *prop_storage)
#define BLI_assert_unreachable()
#define BLI_assert_msg(a, msg)
#define LISTBASE_FOREACH(type, var, list)
size_t size_t char * BLI_sprintfN(const char *__restrict format,...) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_PRINTF_FORMAT(1
#define CLOG_ERROR(clg_ref,...)
#define CLOG_INFO(clg_ref, level,...)
ID and Library types, which are fundamental for sdna.
@ IDOVERRIDE_LIBRARY_FLAG_LOCKED
@ IDOVERRIDE_LIBRARY_FLAG_MANDATORY
@ IDOVERRIDE_LIBRARY_FLAG_IDPOINTER_MATCH_REFERENCE
#define ID_IS_OVERRIDE_LIBRARY_REAL(_id)
@ IDP_FLAG_OVERRIDABLE_LIBRARY
#define ID_IS_LINKED(_id)
@ IDOVERRIDE_LIBRARY_OP_MULTIPLY
@ IDOVERRIDE_LIBRARY_OP_INSERT_AFTER
@ IDOVERRIDE_LIBRARY_OP_NOOP
@ IDOVERRIDE_LIBRARY_OP_SUBTRACT
@ IDOVERRIDE_LIBRARY_OP_ADD
@ IDOVERRIDE_LIBRARY_OP_INSERT_BEFORE
@ IDOVERRIDE_LIBRARY_OP_REPLACE
@ LIB_TAG_LIB_OVERRIDE_NEED_RESYNC
@ LIB_EMBEDDED_DATA_LIB_OVERRIDE
#define ID_IS_OVERRIDE_LIBRARY(_id)
@ LIBRARY_TAG_RESYNC_REQUIRED
@ IDOVERRIDE_LIBRARY_TAG_UNUSED
@ IDOVERRIDE_LIBRARY_FLAG_NO_HIERARCHY
@ NLATRACK_OVERRIDELIBRARY_LOCAL
@ CAM_BGIMG_FLAG_OVERRIDE_LIBRARY_LOCAL
@ CONSTRAINT_OVERRIDE_LIBRARY_LOCAL
@ eGpencilModifierFlag_OverrideLibrary_Local
@ eModifierFlag_OverrideLibrary_Local
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
Utility defines for timing/benchmarks.
#define TIMEIT_START_AVERAGED(var)
#define TIMEIT_END_AVERAGED(var)
#define RNA_POINTER_INVALIDATE(ptr)
@ RNA_OVERRIDE_STATUS_OVERRIDABLE
@ RNA_OVERRIDE_STATUS_MANDATORY
@ RNA_OVERRIDE_STATUS_OVERRIDDEN
@ RNA_OVERRIDE_STATUS_LOCKED
@ RNA_OVERRIDE_APPLY_FLAG_IGNORE_ID_POINTERS
@ RNA_OVERRIDE_COMPARE_IGNORE_OVERRIDDEN
@ RNA_OVERRIDE_COMPARE_CREATE
@ RNA_OVERRIDE_COMPARE_IGNORE_NON_OVERRIDABLE
@ RNA_OVERRIDE_COMPARE_RESTORE
@ RNA_EQ_UNSET_MATCH_NONE
@ RNA_OVERRIDE_MATCH_RESULT_RESTORED
@ RNA_OVERRIDE_MATCH_RESULT_CREATED
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
@ PROPOVERRIDE_NO_COMPARISON
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
IMETHOD Vector diff(const Vector &a, const Vector &b, double dt=1)
bool RNA_property_editable(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_struct_is_a(const StructRNA *type, const StructRNA *srna)
void rna_property_rna_or_id_get(PropertyRNA *prop, PointerRNA *ptr, PropertyRNAOrID *r_prop_rna_or_id)
PropertyRNA * rna_ensure_property(PropertyRNA *prop)
bool RNA_struct_is_ID(const StructRNA *type)
bool RNA_property_is_set(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_collection_begin(PointerRNA *ptr, PropertyRNA *prop, CollectionPropertyIterator *iter)
PropertyType RNA_property_type(PropertyRNA *prop)
PropertyRNA * rna_ensure_property_realdata(PropertyRNA **prop, PointerRNA *ptr)
PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_collection_lookup_int(PointerRNA *ptr, PropertyRNA *prop, int key, PointerRNA *r_ptr)
void rna_idproperty_touch(IDProperty *idprop)
IDProperty * RNA_struct_idprops(PointerRNA *ptr, bool create)
void RNA_property_collection_next(CollectionPropertyIterator *iter)
bool RNA_property_editable_flag(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_collection_lookup_string(PointerRNA *ptr, PropertyRNA *prop, const char *key, PointerRNA *r_ptr)
StructRNA * RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_collection_end(CollectionPropertyIterator *iter)
PropertyRNA * RNA_struct_iterator_property(StructRNA *type)
bool RNA_property_animated(PointerRNA *ptr, PropertyRNA *prop)
static void rna_porperty_override_collection_subitem_lookup(PointerRNA *ptr_dst, PointerRNA *ptr_src, PointerRNA *ptr_storage, PropertyRNA *prop_dst, PropertyRNA *prop_src, PropertyRNA *prop_storage, PointerRNA **r_ptr_item_dst, PointerRNA **r_ptr_item_src, PointerRNA **r_ptr_item_storage, PointerRNA *private_ptr_item_dst, PointerRNA *private_ptr_item_src, PointerRNA *private_ptr_item_storage, IDOverrideLibraryProperty *op, IDOverrideLibraryPropertyOperation *opop)
bool RNA_struct_equals(Main *bmain, PointerRNA *ptr_a, PointerRNA *ptr_b, eRNACompareMode mode)
static ID * rna_property_override_property_real_id_owner(Main *bmain, PointerRNA *ptr, PropertyRNA *prop, char **r_rna_path)
IDOverrideLibraryPropertyOperation * RNA_property_override_property_operation_get(Main *bmain, PointerRNA *ptr, PropertyRNA *prop, const short operation, const int index, const bool strict, bool *r_strict, bool *r_created)
static bool rna_property_override_operation_store(Main *bmain, PointerRNA *ptr_local, PointerRNA *ptr_reference, PointerRNA *ptr_storage, PropertyRNA *prop_local, PropertyRNA *prop_reference, PropertyRNA *prop_storage, IDOverrideLibraryProperty *op)
int RNA_property_override_flag(PropertyRNA *prop)
static bool rna_property_override_operation_apply(Main *bmain, PointerRNA *ptr_dst, PointerRNA *ptr_src, PointerRNA *ptr_storage, PropertyRNA *prop_dst, PropertyRNA *prop_src, PropertyRNA *prop_storage, PointerRNA *ptr_item_dst, PointerRNA *ptr_item_src, PointerRNA *ptr_item_storage, IDOverrideLibraryPropertyOperation *opop)
IDOverrideLibraryProperty * RNA_property_override_property_find(Main *bmain, PointerRNA *ptr, PropertyRNA *prop, ID **r_owner_id)
#define RNA_PATH_BUFFSIZE
IDOverrideLibraryPropertyOperation * RNA_property_override_property_operation_find(Main *bmain, PointerRNA *ptr, PropertyRNA *prop, const int index, const bool strict, bool *r_strict)
bool RNA_property_overridable_get(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_property_overridable_library_set(PointerRNA *UNUSED(ptr), PropertyRNA *prop, const bool is_overridable)
bool RNA_struct_override_store(Main *bmain, PointerRNA *ptr_local, PointerRNA *ptr_reference, PointerRNA *ptr_storage, IDOverrideLibrary *override)
void RNA_struct_override_apply(Main *bmain, PointerRNA *ptr_dst, PointerRNA *ptr_src, PointerRNA *ptr_storage, IDOverrideLibrary *override, const eRNAOverrideApplyFlag flag)
static int rna_property_override_diff(Main *bmain, PropertyRNAOrID *prop_a, PropertyRNAOrID *prop_b, const char *rna_path, const size_t rna_path_len, eRNACompareMode mode, IDOverrideLibrary *override, const eRNAOverrideMatch flags, eRNAOverrideMatchResult *r_report_flags)
bool RNA_property_overridden(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_property_comparable(PointerRNA *UNUSED(ptr), PropertyRNA *prop)
IDOverrideLibraryProperty * RNA_property_override_property_get(Main *bmain, PointerRNA *ptr, PropertyRNA *prop, bool *r_created)
eRNAOverrideStatus RNA_property_override_library_status(Main *bmain, PointerRNA *ptr, PropertyRNA *prop, const int index)
bool RNA_property_equals(Main *bmain, PointerRNA *ptr_a, PointerRNA *ptr_b, PropertyRNA *prop, eRNACompareMode mode)
bool RNA_struct_override_matches(Main *bmain, PointerRNA *ptr_local, PointerRNA *ptr_reference, const char *root_path, const size_t root_path_len, IDOverrideLibrary *override, const eRNAOverrideMatch flags, eRNAOverrideMatchResult *r_report_flags)
static void rna_property_override_check_resync(Main *bmain, PointerRNA *ptr_dst, PointerRNA *ptr_src, PointerRNA *ptr_item_dst, PointerRNA *ptr_item_src)
static void rna_property_override_apply_ex(Main *bmain, PointerRNA *ptr_dst, PointerRNA *ptr_src, PointerRNA *ptr_storage, PropertyRNA *prop_dst, PropertyRNA *prop_src, PropertyRNA *prop_storage, PointerRNA *ptr_item_dst, PointerRNA *ptr_item_src, PointerRNA *ptr_item_storage, IDOverrideLibraryProperty *op, const bool do_insert)
bool RNA_property_copy(Main *bmain, PointerRNA *ptr, PointerRNA *fromptr, PropertyRNA *prop, int index)
bool rna_property_override_store_default(struct Main *bmain, struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, struct PointerRNA *ptr_storage, struct PropertyRNA *prop_local, struct PropertyRNA *prop_reference, struct PropertyRNA *prop_storage, int len_local, int len_reference, int len_storage, struct IDOverrideLibraryPropertyOperation *opop)
int rna_property_override_diff_default(struct Main *bmain, struct PropertyRNAOrID *prop_a, struct PropertyRNAOrID *prop_b, int mode, struct IDOverrideLibrary *override, const char *rna_path, size_t rna_path_len, int flags, bool *r_override_changed)
bool rna_property_override_apply_default(struct Main *bmain, struct PointerRNA *ptr_dst, struct PointerRNA *ptr_src, struct PointerRNA *ptr_storage, struct PropertyRNA *prop_dst, struct PropertyRNA *prop_src, struct PropertyRNA *prop_storage, int len_dst, int len_src, int len_storage, struct PointerRNA *ptr_item_dst, struct PointerRNA *ptr_item_src, struct PointerRNA *ptr_item_storage, struct IDOverrideLibraryPropertyOperation *opop)
bool(* RNAPropOverrideApply)(struct Main *bmain, struct PointerRNA *ptr_dst, struct PointerRNA *ptr_src, struct PointerRNA *ptr_storage, struct PropertyRNA *prop_dst, struct PropertyRNA *prop_src, struct PropertyRNA *prop_storage, int len_dst, int len_src, int len_storage, struct PointerRNA *ptr_item_dst, struct PointerRNA *ptr_item_src, struct PointerRNA *ptr_item_storage, struct IDOverrideLibraryPropertyOperation *opop)
int(* RNAPropOverrideDiff)(struct Main *bmain, struct PropertyRNAOrID *prop_a, struct PropertyRNAOrID *prop_b, int mode, struct IDOverrideLibrary *override, const char *rna_path, size_t rna_path_len, int flags, bool *r_override_changed)
bool(* RNAPropOverrideStore)(struct Main *bmain, struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, struct PointerRNA *ptr_storage, struct PropertyRNA *prop_local, struct PropertyRNA *prop_reference, struct PropertyRNA *prop_storage, int len_local, int len_reference, int len_storage, struct IDOverrideLibraryPropertyOperation *opop)
ID * RNA_find_real_ID_and_path(Main *bmain, ID *id, const char **r_path)
bool RNA_path_resolve_property_and_item_pointer(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, PointerRNA *r_item_ptr)
char * RNA_path_from_ID_to_property(const PointerRNA *ptr, PropertyRNA *prop)
bool RNA_path_resolve_property(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
int subitem_reference_index
char * subitem_local_name
char * subitem_reference_name
unsigned int rna_prop_type
IDTypeLibOverrideApplyPost lib_override_apply_post
IDOverrideLibrary * override_library
RNAPropOverrideApply override_apply
RNAPropOverrideStore override_store
RNAPropOverrideDiff override_diff
double PIL_check_seconds_timer(void)
ccl_device_inline int mod(int x, int m)