Blender  V3.3
BKE_idtype.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 
4 #pragma once
5 
12 #include "BLI_sys_types.h"
13 
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 
19 struct BlendDataReader;
20 struct BlendExpander;
21 struct BlendLibReader;
22 struct BlendWriter;
23 struct ID;
25 struct Main;
26 
28 enum {
42 };
43 
44 typedef struct IDCacheKey {
45  /* The session UUID of the ID owning the cached data. */
46  unsigned int id_session_uuid;
47  /* Value uniquely identifying the cache within its ID.
48  * Typically the offset of its member in the data-block struct, but can be anything. */
49  size_t offset_in_ID;
51 
52 uint BKE_idtype_cache_key_hash(const void *key_v);
53 bool BKE_idtype_cache_key_cmp(const void *key_a_v, const void *key_b_v);
54 
55 /* ********** Prototypes for #IDTypeInfo callbacks. ********** */
56 
57 typedef void (*IDTypeInitDataFunction)(struct ID *id);
58 
60 typedef void (*IDTypeCopyDataFunction)(struct Main *bmain,
61  struct ID *id_dst,
62  const struct ID *id_src,
63  int flag);
64 
65 typedef void (*IDTypeFreeDataFunction)(struct ID *id);
66 
68 typedef void (*IDTypeMakeLocalFunction)(struct Main *bmain, struct ID *id, int flags);
69 
71 
78  const struct IDCacheKey *cache_key,
79  void **cache_p,
80  uint flags,
81  void *user_data);
82 typedef void (*IDTypeForeachCacheFunction)(struct ID *id,
83  IDTypeForeachCacheFunctionCallback function_callback,
84  void *user_data);
85 
86 typedef void (*IDTypeForeachPathFunction)(struct ID *id, struct BPathForeachPathData *bpath_data);
87 
90 typedef struct ID *(*IDTypeEmbeddedOwnerGetFunction)(struct Main *bmain,
91  struct ID *id,
92  struct ID *owner_id_hint);
93 
94 typedef void (*IDTypeBlendWriteFunction)(struct BlendWriter *writer,
95  struct ID *id,
96  const void *id_address);
97 typedef void (*IDTypeBlendReadDataFunction)(struct BlendDataReader *reader, struct ID *id);
98 typedef void (*IDTypeBlendReadLibFunction)(struct BlendLibReader *reader, struct ID *id);
99 typedef void (*IDTypeBlendReadExpandFunction)(struct BlendExpander *expander, struct ID *id);
100 
102  struct ID *id_new,
103  struct ID *id_old);
104 
105 typedef void (*IDTypeLibOverrideApplyPost)(struct ID *id_dst, struct ID *id_src);
106 
107 typedef struct IDTypeInfo {
108  /* ********** General IDType data. ********** */
109 
114  short id_code;
120 
127 
129  size_t struct_size;
130 
132  const char *name;
134  const char *name_plural;
136  const char *translation_context;
137 
140 
145 
146  /* ********** ID management callbacks ********** */
147 
152 
158 
163 
169 
175 
180 
185 
190 
191  /* ********** Callbacks for reading and writing .blend files. ********** */
192 
197 
202 
207 
212 
219 
227 
228 /* ********** Declaration of each IDTypeInfo. ********** */
229 
230 /* Those are defined in the respective BKE files. */
232 extern IDTypeInfo IDType_ID_LI;
233 extern IDTypeInfo IDType_ID_OB;
234 extern IDTypeInfo IDType_ID_ME;
236 extern IDTypeInfo IDType_ID_MB;
237 extern IDTypeInfo IDType_ID_MA;
238 extern IDTypeInfo IDType_ID_TE;
239 extern IDTypeInfo IDType_ID_IM;
240 extern IDTypeInfo IDType_ID_LT;
241 extern IDTypeInfo IDType_ID_LA;
242 extern IDTypeInfo IDType_ID_CA;
243 extern IDTypeInfo IDType_ID_IP;
244 extern IDTypeInfo IDType_ID_KE;
245 extern IDTypeInfo IDType_ID_WO;
247 extern IDTypeInfo IDType_ID_VF;
250 extern IDTypeInfo IDType_ID_SO;
251 extern IDTypeInfo IDType_ID_GR;
252 extern IDTypeInfo IDType_ID_AR;
253 extern IDTypeInfo IDType_ID_AC;
254 extern IDTypeInfo IDType_ID_NT;
255 extern IDTypeInfo IDType_ID_BR;
256 extern IDTypeInfo IDType_ID_PA;
257 extern IDTypeInfo IDType_ID_GD;
258 extern IDTypeInfo IDType_ID_WM;
259 extern IDTypeInfo IDType_ID_MC;
261 extern IDTypeInfo IDType_ID_LS;
263 extern IDTypeInfo IDType_ID_PC;
264 extern IDTypeInfo IDType_ID_CF;
265 extern IDTypeInfo IDType_ID_WS;
266 extern IDTypeInfo IDType_ID_LP;
267 extern IDTypeInfo IDType_ID_CV;
268 extern IDTypeInfo IDType_ID_PT;
269 extern IDTypeInfo IDType_ID_VO;
271 
274 
275 /* ********** Helpers/Utils API. ********** */
276 
277 /* Module initialization. */
278 void BKE_idtype_init(void);
279 
280 /* General helpers. */
282 const struct IDTypeInfo *BKE_idtype_get_info_from_id(const struct ID *id);
283 
290 const char *BKE_idtype_idcode_to_name(short idcode);
297 const char *BKE_idtype_idcode_to_name_plural(short idcode);
304 const char *BKE_idtype_idcode_to_translation_context(short idcode);
305 
312 bool BKE_idtype_idcode_is_valid(short idcode);
313 
320 bool BKE_idtype_idcode_is_linkable(short idcode);
327 bool BKE_idtype_idcode_is_only_appendable(short idcode);
334 bool BKE_idtype_idcode_append_is_reusable(short idcode);
335 /* Macro currently, since any linkable IDtype should be localizable. */
336 #define BKE_idtype_idcode_is_localizable BKE_idtype_idcode_is_linkable
337 
344 short BKE_idtype_idcode_from_name(const char *idtype_name);
345 
354 
358 int BKE_idtype_idcode_to_index(short idcode);
362 short BKE_idtype_idcode_from_index(int index);
363 
370 short BKE_idtype_idcode_iter_step(int *index);
371 
372 /* Some helpers/wrappers around callbacks defined in #IDTypeInfo, dealing e.g. with embedded IDs.
373  * XXX Ideally those would rather belong to #BKE_lib_id, but using callback function pointers makes
374  * this hard to do properly if we want to avoid headers includes in headers. */
375 
379 void BKE_idtype_id_foreach_cache(struct ID *id,
380  IDTypeForeachCacheFunctionCallback function_callback,
381  void *user_data);
382 
383 #ifdef __cplusplus
384 }
385 #endif
IDTypeInfo IDType_ID_SIM
Definition: simulation.cc:134
IDTypeInfo IDType_ID_SCE
Definition: scene.cc:1693
IDTypeInfo IDType_ID_WS
Definition: workspace.c:178
void(* IDTypeCopyDataFunction)(struct Main *bmain, struct ID *id_dst, const struct ID *id_src, int flag)
Definition: BKE_idtype.h:60
const char * BKE_idtype_idcode_to_name(short idcode)
Definition: idtype.c:142
IDTypeInfo IDType_ID_NT
Definition: node.cc:1024
void(* IDTypeLibOverrideApplyPost)(struct ID *id_dst, struct ID *id_src)
Definition: BKE_idtype.h:105
struct IDTypeInfo IDTypeInfo
IDTypeInfo IDType_ID_CU_LEGACY
Definition: curve.cc:306
IDTypeInfo IDType_ID_AR
Definition: armature.c:298
IDTypeInfo IDType_ID_VO
Definition: volume.cc:649
IDTypeInfo IDType_ID_CA
Definition: camera.c:167
IDTypeInfo IDType_ID_LP
Definition: lightprobe.c:70
void(* IDTypeBlendReadDataFunction)(struct BlendDataReader *reader, struct ID *id)
Definition: BKE_idtype.h:97
short BKE_idtype_idcode_from_idfilter(uint64_t idfilter)
Definition: idtype.c:266
void(* IDTypeForeachIDFunction)(struct ID *id, struct LibraryForeachIDData *data)
Definition: BKE_idtype.h:70
IDTypeInfo IDType_ID_LA
Definition: light.c:173
struct ID *(* IDTypeEmbeddedOwnerGetFunction)(struct Main *bmain, struct ID *id, struct ID *owner_id_hint)
Definition: BKE_idtype.h:90
IDTypeInfo IDType_ID_IP
Definition: ipo.c:163
IDTypeInfo IDType_ID_TE
Definition: texture.c:191
uint64_t BKE_idtype_idcode_to_idfilter(short idcode)
Definition: idtype.c:206
bool BKE_idtype_cache_key_cmp(const void *key_a_v, const void *key_b_v)
Definition: idtype.c:39
void(* IDTypeForeachCacheFunction)(struct ID *id, IDTypeForeachCacheFunctionCallback function_callback, void *user_data)
Definition: BKE_idtype.h:82
IDTypeInfo IDType_ID_AC
Definition: action.c:300
IDTypeInfo IDType_ID_MA
Definition: material.c:240
const struct IDTypeInfo * BKE_idtype_get_info_from_idcode(short id_code)
Definition: idtype.c:112
const char * BKE_idtype_idcode_to_translation_context(short idcode)
Definition: idtype.c:156
IDTypeInfo IDType_ID_WM
Definition: wm.c:258
void(* IDTypeFreeDataFunction)(struct ID *id)
Definition: BKE_idtype.h:65
IDTypeInfo IDType_ID_SPK
Definition: speaker.c:79
IDTypeInfo IDType_ID_WO
Definition: world.c:182
void BKE_idtype_id_foreach_cache(struct ID *id, IDTypeForeachCacheFunctionCallback function_callback, void *user_data)
Definition: idtype.c:447
IDTypeInfo IDType_ID_VF
Definition: vfont.c:156
IDTypeInfo IDType_ID_PT
Definition: pointcloud.cc:160
void(* IDTypeBlendReadExpandFunction)(struct BlendExpander *expander, struct ID *id)
Definition: BKE_idtype.h:99
const char * BKE_idtype_idcode_to_name_plural(short idcode)
Definition: idtype.c:149
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
Definition: BKE_idtype.h:39
@ IDTYPE_FLAGS_NO_ANIMDATA
Definition: BKE_idtype.h:41
@ IDTYPE_FLAGS_ONLY_APPEND
Definition: BKE_idtype.h:36
@ IDTYPE_FLAGS_NO_COPY
Definition: BKE_idtype.h:30
@ IDTYPE_FLAGS_NO_LIBLINKING
Definition: BKE_idtype.h:32
IDTypeInfo IDType_ID_MC
Definition: movieclip.c:328
short BKE_idtype_idcode_iter_step(int *index)
Definition: idtype.c:442
IDTypeInfo IDType_ID_LI
Definition: library.c:82
IDTypeInfo IDType_ID_BR
Definition: brush.cc:395
bool BKE_idtype_idcode_is_linkable(short idcode)
Definition: idtype.c:175
IDTypeInfo IDType_ID_PAL
Definition: paint.c:123
void(* IDTypeForeachPathFunction)(struct ID *id, struct BPathForeachPathData *bpath_data)
Definition: BKE_idtype.h:86
void(* IDTypeBlendReadLibFunction)(struct BlendLibReader *reader, struct ID *id)
Definition: BKE_idtype.h:98
IDTypeInfo IDType_ID_SO
IDTypeInfo IDType_ID_PC
Definition: paint.c:190
IDTypeInfo IDType_ID_OB
Definition: object.cc:1222
void(* IDTypeInitDataFunction)(struct ID *id)
Definition: BKE_idtype.h:57
short BKE_idtype_idcode_from_name(const char *idtype_name)
Definition: idtype.c:163
IDTypeInfo IDType_ID_GD
Definition: gpencil.c:299
IDTypeInfo IDType_ID_MB
Definition: mball.c:168
short BKE_idtype_idcode_from_index(int index)
Definition: idtype.c:383
int BKE_idtype_idcode_to_index(short idcode)
Definition: idtype.c:324
IDTypeInfo IDType_ID_LINK_PLACEHOLDER
Definition: lib_id.c:77
IDTypeInfo IDType_ID_KE
Definition: key.c:193
IDTypeInfo IDType_ID_MSK
Definition: mask.c:234
void(* IDTypeBlendReadUndoPreserve)(struct BlendLibReader *reader, struct ID *id_new, struct ID *id_old)
Definition: BKE_idtype.h:101
IDTypeInfo IDType_ID_CV
Definition: curves.cc:201
IDTypeInfo IDType_ID_SCR
Definition: screen.c:278
IDTypeInfo IDType_ID_PA
Definition: particle.c:479
bool BKE_idtype_idcode_is_only_appendable(short idcode)
Definition: idtype.c:182
bool BKE_idtype_idcode_append_is_reusable(short idcode)
Definition: idtype.c:194
void(* IDTypeBlendWriteFunction)(struct BlendWriter *writer, struct ID *id, const void *id_address)
Definition: BKE_idtype.h:94
IDTypeInfo IDType_ID_ME
Definition: mesh.cc:364
const struct IDTypeInfo * BKE_idtype_get_info_from_id(const struct ID *id)
struct IDCacheKey IDCacheKey
uint BKE_idtype_cache_key_hash(const void *key_v)
Definition: idtype.c:31
IDTypeInfo IDType_ID_LS
Definition: linestyle.c:733
IDTypeInfo IDType_ID_LT
Definition: lattice.c:175
IDTypeInfo IDType_ID_GR
Definition: collection.c:360
void(* IDTypeMakeLocalFunction)(struct Main *bmain, struct ID *id, int flags)
Definition: BKE_idtype.h:68
IDTypeInfo IDType_ID_TXT
Definition: text.c:230
bool BKE_idtype_idcode_is_valid(short idcode)
Definition: idtype.c:170
IDTypeInfo IDType_ID_CF
Definition: cachefile.c:131
eIDTypeInfoCacheCallbackFlags
Definition: BKE_idtype.h:72
@ IDTYPE_CACHE_CB_FLAGS_PERSISTENT
Definition: BKE_idtype.h:75
void BKE_idtype_init(void)
Definition: idtype.c:106
void(* IDTypeForeachCacheFunctionCallback)(struct ID *id, const struct IDCacheKey *cache_key, void **cache_p, uint flags, void *user_data)
Definition: BKE_idtype.h:77
unsigned int uint
Definition: BLI_sys_types.h:67
void * user_data
SyclQueue void void size_t num_bytes void
unsigned int uint32_t
Definition: stdint.h:80
unsigned __int64 uint64_t
Definition: stdint.h:90
unsigned int id_session_uuid
Definition: BKE_idtype.h:46
size_t offset_in_ID
Definition: BKE_idtype.h:49
IDTypeBlendReadUndoPreserve blend_read_undo_preserve
Definition: BKE_idtype.h:218
IDTypeBlendReadExpandFunction blend_read_expand
Definition: BKE_idtype.h:211
int main_listbase_index
Definition: BKE_idtype.h:126
IDTypeEmbeddedOwnerGetFunction owner_get
Definition: BKE_idtype.h:189
short id_code
Definition: BKE_idtype.h:114
const char * name
Definition: BKE_idtype.h:132
struct AssetTypeInfo * asset_type_info
Definition: BKE_idtype.h:144
IDTypeForeachIDFunction foreach_id
Definition: BKE_idtype.h:174
const char * name_plural
Definition: BKE_idtype.h:134
IDTypeCopyDataFunction copy_data
Definition: BKE_idtype.h:157
IDTypeInitDataFunction init_data
Definition: BKE_idtype.h:151
IDTypeForeachCacheFunction foreach_cache
Definition: BKE_idtype.h:179
uint64_t id_filter
Definition: BKE_idtype.h:119
IDTypeBlendWriteFunction blend_write
Definition: BKE_idtype.h:196
IDTypeBlendReadDataFunction blend_read_data
Definition: BKE_idtype.h:201
IDTypeFreeDataFunction free_data
Definition: BKE_idtype.h:162
uint32_t flags
Definition: BKE_idtype.h:139
size_t struct_size
Definition: BKE_idtype.h:129
IDTypeMakeLocalFunction make_local
Definition: BKE_idtype.h:168
IDTypeLibOverrideApplyPost lib_override_apply_post
Definition: BKE_idtype.h:225
IDTypeForeachPathFunction foreach_path
Definition: BKE_idtype.h:184
const char * translation_context
Definition: BKE_idtype.h:136
IDTypeBlendReadLibFunction blend_read_lib
Definition: BKE_idtype.h:206
Definition: DNA_ID.h:368
short flag
Definition: DNA_ID.h:383
Definition: BKE_main.h:121