Blender  V3.3
BKE_lib_id.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2001-2002 NaN Holding BV. All rights reserved. */
3 #pragma once
4 
32 #include "BLI_compiler_attrs.h"
33 #include "BLI_utildefines.h"
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
39 struct BlendWriter;
40 struct GHash;
41 struct ID;
42 struct Library;
43 struct ListBase;
44 struct Main;
45 struct PointerRNA;
46 struct PropertyRNA;
47 struct bContext;
48 
52 size_t BKE_libblock_get_alloc_info(short type, const char **name);
64 void *BKE_libblock_alloc(struct Main *bmain, short type, const char *name, int flag)
70 void BKE_libblock_init_empty(struct ID *id) ATTR_NONNULL(1);
71 
76 
77 /* *** ID's session_uuid management. *** */
78 
82 #define MAIN_ID_SESSION_UUID_UNSET 0
83 
100 
106 void *BKE_id_new(struct Main *bmain, short type, const char *name);
113 void *BKE_id_new_nomain(short type, const char *name);
114 
118 enum {
119  /* *** Generic options (should be handled by all ID types copying, ID creation, etc.). *** */
131 
134 
140 
144 
145  /* *** Specific options to some ID types or usages. *** */
146  /* *** May be ignored by unrelated ID copying functions. *** */
148  /* LIB_ID_COPY_NO_PROXY_CLEAR = 1 << 16, */ /* UNUSED */
162 
163  /* *** XXX Hackish/not-so-nice specific behaviors needed for some corner cases. *** */
164  /* *** Ideally we should not have those, but we need them for now... *** */
178 
179  /* *** Helper 'defines' gathering most common flag sets. *** */
182 
189 };
190 
191 void BKE_libblock_copy_ex(struct Main *bmain,
192  const struct ID *id,
193  struct ID **r_newid,
194  int orig_flag);
198 void *BKE_libblock_copy(struct Main *bmain, const struct ID *id) ATTR_WARN_UNUSED_RESULT
199  ATTR_NONNULL();
200 
204 void BKE_libblock_rename(struct Main *bmain, struct ID *id, const char *name) ATTR_NONNULL();
209 void BLI_libblock_ensure_unique_name(struct Main *bmain, const char *name) ATTR_NONNULL();
210 
211 struct ID *BKE_libblock_find_name(struct Main *bmain,
212  short type,
214 struct ID *BKE_libblock_find_session_uuid(struct Main *bmain, short type, uint32_t session_uuid);
219 typedef enum eLibIDDuplicateFlags {
230 
232 
233 /* lib_remap.c (keep here since they're general functions) */
237 enum {
238  /* *** Generic options (should be handled by all ID types freeing). *** */
252 
259 };
260 
262 void BKE_libblock_free_data(struct ID *id, bool do_id_user) ATTR_NONNULL();
263 
270 void BKE_libblock_free_data_py(struct ID *id);
271 
289 void BKE_id_free_ex(struct Main *bmain, void *idv, int flag, bool use_flag_from_idtag);
299 void BKE_id_free(struct Main *bmain, void *idv);
300 
305 void BKE_id_free_us(struct Main *bmain, void *idv) ATTR_NONNULL();
306 
310 void BKE_id_delete(struct Main *bmain, void *idv) ATTR_NONNULL();
321 size_t BKE_id_multi_tagged_delete(struct Main *bmain) ATTR_NONNULL();
322 
326 void BKE_libblock_management_main_add(struct Main *bmain, void *idv);
328 void BKE_libblock_management_main_remove(struct Main *bmain, void *idv);
329 
330 void BKE_libblock_management_usercounts_set(struct Main *bmain, void *idv);
331 void BKE_libblock_management_usercounts_clear(struct Main *bmain, void *idv);
332 
333 void id_lib_extern(struct ID *id);
334 void id_lib_indirect_weak_link(struct ID *id);
343 void id_us_ensure_real(struct ID *id);
344 void id_us_clear_real(struct ID *id);
349 void id_us_plus_no_lib(struct ID *id);
350 void id_us_plus(struct ID *id);
351 /* decrements the user count for *id. */
352 void id_us_min(struct ID *id);
353 void id_fake_user_set(struct ID *id);
354 void id_fake_user_clear(struct ID *id);
355 void BKE_id_newptr_and_tag_clear(struct ID *id);
356 
358 enum {
361 
366 
370 };
371 
381  struct Main *bmain, struct ID *id, int flags, bool *r_force_local, bool *r_force_copy);
385 void BKE_lib_id_make_local_generic(struct Main *bmain, struct ID *id, int flags);
395 bool BKE_lib_id_make_local(struct Main *bmain, struct ID *id, int flags);
399 bool id_single_user(struct bContext *C,
400  struct ID *id,
401  struct PointerRNA *ptr,
402  struct PropertyRNA *prop);
403 
405 bool BKE_id_copy_is_allowed(const struct ID *id);
428 struct ID *BKE_id_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, int flag);
434 struct ID *BKE_id_copy(struct Main *bmain, const struct ID *id);
435 
451 struct ID *BKE_id_copy_for_duplicate(struct Main *bmain,
452  struct ID *id,
453  uint duplicate_flags,
454  int copy_flags);
455 
463 void BKE_lib_id_swap(struct Main *bmain, struct ID *id_a, struct ID *id_b);
471 void BKE_lib_id_swap_full(struct Main *bmain, struct ID *id_a, struct ID *id_b);
472 
481 void id_sort_by_name(struct ListBase *lb, struct ID *id, struct ID *id_sorting_hint);
486 void BKE_lib_id_expand_local(struct Main *bmain, struct ID *id, int flags);
487 
498 bool BKE_id_new_name_validate(struct Main *bmain,
499  struct ListBase *lb,
500  struct ID *id,
501  const char *name,
502  bool do_linked_data) ATTR_NONNULL(1, 2, 3);
503 
510 void BKE_lib_id_clear_library_data(struct Main *bmain, struct ID *id, int flags);
511 
517 void BKE_main_id_tag_idcode(struct Main *mainvar, short type, int tag, bool value);
521 void BKE_main_id_tag_listbase(struct ListBase *lb, int tag, bool value);
525 void BKE_main_id_tag_all(struct Main *mainvar, int tag, bool value);
526 
530 void BKE_main_id_flag_listbase(struct ListBase *lb, int flag, bool value);
534 void BKE_main_id_flag_all(struct Main *bmain, int flag, bool value);
535 
539 void BKE_main_id_newptr_and_tag_clear(struct Main *bmain);
540 
541 void BKE_main_id_refcount_recompute(struct Main *bmain, bool do_linked_only);
542 
543 void BKE_main_lib_objects_recalc_all(struct Main *bmain);
544 
548 void BKE_main_id_repair_duplicate_names_listbase(struct Main *bmain, struct ListBase *lb);
549 
550 #define MAX_ID_FULL_NAME (64 + 64 + 3 + 1) /* 64 is MAX_ID_NAME - 2 */
551 #define MAX_ID_FULL_NAME_UI (MAX_ID_FULL_NAME + 3) /* Adds 'keycode' two letters at beginning. */
562 void BKE_id_full_name_get(char name[MAX_ID_FULL_NAME], const struct ID *id, char separator_char);
577  const struct ID *id,
578  bool add_lib_hint,
579  char separator_char,
580  int *r_prefix_len);
581 
587 char *BKE_id_to_unique_string_key(const struct ID *id);
588 
599 void BKE_library_make_local(struct Main *bmain,
600  const struct Library *lib,
601  struct GHash *old_to_new_ids,
602  bool untagged_only,
603  bool set_fake);
604 
605 void BKE_id_tag_set_atomic(struct ID *id, int tag);
606 void BKE_id_tag_clear_atomic(struct ID *id, int tag);
607 
612 bool BKE_id_is_in_global_main(struct ID *id);
613 
614 bool BKE_id_can_be_asset(const struct ID *id);
615 
625 bool BKE_id_is_editable(const struct Main *bmain, const struct ID *id);
626 
631 void BKE_id_ordered_list(struct ListBase *ordered_lb, const struct ListBase *lb);
635 void BKE_id_reorder(const struct ListBase *lb, struct ID *id, struct ID *relative, bool after);
636 
637 void BKE_id_blend_write(struct BlendWriter *writer, struct ID *id);
638 
639 #define IS_TAGGED(_id) ((_id) && (((ID *)_id)->tag & LIB_TAG_DOIT))
640 
641 /* lib_id_eval.c */
642 
648 void BKE_id_eval_properties_copy(struct ID *id_cow, struct ID *id);
649 
650 #ifdef __cplusplus
651 }
652 #endif
void BKE_id_reorder(const struct ListBase *lb, struct ID *id, struct ID *relative, bool after)
void BKE_libblock_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, int orig_flag)
struct ID * BKE_id_copy(struct Main *bmain, const struct ID *id)
void BKE_libblock_management_usercounts_set(struct Main *bmain, void *idv)
Definition: lib_id.c:879
struct ID * BKE_libblock_find_session_uuid(struct Main *bmain, short type, uint32_t session_uuid)
Definition: lib_id.c:1304
void * BKE_libblock_copy(struct Main *bmain, const struct ID *id) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void BKE_lib_libblock_session_uuid_ensure(struct ID *id)
Definition: lib_id.c:1140
void BKE_lib_libblock_session_uuid_renew(struct ID *id)
Definition: lib_id.c:1153
@ LIB_ID_CREATE_NO_ALLOCATE
Definition: BKE_lib_id.h:130
@ LIB_ID_CREATE_LOCALIZE
Definition: BKE_lib_id.h:184
@ LIB_ID_COPY_NODETREE_LOCALIZE
Definition: BKE_lib_id.h:172
@ LIB_ID_COPY_NO_PREVIEW
Definition: BKE_lib_id.h:150
@ LIB_ID_COPY_CD_REFERENCE
Definition: BKE_lib_id.h:156
@ LIB_ID_COPY_CACHES
Definition: BKE_lib_id.h:152
@ LIB_ID_COPY_NO_LIB_OVERRIDE
Definition: BKE_lib_id.h:158
@ LIB_ID_COPY_SET_COPIED_ON_WRITE
Definition: BKE_lib_id.h:143
@ LIB_ID_CREATE_LOCAL
Definition: BKE_lib_id.h:139
@ LIB_ID_COPY_ACTIONS
Definition: BKE_lib_id.h:166
@ LIB_ID_COPY_NO_LIB_OVERRIDE_LOCAL_DATA_FLAG
Definition: BKE_lib_id.h:161
@ LIB_ID_COPY_KEEP_LIB
Definition: BKE_lib_id.h:168
@ LIB_ID_COPY_LOCALIZE
Definition: BKE_lib_id.h:187
@ LIB_ID_CREATE_NO_USER_REFCOUNT
Definition: BKE_lib_id.h:126
@ LIB_ID_COPY_NO_ANIMDATA
Definition: BKE_lib_id.h:154
@ LIB_ID_COPY_SHAPEKEY
Definition: BKE_lib_id.h:170
@ LIB_ID_CREATE_NO_MAIN
Definition: BKE_lib_id.h:122
@ LIB_ID_COPY_DEFAULT
Definition: BKE_lib_id.h:181
@ LIB_ID_CREATE_NO_DEG_TAG
Definition: BKE_lib_id.h:133
@ LIB_ID_COPY_RIGID_BODY_NO_COLLECTION_HANDLING
Definition: BKE_lib_id.h:177
void BKE_libblock_management_main_add(struct Main *bmain, void *idv)
Definition: lib_id.c:826
void BKE_id_newptr_and_tag_clear(struct ID *id)
Definition: lib_id.c:359
bool BKE_id_copy_is_allowed(const struct ID *id)
void BKE_libblock_runtime_reset_remapping_status(struct ID *id) ATTR_NONNULL(1)
Definition: lib_id.c:1129
void BKE_main_id_newptr_and_tag_clear(struct Main *bmain)
Definition: lib_id.c:1465
void BKE_id_full_name_ui_prefix_get(char name[MAX_ID_FULL_NAME_UI], const struct ID *id, bool add_lib_hint, char separator_char, int *r_prefix_len)
void BKE_libblock_free_data(struct ID *id, bool do_id_user) ATTR_NONNULL()
Definition: lib_id_delete.c:44
void BKE_library_make_local(struct Main *bmain, const struct Library *lib, struct GHash *old_to_new_ids, bool untagged_only, bool set_fake)
void BKE_main_id_tag_idcode(struct Main *mainvar, short type, int tag, bool value)
Definition: lib_id.c:920
struct ID * BKE_id_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, int flag)
void BKE_libblock_rename(struct Main *bmain, struct ID *id, const char *name) ATTR_NONNULL()
Definition: lib_id.c:1832
void BKE_main_id_tag_all(struct Main *mainvar, int tag, bool value)
Definition: lib_id.c:930
void BKE_id_tag_clear_atomic(struct ID *id, int tag)
Definition: lib_id.c:1897
bool BKE_id_is_editable(const struct Main *bmain, const struct ID *id)
void id_us_min(struct ID *id)
Definition: lib_id.c:313
void BKE_libblock_free_data_py(struct ID *id)
bool BKE_id_new_name_validate(struct Main *bmain, struct ListBase *lb, struct ID *id, const char *name, bool do_linked_data) ATTR_NONNULL(1
bool void BKE_lib_id_clear_library_data(struct Main *bmain, struct ID *id, int flags)
Definition: lib_id.c:177
void * BKE_libblock_alloc(struct Main *bmain, short type, const char *name, int flag) ATTR_WARN_UNUSED_RESULT
Definition: lib_id.c:1050
void id_lib_extern(struct ID *id)
Definition: lib_id.c:237
void id_fake_user_set(struct ID *id)
Definition: lib_id.c:343
@ LIB_ID_FREE_NO_UI_USER
Definition: BKE_lib_id.h:256
@ LIB_ID_FREE_NOT_ALLOCATED
Definition: BKE_lib_id.h:251
@ LIB_ID_FREE_NO_DEG_TAG
Definition: BKE_lib_id.h:254
@ LIB_ID_FREE_NO_USER_REFCOUNT
Definition: BKE_lib_id.h:245
@ LIB_ID_FREE_NO_MAIN
Definition: BKE_lib_id.h:240
@ LIB_ID_FREE_NO_NAMEMAP_REMOVE
Definition: BKE_lib_id.h:258
void BKE_main_id_refcount_recompute(struct Main *bmain, bool do_linked_only)
Definition: lib_id.c:1499
char * BKE_id_to_unique_string_key(const struct ID *id)
Definition: lib_id.c:1879
void * BKE_id_new_nomain(short type, const char *name)
Definition: lib_id.c:1173
size_t BKE_libblock_get_alloc_info(short type, const char **name)
Definition: lib_id.c:1022
@ LIB_ID_MAKELOCAL_FORCE_LOCAL
Definition: BKE_lib_id.h:363
@ LIB_ID_MAKELOCAL_ASSET_DATA_CLEAR
Definition: BKE_lib_id.h:369
@ LIB_ID_MAKELOCAL_FULL_LIBRARY
Definition: BKE_lib_id.h:360
@ LIB_ID_MAKELOCAL_FORCE_COPY
Definition: BKE_lib_id.h:365
#define MAX_ID_FULL_NAME_UI
Definition: BKE_lib_id.h:551
void BKE_id_eval_properties_copy(struct ID *id_cow, struct ID *id)
Definition: lib_id_eval.c:18
void BKE_lib_id_expand_local(struct Main *bmain, struct ID *id, int flags)
Definition: lib_id.c:427
void * BKE_libblock_alloc_notest(short type) ATTR_WARN_UNUSED_RESULT
Definition: lib_id.c:1039
void BKE_lib_id_swap_full(struct Main *bmain, struct ID *id_a, struct ID *id_b)
Definition: lib_id.c:757
void BKE_lib_id_make_local_generic(struct Main *bmain, struct ID *id, int flags)
Definition: lib_id.c:486
void BKE_main_id_flag_all(struct Main *bmain, int flag, bool value)
Definition: lib_id.c:957
void BKE_main_lib_objects_recalc_all(struct Main *bmain)
Definition: lib_id.c:998
void BKE_main_id_flag_listbase(struct ListBase *lb, int flag, bool value)
Definition: lib_id.c:941
bool id_single_user(struct bContext *C, struct ID *id, struct PointerRNA *ptr, struct PropertyRNA *prop)
Definition: lib_id.c:762
void BKE_id_free(struct Main *bmain, void *idv)
void BKE_libblock_init_empty(struct ID *id) ATTR_NONNULL(1)
Definition: lib_id.c:1115
void id_us_ensure_real(struct ID *id)
Definition: lib_id.c:260
void BKE_libblock_free_datablock(struct ID *id, int flag) ATTR_NONNULL()
void id_us_plus(struct ID *id)
Definition: lib_id.c:305
void BKE_id_blend_write(struct BlendWriter *writer, struct ID *id)
Definition: lib_id.c:2008
void id_us_clear_real(struct ID *id)
Definition: lib_id.c:278
void id_us_plus_no_lib(struct ID *id)
Definition: lib_id.c:289
void BKE_id_free_ex(struct Main *bmain, void *idv, int flag, bool use_flag_from_idtag)
Definition: lib_id_delete.c:82
void * BKE_id_new(struct Main *bmain, short type, const char *name)
Definition: lib_id.c:1159
bool BKE_id_is_in_global_main(struct ID *id)
Definition: lib_id.c:1902
void BKE_id_full_name_get(char name[MAX_ID_FULL_NAME], const struct ID *id, char separator_char)
bool BKE_lib_id_make_local(struct Main *bmain, struct ID *id, int flags)
Definition: lib_id.c:533
void BKE_libblock_management_usercounts_clear(struct Main *bmain, void *idv)
Definition: lib_id.c:891
struct ID * BKE_id_copy_for_duplicate(struct Main *bmain, struct ID *id, uint duplicate_flags, int copy_flags)
void BKE_id_tag_set_atomic(struct ID *id, int tag)
Definition: lib_id.c:1892
void BKE_id_ordered_list(struct ListBase *ordered_lb, const struct ListBase *lb)
bool BKE_id_can_be_asset(const struct ID *id)
void BKE_id_delete(struct Main *bmain, void *idv) ATTR_NONNULL()
void BKE_main_id_tag_listbase(struct ListBase *lb, int tag, bool value)
Definition: lib_id.c:904
void BLI_libblock_ensure_unique_name(struct Main *bmain, const char *name) ATTR_NONNULL()
Definition: lib_id.c:1813
void id_fake_user_clear(struct ID *id)
Definition: lib_id.c:351
size_t BKE_id_multi_tagged_delete(struct Main *bmain) ATTR_NONNULL()
eLibIDDuplicateFlags
Definition: BKE_lib_id.h:219
@ LIB_ID_DUPLICATE_IS_ROOT_ID
Definition: BKE_lib_id.h:228
@ LIB_ID_DUPLICATE_IS_SUBPROCESS
Definition: BKE_lib_id.h:225
void id_lib_indirect_weak_link(struct ID *id)
Definition: lib_id.c:250
void id_sort_by_name(struct ListBase *lb, struct ID *id, struct ID *id_sorting_hint)
Definition: lib_id.c:1318
struct ID * BKE_libblock_find_name(struct Main *bmain, short type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Definition: lib_id.c:1297
void BKE_lib_id_swap(struct Main *bmain, struct ID *id_a, struct ID *id_b)
Definition: lib_id.c:752
#define MAX_ID_FULL_NAME
Definition: BKE_lib_id.h:550
void BKE_main_id_repair_duplicate_names_listbase(struct Main *bmain, struct ListBase *lb)
Definition: lib_id.c:967
void BKE_libblock_management_main_remove(struct Main *bmain, void *idv)
Definition: lib_id.c:859
void BKE_lib_id_make_local_generic_action_define(struct Main *bmain, struct ID *id, int flags, bool *r_force_local, bool *r_force_copy)
Definition: lib_id.c:444
void BKE_id_free_us(struct Main *bmain, void *idv) ATTR_NONNULL()
#define ATTR_WARN_UNUSED_RESULT
#define ATTR_NONNULL(...)
unsigned int uint
Definition: BLI_sys_types.h:67
#define ENUM_OPERATORS(_type, _max)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
#define C
Definition: RandGen.cpp:25
DRWShaderLibrary * lib
unsigned int uint32_t
Definition: stdint.h:80
Definition: DNA_ID.h:368
int tag
Definition: DNA_ID.h:387
short flag
Definition: DNA_ID.h:383
unsigned int session_uuid
Definition: DNA_ID.h:407
char name[66]
Definition: DNA_ID.h:378
Definition: BKE_main.h:121
PointerRNA * ptr
Definition: wm_files.c:3480