Blender V5.0
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. */
127
128enum {
142};
143
161
168
169/* Flags for the foreach function itself. */
245
252 ID **id_pp,
258 bool do_replace);
259
261#define BKE_LIB_FOREACHID_PROCESS_ID_NOCHECK(data_, id_, cb_flag_) \
262 { \
263 BKE_lib_query_foreachid_process((data_), (ID **)&(id_), (cb_flag_)); \
264 if (BKE_lib_query_foreachid_iter_stop((data_))) { \
265 return; \
266 } \
267 } \
268 ((void)0)
269
270#define BKE_LIB_FOREACHID_PROCESS_ID(data_, id_, cb_flag_) \
271 { \
272 CHECK_TYPE_ANY((id_), ID *, void *); \
273 BKE_LIB_FOREACHID_PROCESS_ID_NOCHECK(data_, id_, cb_flag_); \
274 } \
275 ((void)0)
276
277#define BKE_LIB_FOREACHID_PROCESS_IDSUPER_P(data_, id_super_p_, cb_flag_) \
278 { \
279 CHECK_TYPE(&((*(id_super_p_))->id), ID *); \
280 BKE_lib_query_foreachid_process((data_), (ID **)(id_super_p_), (cb_flag_)); \
281 if (BKE_lib_query_foreachid_iter_stop((data_))) { \
282 return; \
283 } \
284 } \
285 ((void)0)
286
287#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(data_, id_super_, cb_flag_) \
288 { \
289 BKE_LIB_FOREACHID_PROCESS_IDSUPER_P(data_, &(id_super_), cb_flag_); \
290 } \
291 ((void)0)
292
293#define BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(data_, func_call_) \
294 { \
295 func_call_; \
296 if (BKE_lib_query_foreachid_iter_stop((data_))) { \
297 return; \
298 } \
299 } \
300 ((void)0)
301
310
322 ID *id,
324 void *user_data,
326
357 Main *bmain,
358 ID *owner_id,
359 ID *self_id,
360 blender::FunctionRef<void(LibraryForeachIDData *data)> subdata_foreach_id,
362 void *user_data,
364
368void BKE_library_update_ID_link_user(ID *id_dst, ID *id_src, int cb_flag);
369
380int BKE_library_ID_use_ID(ID *id_user, ID *id_used);
381
388bool BKE_library_id_can_use_idtype(ID *owner_id, short id_type_used);
389
394 const bool include_ui,
395 const IDTypeInfo *owner_id_type = nullptr);
396
400bool BKE_library_ID_is_locally_used(Main *bmain, void *idv);
404bool BKE_library_ID_is_indirectly_used(Main *bmain, void *idv);
410 void *idv,
411 bool *r_is_used_local,
412 bool *r_is_used_linked);
413
417 bool do_local_ids = false;
419 bool do_linked_ids = false;
425 bool do_recursive = false;
426
434 blender::FunctionRef<bool(ID *id)> filter_fn = nullptr;
435
442 std::array<int, INDEX_ID_MAX> num_total;
449 std::array<int, INDEX_ID_MAX> num_local;
456 std::array<int, INDEX_ID_MAX> num_linked;
457};
458
497void BKE_lib_query_unused_ids_tag(Main *bmain, int tag, LibQueryUnusedIDsData &parameters);
498
508void 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
@ IDWALK_RET_STOP_RECURSION
@ IDWALK_RET_STOP_ITER
@ IDWALK_RET_NOP
void BKE_lib_query_unused_ids_tag(Main *bmain, int tag, LibQueryUnusedIDsData &parameters)
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_WRITEFILE_IGNORE
@ 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_HASH_IGNORE
@ 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
void BKE_lib_query_unused_ids_amounts(Main *bmain, LibQueryUnusedIDsData &parameters)
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
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
Definition DNA_ID.h:414
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:145