Blender V4.5
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
12
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 {
70};
71
72struct IDCacheKey {
74 unsigned int id_session_uid;
79 size_t identifier;
80};
81
82uint BKE_idtype_cache_key_hash(const void *key_v);
83bool BKE_idtype_cache_key_cmp(const void *key_a_v, const void *key_b_v);
84
85/* ********** Prototypes for #IDTypeInfo callbacks. ********** */
86
87using IDTypeInitDataFunction = void (*)(ID *id);
88
90using IDTypeCopyDataFunction = void (*)(
91 Main *bmain, std::optional<Library *> owner_library, ID *id_dst, const ID *id_src, int flag);
92
93using IDTypeFreeDataFunction = void (*)(ID *id);
94
96using IDTypeMakeLocalFunction = void (*)(Main *bmain, ID *id, int flags);
97
99
108 void (*)(ID *id, const IDCacheKey *cache_key, void **cache_p, uint flags, void *user_data);
109using IDTypeForeachCacheFunction = void (*)(ID *id,
110 IDTypeForeachCacheFunctionCallback function_callback,
111 void *user_data);
112
113using IDTypeForeachPathFunction = void (*)(ID *id, BPathForeachPathData *bpath_data);
114
123using IDTypeEmbeddedOwnerPointerGetFunction = ID **(*)(ID *id, bool debug_relationship_assert);
124
125using IDTypeBlendWriteFunction = void (*)(BlendWriter *writer, ID *id, const void *id_address);
126using IDTypeBlendReadDataFunction = void (*)(BlendDataReader *reader, ID *id);
128
129using IDTypeBlendReadUndoPreserve = void (*)(BlendLibReader *reader, ID *id_new, ID *id_old);
130
131using IDTypeLibOverrideApplyPost = void (*)(ID *id_dst, ID *id_src);
132
269
270/* ********** Declaration of each IDTypeInfo. ********** */
271
272/* Those are defined in the respective BKE files. */
313
316
317/* ********** Helpers/Utils API. ********** */
318
319/* Module initialization. */
320void BKE_idtype_init();
321
322/* General helpers. */
323const IDTypeInfo *BKE_idtype_get_info_from_idtype_index(const int idtype_index);
324const IDTypeInfo *BKE_idtype_get_info_from_idcode(short id_code);
326
333const char *BKE_idtype_idcode_to_name(short idcode);
340const char *BKE_idtype_idcode_to_name_plural(short idcode);
347const char *BKE_idtype_idcode_to_translation_context(short idcode);
348
355bool BKE_idtype_idcode_is_valid(short idcode);
356
363bool BKE_idtype_idcode_is_linkable(short idcode);
370bool BKE_idtype_idcode_is_only_appendable(short idcode);
377bool BKE_idtype_idcode_append_is_reusable(short idcode);
378/* Macro currently, since any linkable IDtype should be localizable. */
379#define BKE_idtype_idcode_is_localizable BKE_idtype_idcode_is_linkable
380
387short BKE_idtype_idcode_from_name(const char *idtype_name);
388
392int BKE_idtype_idcode_to_index(short idcode);
397
401short BKE_idtype_index_to_idcode(int idtype_index);
405uint64_t BKE_idtype_index_to_idfilter(int idtype_index);
406
415
422short BKE_idtype_idcode_iter_step(int *idtype_index);
423
424/* Some helpers/wrappers around callbacks defined in #IDTypeInfo, dealing e.g. with embedded IDs.
425 * XXX Ideally those would rather belong to #BKE_lib_id, but using callback function pointers makes
426 * this hard to do properly if we want to avoid headers includes in headers. */
427
432 IDTypeForeachCacheFunctionCallback function_callback,
433 void *user_data);
short BKE_idtype_idfilter_to_idcode(uint64_t idfilter)
Definition idtype.cc:371
IDTypeInfo IDType_ID_SCE
Definition scene.cc:1623
IDTypeInfo IDType_ID_WS
Definition workspace.cc:177
void(*)(ID *id, const IDCacheKey *cache_key, void **cache_p, uint flags, void *user_data) IDTypeForeachCacheFunctionCallback
void(*)(ID *id, LibraryForeachIDData *data) IDTypeForeachIDFunction
Definition BKE_idtype.hh:98
IDTypeInfo IDType_ID_NT
Definition node.cc:2359
void(*)(ID *id) IDTypeFreeDataFunction
Definition BKE_idtype.hh:93
IDTypeInfo IDType_ID_CU_LEGACY
Definition curve.cc:290
IDTypeInfo IDType_ID_AR
Definition armature.cc:501
IDTypeInfo IDType_ID_VO
IDTypeInfo IDType_ID_CA
const IDTypeInfo * BKE_idtype_get_info_from_idtype_index(const int idtype_index)
Definition idtype.cc:128
ID **(*)(ID *id, bool debug_relationship_assert) IDTypeEmbeddedOwnerPointerGetFunction
IDTypeInfo IDType_ID_LP
Definition lightprobe.cc:52
IDTypeInfo IDType_ID_LA
const IDTypeInfo * BKE_idtype_get_info_from_id(const ID *id)
Definition idtype.cc:147
void(*)(ID *id) IDTypeInitDataFunction
Definition BKE_idtype.hh:87
IDTypeInfo IDType_ID_IP
Definition ipo.cc:164
void(*)(ID *id_dst, ID *id_src) IDTypeLibOverrideApplyPost
IDTypeInfo IDType_ID_TE
Definition texture.cc:191
uint64_t BKE_idtype_idcode_to_idfilter(short idcode)
Definition idtype.cc:366
void(*)(Main *bmain, ID *id, int flags) IDTypeMakeLocalFunction
Definition BKE_idtype.hh:96
bool BKE_idtype_cache_key_cmp(const void *key_a_v, const void *key_b_v)
Definition idtype.cc:36
short BKE_idtype_index_to_idcode(int idtype_index)
Definition idtype.cc:344
IDTypeInfo IDType_ID_AC
IDTypeInfo IDType_ID_MA
const IDTypeInfo * BKE_idtype_get_info_from_idcode(short id_code)
Definition idtype.cc:142
int BKE_idtype_idfilter_to_index(uint64_t id_filter)
Definition idtype.cc:288
const char * BKE_idtype_idcode_to_translation_context(short idcode)
Definition idtype.cc:179
const char * BKE_idtype_idcode_to_name(short idcode)
Definition idtype.cc:165
IDTypeInfo IDType_ID_WM
Definition wm.cc:242
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:165
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:355
IDTypeInfo IDType_ID_MC
Definition movieclip.cc:294
IDTypeInfo IDType_ID_LI
Definition library.cc:141
IDTypeInfo IDType_ID_BR
Definition brush.cc:479
void BKE_idtype_init()
Definition idtype.cc:122
void(*)(BlendDataReader *reader, ID *id) IDTypeBlendReadDataFunction
bool BKE_idtype_idcode_is_linkable(short idcode)
Definition idtype.cc:198
IDTypeInfo IDType_ID_PAL
Definition paint.cc:141
void(*)(BlendLibReader *reader, ID *id) IDTypeBlendReadAfterLiblinkFunction
IDTypeInfo IDType_ID_SO
IDTypeInfo IDType_ID_GD_LEGACY
IDTypeInfo IDType_ID_PC
Definition paint.cc:210
IDTypeInfo IDType_ID_OB
void BKE_idtype_id_foreach_cache(ID *id, IDTypeForeachCacheFunctionCallback function_callback, void *user_data)
Definition idtype.cc:382
short BKE_idtype_idcode_from_name(const char *idtype_name)
Definition idtype.cc:186
void(*)( Main *bmain, std::optional< Library * > owner_library, ID *id_dst, const ID *id_src, int flag) IDTypeCopyDataFunction
Definition BKE_idtype.hh:90
IDTypeInfo IDType_ID_MB
Definition mball.cc:146
int BKE_idtype_idcode_to_index(short idcode)
Definition idtype.cc:229
IDTypeInfo IDType_ID_LINK_PLACEHOLDER
Definition lib_id.cc:89
IDTypeInfo IDType_ID_KE
Definition key.cc:205
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:376
IDTypeInfo IDType_ID_CV
IDTypeInfo IDType_ID_SCR
Definition screen.cc:169
IDTypeInfo IDType_ID_PA
Definition particle.cc:383
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
Definition BKE_idtype.hh:44
@ IDTYPE_FLAGS_NO_ANIMDATA
Definition BKE_idtype.hh:46
@ IDTYPE_FLAGS_ONLY_APPEND
Definition BKE_idtype.hh:38
@ 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:55
@ IDTYPE_FLAGS_NEVER_UNUSED
Definition BKE_idtype.hh:69
bool BKE_idtype_idcode_is_only_appendable(short idcode)
Definition idtype.cc:205
bool BKE_idtype_idcode_append_is_reusable(short idcode)
Definition idtype.cc:217
const char * BKE_idtype_idcode_to_name_plural(short idcode)
Definition idtype.cc:172
IDTypeInfo IDType_ID_ME
void(*)(ID *id, IDTypeForeachCacheFunctionCallback function_callback, void *user_data) IDTypeForeachCacheFunction
uint BKE_idtype_cache_key_hash(const void *key_v)
Definition idtype.cc:28
IDTypeInfo IDType_ID_LS
Definition linestyle.cc:649
IDTypeInfo IDType_ID_LT
Definition lattice.cc:169
IDTypeInfo IDType_ID_GR
IDTypeInfo IDType_ID_TXT
Definition text.cc:227
bool BKE_idtype_idcode_is_valid(short idcode)
Definition idtype.cc:193
IDTypeInfo IDType_ID_CF
Definition cachefile.cc:124
eIDTypeInfoCacheCallbackFlags
@ IDTYPE_CACHE_CB_FLAGS_PERSISTENT
unsigned int uint
BMesh const char void * data
unsigned long long int uint64_t
unsigned int id_session_uid
Definition BKE_idtype.hh:74
size_t identifier
Definition BKE_idtype.hh:79
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:404
uint8_t flag
Definition wm_window.cc:139