Blender V5.0
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_color_types.hh"
16#include "BLI_function_ref.hh"
18#include "BLI_sys_types.h"
19
20struct AssetTypeInfo;
22struct BlendDataReader;
23struct BlendLibReader;
24struct BlendWriter;
25struct ID;
26struct Library;
28struct Main;
29
31enum {
73};
74
75struct IDCacheKey {
77 unsigned int id_session_uid;
82 size_t identifier;
83};
84
85uint BKE_idtype_cache_key_hash(const void *key_v);
86bool BKE_idtype_cache_key_cmp(const void *key_a_v, const void *key_b_v);
87
88/* ********** Prototypes for #IDTypeInfo callbacks. ********** */
89
90using IDTypeInitDataFunction = void (*)(ID *id);
91
93using IDTypeCopyDataFunction = void (*)(
94 Main *bmain, std::optional<Library *> owner_library, ID *id_dst, const ID *id_src, int flag);
95
96using IDTypeFreeDataFunction = void (*)(ID *id);
97
99using IDTypeMakeLocalFunction = void (*)(Main *bmain, ID *id, int flags);
100
102
111 void (*)(ID *id, const IDCacheKey *cache_key, void **cache_p, uint flags, void *user_data);
112using IDTypeForeachCacheFunction = void (*)(ID *id,
113 IDTypeForeachCacheFunctionCallback function_callback,
114 void *user_data);
115
116using IDTypeForeachPathFunction = void (*)(ID *id, BPathForeachPathData *bpath_data);
117
118/* Foreach scene linear color can do either a single color, or an implicitly shared array
119 * for geometry attributes. */
127
136using IDTypeEmbeddedOwnerPointerGetFunction = ID **(*)(ID * id, bool debug_relationship_assert);
137
138using IDTypeBlendWriteFunction = void (*)(BlendWriter *writer, ID *id, const void *id_address);
139using IDTypeBlendReadDataFunction = void (*)(BlendDataReader *reader, ID *id);
141
142using IDTypeBlendReadUndoPreserve = void (*)(BlendLibReader *reader, ID *id_new, ID *id_old);
143
144using IDTypeLibOverrideApplyPost = void (*)(ID *id_dst, ID *id_src);
145
288
289/* ********** Declaration of each IDTypeInfo. ********** */
290
291/* Those are defined in the respective BKE files. */
331
334
335/* ********** Helpers/Utils API. ********** */
336
337/* Module initialization. */
338void BKE_idtype_init();
339
340/* General helpers. */
341const IDTypeInfo *BKE_idtype_get_info_from_idtype_index(const int idtype_index);
342const IDTypeInfo *BKE_idtype_get_info_from_idcode(short id_code);
344
351const char *BKE_idtype_idcode_to_name(short idcode);
358const char *BKE_idtype_idcode_to_name_plural(short idcode);
365const char *BKE_idtype_idcode_to_translation_context(short idcode);
366
373bool BKE_idtype_idcode_is_valid(short idcode);
374
381bool BKE_idtype_idcode_is_linkable(short idcode);
388bool BKE_idtype_idcode_is_only_appendable(short idcode);
395bool BKE_idtype_idcode_append_is_reusable(short idcode);
396/* Macro currently, since any linkable IDtype should be localizable. */
397#define BKE_idtype_idcode_is_localizable BKE_idtype_idcode_is_linkable
398
405short BKE_idtype_idcode_from_name(const char *idtype_name);
406
410int BKE_idtype_idcode_to_index(short idcode);
415
419short BKE_idtype_index_to_idcode(int idtype_index);
423uint64_t BKE_idtype_index_to_idfilter(int idtype_index);
424
433
440short BKE_idtype_idcode_iter_step(int *idtype_index);
441
442/* Some helpers/wrappers around callbacks defined in #IDTypeInfo, dealing e.g. with embedded IDs.
443 * XXX Ideally those would rather belong to #BKE_lib_id, but using callback function pointers makes
444 * this hard to do properly if we want to avoid headers includes in headers. */
445
450 IDTypeForeachCacheFunctionCallback function_callback,
451 void *user_data);
void(*)(ID *id, const IDTypeForeachColorFunctionCallback &cb) IDTypeForeachColorFunction
short BKE_idtype_idfilter_to_idcode(uint64_t idfilter)
Definition idtype.cc:368
IDTypeInfo IDType_ID_SCE
Definition scene.cc:1565
IDTypeInfo IDType_ID_WS
Definition workspace.cc:178
void(*)(ID *id, const IDCacheKey *cache_key, void **cache_p, uint flags, void *user_data) IDTypeForeachCacheFunctionCallback
void(*)(ID *id, LibraryForeachIDData *data) IDTypeForeachIDFunction
IDTypeInfo IDType_ID_NT
Definition node.cc:2026
void(*)(ID *id) IDTypeFreeDataFunction
Definition BKE_idtype.hh:96
IDTypeInfo IDType_ID_CU_LEGACY
Definition curve.cc:285
IDTypeInfo IDType_ID_AR
IDTypeInfo IDType_ID_VO
IDTypeInfo IDType_ID_CA
const IDTypeInfo * BKE_idtype_get_info_from_idtype_index(const int idtype_index)
Definition idtype.cc:127
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:146
void(*)(ID *id) IDTypeInitDataFunction
Definition BKE_idtype.hh:90
void(*)(ID *id_dst, ID *id_src) IDTypeLibOverrideApplyPost
IDTypeInfo IDType_ID_TE
Definition texture.cc:186
uint64_t BKE_idtype_idcode_to_idfilter(short idcode)
Definition idtype.cc:363
void(*)(Main *bmain, ID *id, int flags) IDTypeMakeLocalFunction
Definition BKE_idtype.hh:99
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:341
IDTypeInfo IDType_ID_AC
IDTypeInfo IDType_ID_MA
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
Definition BKE_idtype.hh:47
@ IDTYPE_FLAGS_NO_ANIMDATA
Definition BKE_idtype.hh:49
@ IDTYPE_FLAGS_ONLY_APPEND
Definition BKE_idtype.hh:41
@ IDTYPE_FLAGS_NO_COPY
Definition BKE_idtype.hh:33
@ IDTYPE_FLAGS_NO_LIBLINKING
Definition BKE_idtype.hh:35
@ IDTYPE_FLAGS_NO_MEMFILE_UNDO
Definition BKE_idtype.hh:58
@ IDTYPE_FLAGS_NEVER_UNUSED
Definition BKE_idtype.hh:72
const IDTypeInfo * BKE_idtype_get_info_from_idcode(short id_code)
Definition idtype.cc:141
int BKE_idtype_idfilter_to_index(uint64_t id_filter)
Definition idtype.cc:286
const char * BKE_idtype_idcode_to_translation_context(short idcode)
Definition idtype.cc:178
const char * BKE_idtype_idcode_to_name(short idcode)
Definition idtype.cc:164
IDTypeInfo IDType_ID_WM
Definition wm.cc:225
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:352
IDTypeInfo IDType_ID_MC
Definition movieclip.cc:298
IDTypeInfo IDType_ID_LI
Definition library.cc:198
IDTypeInfo IDType_ID_BR
Definition brush.cc:522
void BKE_idtype_init()
Definition idtype.cc:121
void(*)(BlendDataReader *reader, ID *id) IDTypeBlendReadDataFunction
bool BKE_idtype_idcode_is_linkable(short idcode)
Definition idtype.cc:197
IDTypeInfo IDType_ID_PAL
Definition paint.cc:156
void(*)(BlendLibReader *reader, ID *id) IDTypeBlendReadAfterLiblinkFunction
IDTypeInfo IDType_ID_SO
IDTypeInfo IDType_ID_GD_LEGACY
IDTypeInfo IDType_ID_PC
Definition paint.cc:226
IDTypeInfo IDType_ID_OB
void BKE_idtype_id_foreach_cache(ID *id, IDTypeForeachCacheFunctionCallback function_callback, void *user_data)
Definition idtype.cc:379
short BKE_idtype_idcode_from_name(const char *idtype_name)
Definition idtype.cc:185
void(*)( Main *bmain, std::optional< Library * > owner_library, ID *id_dst, const ID *id_src, int flag) IDTypeCopyDataFunction
Definition BKE_idtype.hh:93
IDTypeInfo IDType_ID_MB
Definition mball.cc:140
ID **(*)(ID *id, bool debug_relationship_assert) IDTypeEmbeddedOwnerPointerGetFunction
int BKE_idtype_idcode_to_index(short idcode)
Definition idtype.cc:228
IDTypeInfo IDType_ID_LINK_PLACEHOLDER
Definition lib_id.cc:88
IDTypeInfo IDType_ID_KE
Definition key.cc:171
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:373
IDTypeInfo IDType_ID_CV
IDTypeInfo IDType_ID_SCR
Definition screen.cc:174
IDTypeInfo IDType_ID_PA
Definition particle.cc:383
bool BKE_idtype_idcode_is_only_appendable(short idcode)
Definition idtype.cc:204
bool BKE_idtype_idcode_append_is_reusable(short idcode)
Definition idtype.cc:216
const char * BKE_idtype_idcode_to_name_plural(short idcode)
Definition idtype.cc:171
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:658
IDTypeInfo IDType_ID_LT
Definition lattice.cc:163
IDTypeInfo IDType_ID_GR
IDTypeInfo IDType_ID_TXT
Definition text.cc:227
bool BKE_idtype_idcode_is_valid(short idcode)
Definition idtype.cc:192
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
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
unsigned int id_session_uid
Definition BKE_idtype.hh:77
size_t identifier
Definition BKE_idtype.hh:82
const blender::FunctionRef< void(blender::ImplicitSharingPtr<> &sharing_info, blender::ColorGeometry4f *&data, size_t size)> implicit_sharing_array
const blender::FunctionRef< void(float rgb[3])> single
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
IDTypeForeachColorFunction foreach_working_space_color
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:414
uint8_t flag
Definition wm_window.cc:145