BLI_array: add BLI_array_trim utility to re-allocate the current size
Use this in BKE_view_layer_array_* functions.
This commit is contained in:
@@ -67,9 +67,11 @@ Object **BKE_view_layer_array_selected_objects_params(
|
|||||||
}
|
}
|
||||||
FOREACH_SELECTED_OBJECT_END;
|
FOREACH_SELECTED_OBJECT_END;
|
||||||
|
|
||||||
object_array = MEM_reallocN(object_array, sizeof(*object_array) * BLI_array_len(object_array));
|
if (object_array != NULL) {
|
||||||
/* We always need a valid allocation (prevent crash on free). */
|
BLI_array_trim(object_array);
|
||||||
if (object_array == NULL) {
|
}
|
||||||
|
else {
|
||||||
|
/* We always need a valid allocation (prevent crash on free). */
|
||||||
object_array = MEM_mallocN(0, __func__);
|
object_array = MEM_mallocN(0, __func__);
|
||||||
}
|
}
|
||||||
*r_len = BLI_array_len(object_array);
|
*r_len = BLI_array_len(object_array);
|
||||||
@@ -121,9 +123,11 @@ Base **BKE_view_layer_array_from_bases_in_mode_params(ViewLayer *view_layer,
|
|||||||
}
|
}
|
||||||
FOREACH_BASE_IN_MODE_END;
|
FOREACH_BASE_IN_MODE_END;
|
||||||
|
|
||||||
base_array = MEM_reallocN(base_array, sizeof(*base_array) * BLI_array_len(base_array));
|
|
||||||
/* We always need a valid allocation (prevent crash on free). */
|
/* We always need a valid allocation (prevent crash on free). */
|
||||||
if (base_array == NULL) {
|
if (base_array != NULL) {
|
||||||
|
BLI_array_trim(base_array);
|
||||||
|
}
|
||||||
|
else {
|
||||||
base_array = MEM_mallocN(0, __func__);
|
base_array = MEM_mallocN(0, __func__);
|
||||||
}
|
}
|
||||||
*r_len = BLI_array_len(base_array);
|
*r_len = BLI_array_len(base_array);
|
||||||
|
|||||||
@@ -146,6 +146,17 @@ void _bli_array_grow_func(void **arr_p,
|
|||||||
*/
|
*/
|
||||||
#define BLI_array_fake_user(arr) ((void)_##arr##_len, (void)_##arr##_static)
|
#define BLI_array_fake_user(arr) ((void)_##arr##_len, (void)_##arr##_static)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trim excess items from the array (when they exist).
|
||||||
|
*/
|
||||||
|
#define BLI_array_trim(arr) \
|
||||||
|
{ \
|
||||||
|
if (_bli_array_totalsize_dynamic(arr) != _##arr##_len) { \
|
||||||
|
arr = MEM_reallocN(arr, sizeof(*arr) * _##arr##_len); \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
((void)0)
|
||||||
|
|
||||||
/** \} */
|
/** \} */
|
||||||
|
|
||||||
/* -------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------- */
|
||||||
|
|||||||
Reference in New Issue
Block a user