Blender V4.5
BKE_lib_query.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2014 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4#pragma once
5
21
22#include "DNA_ID.h"
23
24#include "BLI_function_ref.hh"
25
26#include <array>
27
28struct IDTypeInfo;
30struct Main;
31
32/* Tips for the callback for cases it's gonna to modify the pointer. */
117
118enum {
132};
133
151
158
159/* Flags for the foreach function itself. */
235
242 ID **id_pp,
248 bool do_replace);
249
251#define BKE_LIB_FOREACHID_PROCESS_ID_NOCHECK(data_, id_, cb_flag_) \
252 { \
253 BKE_lib_query_foreachid_process((data_), (ID **)&(id_), (cb_flag_)); \
254 if (BKE_lib_query_foreachid_iter_stop((data_))) { \
255 return; \
256 } \
257 } \
258 ((void)0)
259
260#define BKE_LIB_FOREACHID_PROCESS_ID(data_, id_, cb_flag_) \
261 { \
262 CHECK_TYPE_ANY((id_), ID *, void *); \
263 BKE_LIB_FOREACHID_PROCESS_ID_NOCHECK(data_, id_, cb_flag_); \
264 } \
265 ((void)0)
266
267#define BKE_LIB_FOREACHID_PROCESS_IDSUPER_P(data_, id_super_p_, cb_flag_) \
268 { \
269 CHECK_TYPE(&((*(id_super_p_))->id), ID *); \
270 BKE_lib_query_foreachid_process((data_), (ID **)(id_super_p_), (cb_flag_)); \
271 if (BKE_lib_query_foreachid_iter_stop((data_))) { \
272 return; \
273 } \
274 } \
275 ((void)0)
276
277#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(data_, id_super_, cb_flag_) \
278 { \
279 BKE_LIB_FOREACHID_PROCESS_IDSUPER_P(data_, &(id_super_), cb_flag_); \
280 } \
281 ((void)0)
282
283#define BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(data_, func_call_) \
284 { \
285 func_call_; \
286 if (BKE_lib_query_foreachid_iter_stop((data_))) { \
287 return; \
288 } \
289 } \
290 ((void)0)
291
300
312 ID *id,
314 void *user_data,
316
347 Main *bmain,
348 ID *owner_id,
349 ID *self_id,
350 blender::FunctionRef<void(LibraryForeachIDData *data)> subdata_foreach_id,
352 void *user_data,
354
358void BKE_library_update_ID_link_user(ID *id_dst, ID *id_src, int cb_flag);
359
370int BKE_library_ID_use_ID(ID *id_user, ID *id_used);
371
378bool BKE_library_id_can_use_idtype(ID *owner_id, short id_type_used);
379
384 const bool include_ui,
385 const IDTypeInfo *owner_id_type = nullptr);
386
390bool BKE_library_ID_is_locally_used(Main *bmain, void *idv);
394bool BKE_library_ID_is_indirectly_used(Main *bmain, void *idv);
400 void *idv,
401 bool *r_is_used_local,
402 bool *r_is_used_linked);
403
407 bool do_local_ids = false;
409 bool do_linked_ids = false;
415 bool do_recursive = false;
416
424 blender::FunctionRef<bool(ID *id)> filter_fn = nullptr;
425
432 std::array<int, INDEX_ID_MAX> num_total;
439 std::array<int, INDEX_ID_MAX> num_local;
446 std::array<int, INDEX_ID_MAX> num_linked;
447};
448
487void BKE_lib_query_unused_ids_tag(Main *bmain, int tag, LibQueryUnusedIDsData &parameters);
488
498void BKE_library_unused_linked_data_set_tag(Main *bmain, bool do_init_tag);
void BKE_library_ID_test_usages(Main *bmain, void *idv, bool *r_is_used_local, bool *r_is_used_linked)
Definition lib_query.cc:633
void BKE_lib_query_foreachid_process(LibraryForeachIDData *data, ID **id_pp, LibraryForeachIDCallbackFlag cb_flag)
Definition lib_query.cc:78
void BKE_library_update_ID_link_user(ID *id_dst, ID *id_src, int cb_flag)
Definition lib_query.cc:440
bool BKE_library_ID_is_indirectly_used(Main *bmain, void *idv)
Definition lib_query.cc:628
void BKE_library_foreach_ID_embedded(LibraryForeachIDData *data, ID **id_pp)
Definition lib_query.cc:172
LibraryForeachIDCallbackFlag
@ IDWALK_CB_LOOPBACK
@ IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE
@ IDWALK_CB_NEVER_SELF
@ IDWALK_CB_USER_ONE
@ IDWALK_CB_USER
@ IDWALK_CB_INTERNAL
@ IDWALK_CB_EMBEDDED_NOT_OWNING
@ IDWALK_CB_EMBEDDED
@ IDWALK_CB_DIRECT_WEAK_LINK
@ IDWALK_CB_OVERRIDE_LIBRARY_HIERARCHY_DEFAULT
@ IDWALK_CB_NEVER_NULL
@ IDWALK_CB_READFILE_IGNORE
@ IDWALK_CB_OVERRIDE_LIBRARY_REFERENCE
@ IDWALK_CB_NOP
@ IDWALK_CB_INDIRECT_USAGE
int(LibraryIDLinkCallbackData *cb_data) LibraryIDLinkCallback
Main * BKE_lib_query_foreachid_process_main_get(const LibraryForeachIDData *data)
Definition lib_query.cc:134
bool BKE_library_id_can_use_idtype(ID *owner_id, short id_type_used)
Definition lib_query.cc:517
int BKE_library_ID_use_ID(ID *id_user, ID *id_used)
Definition lib_query.cc:575
void BKE_library_foreach_subdata_id(Main *bmain, ID *owner_id, ID *self_id, blender::FunctionRef< void(LibraryForeachIDData *data)> subdata_foreach_id, blender::FunctionRef< LibraryIDLinkCallback > callback, void *user_data, const LibraryForeachIDFlag flag)
Definition lib_query.cc:451
void BKE_lib_query_idpropertiesForeachIDLink_callback(IDProperty *id_prop, void *user_data)
Definition lib_query.cc:160
LibraryForeachIDFlag BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data)
Definition lib_query.cc:129
bool BKE_lib_query_foreachid_iter_stop(const LibraryForeachIDData *data)
Definition lib_query.cc:73
void BKE_library_unused_linked_data_set_tag(Main *bmain, bool do_init_tag)
void BKE_library_foreach_ID_link(Main *bmain, ID *id, blender::FunctionRef< LibraryIDLinkCallback > callback, void *user_data, LibraryForeachIDFlag flag)
Definition lib_query.cc:431
int BKE_lib_query_foreachid_process_callback_flag_override(LibraryForeachIDData *data, LibraryForeachIDCallbackFlag cb_flag, bool do_replace)
Definition lib_query.cc:139
@ IDWALK_RET_STOP_RECURSION
@ IDWALK_RET_STOP_ITER
@ IDWALK_RET_NOP
void BKE_library_indirectly_used_data_tag_clear(Main *bmain)
uint64_t BKE_library_id_can_use_filter_id(const ID *owner_id, const bool include_ui, const IDTypeInfo *owner_id_type=nullptr)
Definition lib_query.cc:476
bool BKE_library_ID_is_locally_used(Main *bmain, void *idv)
Definition lib_query.cc:623
LibraryForeachIDFlag
@ IDWALK_DO_DEPRECATED_POINTERS
@ IDWALK_RECURSE
@ IDWALK_INCLUDE_UI
@ IDWALK_IGNORE_MISSING_OWNER_ID
@ IDWALK_DO_LIBRARY_POINTER
@ IDWALK_NOP
@ IDWALK_READONLY
@ IDWALK_DO_INTERNAL_RUNTIME_POINTERS
@ IDWALK_NO_ORIG_POINTERS_ACCESS
@ IDWALK_IGNORE_EMBEDDED_ID
#define ENUM_OPERATORS(_type, _max)
ID and Library types, which are fundamental for SDNA.
BMesh const char void * data
unsigned long long int uint64_t
void BKE_lib_query_unused_ids_amounts(Main *bmain, LibQueryUnusedIDsData &parameters)
void BKE_lib_query_unused_ids_tag(Main *bmain, const int tag, LibQueryUnusedIDsData &parameters)
Definition DNA_ID.h:404
std::array< int, INDEX_ID_MAX > num_total
std::array< int, INDEX_ID_MAX > num_linked
std::array< int, INDEX_ID_MAX > num_local
blender::FunctionRef< bool(ID *id)> filter_fn
LibraryForeachIDCallbackFlag cb_flag
uint8_t flag
Definition wm_window.cc:139