Blender V4.3
BKE_idtype.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
13#include <optional>
14
15#include "BLI_sys_types.h"
16
17struct AssetTypeInfo;
19struct BlendDataReader;
20struct BlendLibReader;
21struct BlendWriter;
22struct ID;
23struct Library;
25struct Main;
26
28enum {
65};
66
67struct IDCacheKey {
68 /* The session UID of the ID owning the cached data. */
69 unsigned int id_session_uid;
70 /* Value uniquely identifying the cache within its ID.
71 * Typically the offset of its member in the data-block struct, but can be anything. */
72 size_t identifier;
73};
74
75uint BKE_idtype_cache_key_hash(const void *key_v);
76bool BKE_idtype_cache_key_cmp(const void *key_a_v, const void *key_b_v);
77
78/* ********** Prototypes for #IDTypeInfo callbacks. ********** */
79
80using IDTypeInitDataFunction = void (*)(ID *id);
81
83using IDTypeCopyDataFunction = void (*)(
84 Main *bmain, std::optional<Library *> owner_library, ID *id_dst, const ID *id_src, int flag);
85
86using IDTypeFreeDataFunction = void (*)(ID *id);
87
89using IDTypeMakeLocalFunction = void (*)(Main *bmain, ID *id, int flags);
90
92
99 void (*)(ID *id, const IDCacheKey *cache_key, void **cache_p, uint flags, void *user_data);
100using IDTypeForeachCacheFunction = void (*)(ID *id,
101 IDTypeForeachCacheFunctionCallback function_callback,
102 void *user_data);
103
104using IDTypeForeachPathFunction = void (*)(ID *id, BPathForeachPathData *bpath_data);
105
114using IDTypeEmbeddedOwnerPointerGetFunction = ID **(*)(ID *id, bool debug_relationship_assert);
115
116using IDTypeBlendWriteFunction = void (*)(BlendWriter *writer, ID *id, const void *id_address);
117using IDTypeBlendReadDataFunction = void (*)(BlendDataReader *reader, ID *id);
119
120using IDTypeBlendReadUndoPreserve = void (*)(BlendLibReader *reader, ID *id_new, ID *id_old);
121
122using IDTypeLibOverrideApplyPost = void (*)(ID *id_dst, ID *id_src);
123
254
255/* ********** Declaration of each IDTypeInfo. ********** */
256
257/* Those are defined in the respective BKE files. */
298
301
302/* ********** Helpers/Utils API. ********** */
303
304/* Module initialization. */
305void BKE_idtype_init();
306
307/* General helpers. */
308const IDTypeInfo *BKE_idtype_get_info_from_idtype_index(const int idtype_index);
309const IDTypeInfo *BKE_idtype_get_info_from_idcode(short id_code);
311
318const char *BKE_idtype_idcode_to_name(short idcode);
325const char *BKE_idtype_idcode_to_name_plural(short idcode);
332const char *BKE_idtype_idcode_to_translation_context(short idcode);
333
340bool BKE_idtype_idcode_is_valid(short idcode);
341
348bool BKE_idtype_idcode_is_linkable(short idcode);
355bool BKE_idtype_idcode_is_only_appendable(short idcode);
362bool BKE_idtype_idcode_append_is_reusable(short idcode);
363/* Macro currently, since any linkable IDtype should be localizable. */
364#define BKE_idtype_idcode_is_localizable BKE_idtype_idcode_is_linkable
365
372short BKE_idtype_idcode_from_name(const char *idtype_name);
373
377int BKE_idtype_idcode_to_index(short idcode);
382
386short BKE_idtype_index_to_idcode(int idtype_index);
390uint64_t BKE_idtype_index_to_idfilter(int idtype_index);
391
400
407short BKE_idtype_idcode_iter_step(int *idtype_index);
408
409/* Some helpers/wrappers around callbacks defined in #IDTypeInfo, dealing e.g. with embedded IDs.
410 * XXX Ideally those would rather belong to #BKE_lib_id, but using callback function pointers makes
411 * this hard to do properly if we want to avoid headers includes in headers. */
412
417 IDTypeForeachCacheFunctionCallback function_callback,
418 void *user_data);
short BKE_idtype_idfilter_to_idcode(uint64_t idfilter)
Definition idtype.cc:374
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
Definition BKE_idtype.hh:39
@ IDTYPE_FLAGS_NO_ANIMDATA
Definition BKE_idtype.hh:41
@ IDTYPE_FLAGS_ONLY_APPEND
Definition BKE_idtype.hh:36
@ IDTYPE_FLAGS_NO_COPY
Definition BKE_idtype.hh:30
@ IDTYPE_FLAGS_NO_LIBLINKING
Definition BKE_idtype.hh:32
@ IDTYPE_FLAGS_NO_MEMFILE_UNDO
Definition BKE_idtype.hh:50
@ IDTYPE_FLAGS_NEVER_UNUSED
Definition BKE_idtype.hh:64
IDTypeInfo IDType_ID_SCE
Definition scene.cc:1607
IDTypeInfo IDType_ID_WS
Definition workspace.cc:177
void(*)(ID *id, LibraryForeachIDData *data) IDTypeForeachIDFunction
Definition BKE_idtype.hh:91
IDTypeInfo IDType_ID_NT
Definition node.cc:1371
void(*)(ID *id) IDTypeFreeDataFunction
Definition BKE_idtype.hh:86
IDTypeInfo IDType_ID_CU_LEGACY
Definition curve.cc:265
IDTypeInfo IDType_ID_AR
Definition armature.cc:477
IDTypeInfo IDType_ID_VO
IDTypeInfo IDType_ID_CA
const IDTypeInfo * BKE_idtype_get_info_from_idtype_index(const int idtype_index)
Definition idtype.cc:133
ID **(*)(ID *id, bool debug_relationship_assert) IDTypeEmbeddedOwnerPointerGetFunction
void(*)(ID *id, const IDCacheKey *cache_key, void **cache_p, uint flags, void *user_data) IDTypeForeachCacheFunctionCallback
Definition BKE_idtype.hh:98
IDTypeInfo IDType_ID_LP
Definition lightprobe.cc:53
IDTypeInfo IDType_ID_LA
const IDTypeInfo * BKE_idtype_get_info_from_id(const ID *id)
Definition idtype.cc:150
void(*)(ID *id) IDTypeInitDataFunction
Definition BKE_idtype.hh:80
IDTypeInfo IDType_ID_IP
Definition ipo.cc:161
void(*)(ID *id_dst, ID *id_src) IDTypeLibOverrideApplyPost
IDTypeInfo IDType_ID_TE
Definition texture.cc:200
uint64_t BKE_idtype_idcode_to_idfilter(short idcode)
Definition idtype.cc:369
void(*)(Main *bmain, ID *id, int flags) IDTypeMakeLocalFunction
Definition BKE_idtype.hh:89
bool BKE_idtype_cache_key_cmp(const void *key_a_v, const void *key_b_v)
Definition idtype.cc:41
short BKE_idtype_index_to_idcode(int idtype_index)
Definition idtype.cc:347
IDTypeInfo IDType_ID_AC
IDTypeInfo IDType_ID_MA
const IDTypeInfo * BKE_idtype_get_info_from_idcode(short id_code)
Definition idtype.cc:145
int BKE_idtype_idfilter_to_index(uint64_t id_filter)
Definition idtype.cc:291
void(*)( Main *bmain, std::optional< Library * > owner_library, ID *id_dst, const ID *id_src, int flag) IDTypeCopyDataFunction
Definition BKE_idtype.hh:83
const char * BKE_idtype_idcode_to_translation_context(short idcode)
Definition idtype.cc:182
const char * BKE_idtype_idcode_to_name(short idcode)
Definition idtype.cc:168
void(*)(ID *id, IDTypeForeachCacheFunctionCallback function_callback, void *user_data) IDTypeForeachCacheFunction
IDTypeInfo IDType_ID_WM
Definition wm.cc:250
void(*)(ID *id, BPathForeachPathData *bpath_data) IDTypeForeachPathFunction
IDTypeInfo IDType_ID_GP
IDTypeInfo IDType_ID_SPK
Definition speaker.cc:51
IDTypeInfo IDType_ID_WO
IDTypeInfo IDType_ID_VF
Definition vfont.cc:168
IDTypeInfo IDType_ID_PT
void(*)(BlendLibReader *reader, ID *id_new, ID *id_old) IDTypeBlendReadUndoPreserve
uint64_t BKE_idtype_index_to_idfilter(int idtype_index)
Definition idtype.cc:358
IDTypeInfo IDType_ID_MC
Definition movieclip.cc:287
IDTypeInfo IDType_ID_LI
Definition library.cc:105
IDTypeInfo IDType_ID_BR
Definition brush.cc:437
void BKE_idtype_init()
Definition idtype.cc:127
void(*)(BlendDataReader *reader, ID *id) IDTypeBlendReadDataFunction
bool BKE_idtype_idcode_is_linkable(short idcode)
Definition idtype.cc:201
IDTypeInfo IDType_ID_PAL
Definition paint.cc:144
void(*)(BlendLibReader *reader, ID *id) IDTypeBlendReadAfterLiblinkFunction
IDTypeInfo IDType_ID_SO
IDTypeInfo IDType_ID_GD_LEGACY
IDTypeInfo IDType_ID_PC
Definition paint.cc:213
IDTypeInfo IDType_ID_OB
void BKE_idtype_id_foreach_cache(ID *id, IDTypeForeachCacheFunctionCallback function_callback, void *user_data)
Definition idtype.cc:385
short BKE_idtype_idcode_from_name(const char *idtype_name)
Definition idtype.cc:189
IDTypeInfo IDType_ID_MB
Definition mball.cc:145
int BKE_idtype_idcode_to_index(short idcode)
Definition idtype.cc:232
IDTypeInfo IDType_ID_LINK_PLACEHOLDER
Definition lib_id.cc:87
IDTypeInfo IDType_ID_KE
Definition key.cc:198
void(*)(BlendWriter *writer, ID *id, const void *id_address) IDTypeBlendWriteFunction
IDTypeInfo IDType_ID_MSK
short BKE_idtype_idcode_iter_step(int *idtype_index)
Definition idtype.cc:379
IDTypeInfo IDType_ID_CV
IDTypeInfo IDType_ID_SCR
Definition screen.cc:161
IDTypeInfo IDType_ID_PA
Definition particle.cc:381
bool BKE_idtype_idcode_is_only_appendable(short idcode)
Definition idtype.cc:208
bool BKE_idtype_idcode_append_is_reusable(short idcode)
Definition idtype.cc:220
const char * BKE_idtype_idcode_to_name_plural(short idcode)
Definition idtype.cc:175
IDTypeInfo IDType_ID_ME
uint BKE_idtype_cache_key_hash(const void *key_v)
Definition idtype.cc:33
IDTypeInfo IDType_ID_LS
Definition linestyle.cc:650
IDTypeInfo IDType_ID_LT
Definition lattice.cc:165
IDTypeInfo IDType_ID_GR
IDTypeInfo IDType_ID_TXT
Definition text.cc:227
bool BKE_idtype_idcode_is_valid(short idcode)
Definition idtype.cc:196
IDTypeInfo IDType_ID_CF
Definition cachefile.cc:123
eIDTypeInfoCacheCallbackFlags
Definition BKE_idtype.hh:93
@ IDTYPE_CACHE_CB_FLAGS_PERSISTENT
Definition BKE_idtype.hh:96
unsigned int uint
unsigned int uint32_t
Definition stdint.h:80
unsigned __int64 uint64_t
Definition stdint.h:90
unsigned int id_session_uid
Definition BKE_idtype.hh:69
size_t identifier
Definition BKE_idtype.hh:72
IDTypeBlendReadUndoPreserve blend_read_undo_preserve
int main_listbase_index
short id_code
const char * name
uint64_t dependencies_id_types
IDTypeForeachIDFunction foreach_id
const char * name_plural
IDTypeCopyDataFunction copy_data
IDTypeInitDataFunction init_data
IDTypeForeachCacheFunction foreach_cache
uint64_t id_filter
IDTypeBlendWriteFunction blend_write
IDTypeBlendReadDataFunction blend_read_data
IDTypeFreeDataFunction free_data
uint32_t flags
size_t struct_size
IDTypeMakeLocalFunction make_local
AssetTypeInfo * asset_type_info
IDTypeLibOverrideApplyPost lib_override_apply_post
IDTypeForeachPathFunction foreach_path
const char * translation_context
IDTypeBlendReadAfterLiblinkFunction blend_read_after_liblink
IDTypeEmbeddedOwnerPointerGetFunction owner_pointer_get
Definition DNA_ID.h:413
uint8_t flag
Definition wm_window.cc:138