Changeset View
Changeset View
Standalone View
Standalone View
source/blender/bmesh/intern/bmesh_iterators.cc
- This file was moved from source/blender/bmesh/intern/bmesh_iterators.c.
| Show First 20 Lines • Show All 148 Lines • ▼ Show 20 Lines | case BM_FACES_OF_MESH: | ||||
| break; | break; | ||||
| default: | default: | ||||
| break; | break; | ||||
| } | } | ||||
| if (BM_iter_init(&iter, bm, itype, data) && iter.count > 0) { | if (BM_iter_init(&iter, bm, itype, data) && iter.count > 0) { | ||||
| BMElem *ele; | BMElem *ele; | ||||
| BMElem **array = iter.count > stack_array_size ? | BMElem **array = iter.count > stack_array_size ? | ||||
| MEM_mallocN(sizeof(ele) * iter.count, __func__) : | static_cast<BMElem **>(MEM_mallocN(sizeof(ele) * iter.count, __func__)) : | ||||
| stack_array; | reinterpret_cast<BMElem **>(stack_array); | ||||
| int i = 0; | int i = 0; | ||||
| *r_len = iter.count; /* set before iterating */ | *r_len = iter.count; /* set before iterating */ | ||||
| while ((ele = BM_iter_step(&iter))) { | while ((ele = static_cast<BMElem *>(BM_iter_step(&iter)))) { | ||||
| array[i++] = ele; | array[i++] = ele; | ||||
| } | } | ||||
| return array; | return array; | ||||
| } | } | ||||
| *r_len = 0; | *r_len = 0; | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| void *BMO_iter_as_arrayN(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], | void *BMO_iter_as_arrayN(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], | ||||
| const char *slot_name, | const char *slot_name, | ||||
| const char restrictmask, | const char restrictmask, | ||||
| int *r_len, | int *r_len, | ||||
| /* optional args to avoid an alloc (normally stack array) */ | /* optional args to avoid an alloc (normally stack array) */ | ||||
| void **stack_array, | void **stack_array, | ||||
| int stack_array_size) | int stack_array_size) | ||||
| { | { | ||||
| BMOIter iter; | BMOIter iter; | ||||
| BMElem *ele; | BMElem *ele; | ||||
| const int slot_len = BMO_slot_buffer_len(slot_args, slot_name); | const int slot_len = BMO_slot_buffer_len(slot_args, slot_name); | ||||
| BLI_assert(stack_array_size == 0 || (stack_array_size && stack_array)); | BLI_assert(stack_array_size == 0 || (stack_array_size && stack_array)); | ||||
| if ((ele = BMO_iter_new(&iter, slot_args, slot_name, restrictmask)) && slot_len > 0) { | if ((ele = static_cast<BMElem *>(BMO_iter_new(&iter, slot_args, slot_name, restrictmask))) && | ||||
| BMElem **array = slot_len > stack_array_size ? MEM_mallocN(sizeof(ele) * slot_len, __func__) : | slot_len > 0) { | ||||
| stack_array; | BMElem **array = slot_len > stack_array_size ? | ||||
| static_cast<BMElem **>(MEM_mallocN(sizeof(ele) * slot_len, __func__)) : | |||||
| reinterpret_cast<BMElem **>(stack_array); | |||||
| int i = 0; | int i = 0; | ||||
| do { | do { | ||||
| array[i++] = ele; | array[i++] = ele; | ||||
| } while ((ele = BMO_iter_step(&iter))); | } while ((ele = static_cast<BMElem *>(BMO_iter_step(&iter)))); | ||||
| BLI_assert(i <= slot_len); | BLI_assert(i <= slot_len); | ||||
| if (i != slot_len) { | if (i != slot_len) { | ||||
| if ((void **)array != stack_array) { | if ((void **)array != stack_array) { | ||||
| array = MEM_reallocN(array, sizeof(ele) * i); | array = static_cast<BMElem **>(MEM_reallocN(array, sizeof(ele) * i)); | ||||
| } | } | ||||
| } | } | ||||
| *r_len = i; | *r_len = i; | ||||
| return array; | return array; | ||||
| } | } | ||||
| *r_len = 0; | *r_len = 0; | ||||
| return NULL; | return NULL; | ||||
| ▲ Show 20 Lines • Show All 447 Lines • Show Last 20 Lines | |||||