115 void (*error_fn)(
const char *));
295# define _IDP_assert_type(prop, ty) (prop)
296# define _IDP_assert_type_and_subtype(prop, ty, sub_ty) (prop)
297# define _IDP_assert_type_mask(prop, ty_mask) (prop)
300#define IDP_int_get(prop) (_IDP_assert_type(prop, IDP_INT)->data.val)
301#define IDP_int_set(prop, value) \
303 IDProperty *prop_ = (prop); \
304 BLI_assert(prop_->type == IDP_INT); \
305 prop_->data.val = value; \
309#define IDP_bool_get(prop) ((_IDP_assert_type(prop, IDP_BOOLEAN))->data.val)
310#define IDP_bool_set(prop, value) \
312 IDProperty *prop_ = (prop); \
313 BLI_assert(prop_->type == IDP_BOOLEAN); \
314 prop_->data.val = value; \
318#define IDP_int_or_bool_get(prop) \
319 (_IDP_assert_type_mask(prop, (1 << IDP_INT) | (1 << IDP_BOOLEAN))->data.val)
320#define IDP_int_or_bool_set(prop, value) \
322 IDProperty *prop_ = (prop); \
323 BLI_assert(ELEM(prop_->type, IDP_INT, IDP_BOOLEAN)); \
324 prop_->data.val = value; \
328#define IDP_float_get(prop) (*(const float *)&(_IDP_assert_type(prop, IDP_FLOAT)->data.val))
329#define IDP_float_set(prop, value) \
331 IDProperty *prop_ = (prop); \
332 BLI_assert(prop_->type == IDP_FLOAT); \
333 (*(float *)&(prop_)->data.val) = value; \
337#define IDP_double_get(prop) (*(const double *)&(_IDP_assert_type(prop, IDP_DOUBLE)->data.val))
338#define IDP_double_set(prop, value) \
340 IDProperty *prop_ = (prop); \
341 BLI_assert(prop_->type == IDP_DOUBLE); \
342 (*(double *)&(prop_)->data.val) = value; \
351#define IDP_array_voidp_get(prop) (_IDP_assert_type(prop, IDP_ARRAY)->data.pointer)
353#define IDP_array_int_get(prop) \
354 static_cast<int *>(_IDP_assert_type_and_subtype(prop, IDP_ARRAY, IDP_INT)->data.pointer)
355#define IDP_array_bool_get(prop) \
356 static_cast<int8_t *>(_IDP_assert_type_and_subtype(prop, IDP_ARRAY, IDP_BOOLEAN)->data.pointer)
357#define IDP_array_float_get(prop) \
358 static_cast<float *>(_IDP_assert_type_and_subtype(prop, IDP_ARRAY, IDP_FLOAT)->data.pointer)
359#define IDP_array_double_get(prop) \
360 static_cast<double *>(_IDP_assert_type_and_subtype(prop, IDP_ARRAY, IDP_DOUBLE)->data.pointer)
361#define IDP_property_array_get(prop) \
362 static_cast<IDProperty *>(_IDP_assert_type(prop, IDP_IDPARRAY)->data.pointer)
364#define IDP_string_get(prop) ((char *)_IDP_assert_type(prop, IDP_STRING)->data.pointer)
366#define IDP_ID_get(prop) ((void)0, ((ID *)_IDP_assert_type(prop, IDP_ID)->data.pointer))
400 void (*str_append_fn)(
void *user_data,
const char *
str,
uint str_len),
410 const char *caller_func_id);
411#define IDP_BlendDataRead(reader, prop) IDP_BlendReadData_impl(reader, prop, __func__)
491std::unique_ptr<IDProperty, IDPropertyDeleter>
create(
StringRef prop_name,
496std::unique_ptr<IDProperty, IDPropertyDeleter>
create(
StringRef prop_name,
501std::unique_ptr<IDProperty, IDPropertyDeleter>
create(
StringRef prop_name,
506std::unique_ptr<IDProperty, IDPropertyDeleter>
create(StringRef prop_name,
511std::unique_ptr<IDProperty, IDPropertyDeleter>
create(StringRef prop_name,
520std::unique_ptr<IDProperty, IDPropertyDeleter>
create(StringRef prop_name,
521 Span<int32_t> values,
529std::unique_ptr<IDProperty, IDPropertyDeleter>
create(StringRef prop_name,
538std::unique_ptr<IDProperty, IDPropertyDeleter>
create(StringRef prop_name,
548std::unique_ptr<IDProperty, IDPropertyDeleter>
create_group(StringRef prop_name,
void IDP_Reset(IDProperty *prop, const IDProperty *reference)
void IDP_ui_data_free(IDProperty *prop)
IDPropertyUIData * IDP_TryConvertUIData(IDPropertyUIData *src, eIDPropertyUIDataType src_type, eIDPropertyUIDataType dst_type)
IDProperty * IDP_ID_system_properties_ensure(ID *id) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
IDProperty * IDP_GetPropertyFromGroup(const IDProperty *prop, blender::StringRef name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
IDProperty * IDP_NewString(const char *st, blender::StringRef name, eIDPropertyFlag flags={}) ATTR_WARN_UNUSED_RESULT
bool IDP_EnumItemsValidate(const IDPropertyUIDataEnumItem *items, int items_num, void(*error_fn)(const char *))
void IDP_FreeFromGroup(IDProperty *group, IDProperty *prop) ATTR_NONNULL()
void IDP_CopyPropertyContent(IDProperty *dst, const IDProperty *src) ATTR_NONNULL()
float IDP_coerce_to_float_or_zero(const IDProperty *prop)
IDProperty * IDP_ID_system_properties_get(ID *id) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
eIDPropertyUIDataType IDP_ui_data_type(const IDProperty *prop)
bool IDP_ui_data_supported(const IDProperty *prop)
void IDP_AssignString(IDProperty *prop, const char *st) ATTR_NONNULL()
void IDP_foreach_property(IDProperty *id_property_root, int type_filter, blender::FunctionRef< void(IDProperty *id_property)> callback)
IDPropertyUIData * IDP_ui_data_copy(const IDProperty *prop)
void IDP_MergeGroup_ex(IDProperty *dest, const IDProperty *src, bool do_overwrite, int flag) ATTR_NONNULL()
const IDProperty * _IDP_assert_type(const IDProperty *prop, char ty)
IDProperty * IDP_GetPropertyTypeFromGroup(const IDProperty *prop, blender::StringRef name, char type) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_AssignStringMaxSize(IDProperty *prop, const char *st, size_t st_maxncpy) ATTR_NONNULL()
char * IDP_reprN(const IDProperty *prop, uint *r_len)
const char * IDP_type_str(eIDPropertyType type, short sub_type)
void IDP_ReplaceInGroup_ex(IDProperty *group, IDProperty *prop, IDProperty *prop_exist, int flag)
@ IDP_UI_DATA_TYPE_BOOLEAN
@ IDP_UI_DATA_TYPE_UNSUPPORTED
@ IDP_UI_DATA_TYPE_STRING
IDProperty * IDP_GetIndexArray(IDProperty *prop, int index) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_FreeProperty(IDProperty *prop)
IDProperty * IDP_GetPropertyFromGroup_null(const IDProperty *prop, blender::StringRef name) ATTR_WARN_UNUSED_RESULT
int IDP_coerce_to_int_or_zero(const IDProperty *prop)
IDProperty * IDP_New(char type, const IDPropertyTemplate *val, blender::StringRef name, eIDPropertyFlag flags={}) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
IDProperty * IDP_CopyIDPArray(const IDProperty *array, int flag) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_FreePropertyContent(IDProperty *prop)
const IDProperty * _IDP_assert_type_mask(const IDProperty *prop, int ty_mask)
const IDProperty * _IDP_assert_type_and_subtype(const IDProperty *prop, char ty, char sub_ty)
void IDP_FreePropertyContent_ex(IDProperty *prop, bool do_id_user)
void IDP_ClearProperty(IDProperty *prop)
double IDP_coerce_to_double_or_zero(const IDProperty *prop)
void IDP_SetIndexArray(IDProperty *prop, int index, IDProperty *item) ATTR_NONNULL()
void IDP_ResizeIDPArray(IDProperty *prop, int newlen)
bool IDP_AddToGroup(IDProperty *group, IDProperty *prop) ATTR_NONNULL()
IDProperty * IDP_CopyProperty_ex(const IDProperty *prop, int flag) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
bool IDP_EqualsProperties_ex(const IDProperty *prop1, const IDProperty *prop2, bool is_strict) ATTR_WARN_UNUSED_RESULT
void IDP_AppendArray(IDProperty *prop, IDProperty *item)
void IDP_RemoveFromGroup(IDProperty *group, IDProperty *prop) ATTR_NONNULL()
IDProperty * IDP_EnsureProperties(ID *id) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void IDP_AssignID(IDProperty *prop, ID *id, int flag)
IDProperty * IDP_GetProperties(ID *id) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void IDP_ResizeArray(IDProperty *prop, int newlen)
IDProperty * IDP_CopyProperty(const IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_print(const IDProperty *prop)
void IDP_repr_fn(const IDProperty *prop, void(*str_append_fn)(void *user_data, const char *str, uint str_len), void *user_data)
void IDP_ui_data_free_unique_contents(IDPropertyUIData *ui_data, eIDPropertyUIDataType type, const IDPropertyUIData *other)
void IDP_ReplaceGroupInGroup(IDProperty *dest, const IDProperty *src) ATTR_NONNULL()
void IDP_MergeGroup(IDProperty *dest, const IDProperty *src, bool do_overwrite) ATTR_NONNULL()
IDProperty * IDP_NewStringMaxSize(const char *st, size_t st_maxncpy, blender::StringRef name, eIDPropertyFlag flags={}) ATTR_WARN_UNUSED_RESULT
void IDP_FreeString(IDProperty *prop) ATTR_NONNULL()
void IDP_BlendWrite(BlendWriter *writer, const IDProperty *prop)
void IDP_SyncGroupValues(IDProperty *dest, const IDProperty *src) ATTR_NONNULL()
void IDP_FreeProperty_ex(IDProperty *prop, bool do_id_user)
IDPropertyUIData * IDP_ui_data_ensure(IDProperty *prop)
bool IDP_EqualsProperties(const IDProperty *prop1, const IDProperty *prop2) ATTR_WARN_UNUSED_RESULT
void IDP_ReplaceInGroup(IDProperty *group, IDProperty *prop) ATTR_NONNULL()
void IDP_FreeArray(IDProperty *prop)
void(*)(void *user_data, IDProperty *idp) IDPWalkFunc
void IDP_BlendReadData_impl(BlendDataReader *reader, IDProperty **prop, const char *caller_func_id)
IDProperty * IDP_NewIDPArray(blender::StringRef name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
const IDPropertyUIDataEnumItem * IDP_EnumItemFind(const IDProperty *prop)
void IDP_SyncGroupTypes(IDProperty *dest, const IDProperty *src, bool do_arraylen) ATTR_NONNULL()
#define ATTR_WARN_UNUSED_RESULT
#define ATTR_NONNULL(...)
ID and Library types, which are fundamental for SDNA.
Enumerations for DNA_ID.h.
void operator()(IDProperty *id_prop)
std::unique_ptr< IDProperty, IDPropertyDeleter > create_bool(StringRef prop_name, bool value, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_BOOLEAN, set its name and value.
std::unique_ptr< IDProperty, IDPropertyDeleter > create(StringRef prop_name, int32_t value, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_INT, set its name and value.
std::unique_ptr< IDProperty, IDPropertyDeleter > create_group(StringRef prop_name, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_GROUP.
std::unique_ptr< blender::io::serialize::ArrayValue > convert_to_serialize_values(const IDProperty *properties)
Convert the given properties to Value objects for serialization.
IDProperty * convert_from_serialize_value(const blender::io::serialize::Value &value)
Convert the given value to an IDProperty.
VectorSet< T, InlineBufferCapacity, DefaultProbingStrategy, CustomIDHash< T, GetIDFn >, CustomIDEqual< T, GetIDFn > > CustomIDVectorSet
StringRef operator()(const IDProperty *value) const
CustomIDVectorSet< IDProperty *, IDPropNameGetter, 8 > children
struct IDPropertyTemplate::@306303166102371126056157213146124155011254157272 string