Blender  V3.3
BKE_lib_query.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2014 Blender Foundation. All rights reserved. */
3 #pragma once
4 
21 #include "BLI_sys_types.h"
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 struct ID;
28 struct IDProperty;
29 struct Main;
30 
31 /* Tips for the callback for cases it's gonna to modify the pointer. */
32 enum {
36 
42 
48  IDWALK_CB_EMBEDDED = (1 << 3),
49 
54  IDWALK_CB_LOOPBACK = (1 << 4),
55 
58 
61 
67  IDWALK_CB_INTERNAL = (1 << 7),
68 
73  IDWALK_CB_USER = (1 << 8),
79  IDWALK_CB_USER_ONE = (1 << 9),
80 };
81 
82 enum {
88 };
89 
90 typedef struct LibraryIDLinkCallbackData {
91  void *user_data;
93  struct Main *bmain;
98  struct ID *id_owner;
103  struct ID *id_self;
104  struct ID **id_pointer;
105  int cb_flag;
107 
114 
115 /* Flags for the foreach function itself. */
116 enum {
119  IDWALK_READONLY = (1 << 0),
128  IDWALK_RECURSE = (1 << 1),
130  IDWALK_INCLUDE_UI = (1 << 2),
133 
137 };
138 
140 
147  struct ID **id_pp,
148  int cb_flag);
151  int cb_flag,
152  bool do_replace);
153 
154 #define BKE_LIB_FOREACHID_PROCESS_ID(_data, _id, _cb_flag) \
155  { \
156  CHECK_TYPE_ANY((_id), ID *, void *); \
157  BKE_lib_query_foreachid_process((_data), (ID **)&(_id), (_cb_flag)); \
158  if (BKE_lib_query_foreachid_iter_stop((_data))) { \
159  return; \
160  } \
161  } \
162  ((void)0)
163 
164 #define BKE_LIB_FOREACHID_PROCESS_IDSUPER(_data, _id_super, _cb_flag) \
165  { \
166  CHECK_TYPE(&((_id_super)->id), ID *); \
167  BKE_lib_query_foreachid_process((_data), (ID **)&(_id_super), (_cb_flag)); \
168  if (BKE_lib_query_foreachid_iter_stop((_data))) { \
169  return; \
170  } \
171  } \
172  ((void)0)
173 
174 #define BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(_data, _func_call) \
175  { \
176  _func_call; \
177  if (BKE_lib_query_foreachid_iter_stop((_data))) { \
178  return; \
179  } \
180  } \
181  ((void)0)
182 
189 void BKE_library_foreach_ID_embedded(struct LibraryForeachIDData *data, struct ID **id_pp);
191 
196  struct Main *bmain, struct ID *id, LibraryIDLinkCallback callback, void *user_data, int flag);
200 void BKE_library_update_ID_link_user(struct ID *id_dst, struct ID *id_src, int cb_flag);
201 
212 int BKE_library_ID_use_ID(struct ID *id_user, struct ID *id_used);
213 
220 bool BKE_library_id_can_use_idtype(struct ID *id_owner, short id_type_used);
221 
226 
230 bool BKE_library_ID_is_locally_used(struct Main *bmain, void *idv);
234 bool BKE_library_ID_is_indirectly_used(struct Main *bmain, void *idv);
240  void *idv,
241  bool *is_used_local,
242  bool *is_used_linked);
243 
260  int tag,
261  bool do_local_ids,
262  bool do_linked_ids,
263  bool do_tag_recursive,
264  int *r_num_tagged);
265 
275 void BKE_library_unused_linked_data_set_tag(struct Main *bmain, bool do_init_tag);
285 
286 #ifdef __cplusplus
287 }
288 #endif
bool BKE_lib_query_foreachid_iter_stop(struct LibraryForeachIDData *data)
Definition: lib_query.c:63
void BKE_lib_query_foreachid_process(struct LibraryForeachIDData *data, struct ID **id_pp, int cb_flag)
Definition: lib_query.c:68
void BKE_library_unused_linked_data_set_tag(struct Main *bmain, bool do_init_tag)
Definition: lib_query.c:874
int(* LibraryIDLinkCallback)(LibraryIDLinkCallbackData *cb_data)
bool BKE_library_id_can_use_idtype(struct ID *id_owner, short id_type_used)
Definition: lib_query.c:484
void BKE_library_foreach_ID_link(struct Main *bmain, struct ID *id, LibraryIDLinkCallback callback, void *user_data, int flag)
Definition: lib_query.c:350
void BKE_library_update_ID_link_user(struct ID *id_dst, struct ID *id_src, int cb_flag)
Definition: lib_query.c:356
@ IDWALK_RECURSE
@ IDWALK_INCLUDE_UI
@ IDWALK_NOP
@ IDWALK_READONLY
@ IDWALK_DO_INTERNAL_RUNTIME_POINTERS
@ IDWALK_IGNORE_EMBEDDED_ID
bool BKE_library_ID_is_locally_used(struct Main *bmain, void *idv)
Definition: lib_query.c:610
void BKE_library_foreach_ID_embedded(struct LibraryForeachIDData *data, struct ID **id_pp)
Definition: lib_query.c:147
bool BKE_library_ID_is_indirectly_used(struct Main *bmain, void *idv)
Definition: lib_query.c:615
void BKE_lib_query_idpropertiesForeachIDLink_callback(struct IDProperty *id_prop, void *user_data)
Definition: lib_query.c:136
void BKE_library_ID_test_usages(struct Main *bmain, void *idv, bool *is_used_local, bool *is_used_linked)
Definition: lib_query.c:620
int BKE_lib_query_foreachid_process_flags_get(struct LibraryForeachIDData *data)
Definition: lib_query.c:109
void BKE_lib_query_unused_ids_tag(struct Main *bmain, int tag, bool do_local_ids, bool do_linked_ids, bool do_tag_recursive, int *r_num_tagged)
Definition: lib_query.c:778
@ IDWALK_CB_LOOPBACK
Definition: BKE_lib_query.h:54
@ IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE
Definition: BKE_lib_query.h:60
@ IDWALK_CB_NEVER_SELF
Definition: BKE_lib_query.h:35
@ IDWALK_CB_USER_ONE
Definition: BKE_lib_query.h:79
@ IDWALK_CB_USER
Definition: BKE_lib_query.h:73
@ IDWALK_CB_INTERNAL
Definition: BKE_lib_query.h:67
@ IDWALK_CB_EMBEDDED
Definition: BKE_lib_query.h:48
@ IDWALK_CB_NEVER_NULL
Definition: BKE_lib_query.h:34
@ IDWALK_CB_OVERRIDE_LIBRARY_REFERENCE
Definition: BKE_lib_query.h:57
@ IDWALK_CB_NOP
Definition: BKE_lib_query.h:33
@ IDWALK_CB_INDIRECT_USAGE
Definition: BKE_lib_query.h:41
int BKE_library_ID_use_ID(struct ID *id_user, struct ID *id_used)
Definition: lib_query.c:562
@ IDWALK_RET_STOP_RECURSION
Definition: BKE_lib_query.h:87
@ IDWALK_RET_STOP_ITER
Definition: BKE_lib_query.h:85
@ IDWALK_RET_NOP
Definition: BKE_lib_query.h:83
struct LibraryIDLinkCallbackData LibraryIDLinkCallbackData
void BKE_library_indirectly_used_data_tag_clear(struct Main *bmain)
Definition: lib_query.c:903
int BKE_lib_query_foreachid_process_callback_flag_override(struct LibraryForeachIDData *data, int cb_flag, bool do_replace)
Definition: lib_query.c:114
uint64_t BKE_library_id_can_use_filter_id(const struct ID *id_owner)
void * user_data
DEGForeachIDComponentCallback callback
unsigned __int64 uint64_t
Definition: stdint.h:90
Definition: DNA_ID.h:368
Definition: BKE_main.h:121