35 #define USE_WALKER_REUSE
40 #define USE_PIVOT_FASTMATCH
43 #define USE_PIVOT_SEARCH
59 #define PRIME_VERT_INIT 100003
186 const uint faces_src_region_len,
187 const uint verts_src_region_len)
260 #define PRIME_VERT_SMALL 7
261 #define PRIME_VERT_MID 43
262 #define PRIME_VERT_LARGE 1031
264 #define PRIME_FACE_SMALL 13
265 #define PRIME_FACE_MID 53
305 #undef PRIME_VERT_SMALL
306 #undef PRIME_VERT_MID
307 #undef PRIME_VERT_LARGE
309 #undef PRIME_FACE_SMALL
310 #undef PRIME_FACE_MID
315 #define PRIME_VERT_SMALL 11
317 #define PRIME_FACE_SMALL 17
318 #define PRIME_FACE_LARGE 1013
334 }
while ((l_iter = l_iter->next) != l_first);
350 }
while ((l_iter_radial = l_iter_radial->
radial_next) != l_iter);
352 }
while ((l_iter = l_iter->
next) != l_first);
357 #undef PRIME_VERT_SMALL
359 #undef PRIME_FACE_SMALL
360 #undef PRIME_FACE_LARGE
367 rehash_store_len_new *= 2;
369 rehash_store_len_new *
399 *((
UUID_Int *)uuid_p) = uuid_store[i++];
411 *((
UUID_Int *)uuid_p) = uuid_store[i++];
417 const uint faces_len,
428 for (f_link =
faces; f_link; f_link = f_link->
next) {
435 for (f_link =
faces; f_link; f_link = f_link->
next) {
441 for (f_link =
faces; f_link; f_link = f_link->
next) {
444 *((
UUID_Int *)uuid_p) = uuid_store[i++];
465 const uint faces_pass_len)
468 GHash *verts_uuid_pass;
469 GSet *faces_step_next;
492 for (f_link = faces_pass; f_link; f_link = f_link->
next) {
504 *val_p = (
void *)
uuid;
519 }
while ((l_iter_radial = l_iter_radial->
radial_next) != l_iter);
521 }
while ((l_iter = l_iter->
next) != l_first);
559 uint fstep_num = 0, i = 0;
582 for (i = 0; i < f_arr_len;) {
584 const uint i_init = i;
585 const int f_len = f_arr[i]->
len;
589 }
while (i < f_arr_len && (f_len == f_arr[i]->
len));
599 #undef PRIME_VERT_INIT
611 return (fstep_a->
uuid > fstep_b->
uuid) ? 1 : 0;
620 LinkNode *f_link, *f_link_next, **f_link_prev_p;
626 f_link_prev_p = &fstep->
faces;
627 for (f_link = fstep->
faces; f_link; f_link = f_link_next) {
629 f_link_next = f_link->
next;
655 f_link_prev_p = &f_link->
next;
658 *f_link_prev_p = f_link->
next;
688 for (f_link = fstep->
faces; f_link; f_link = f_link_next) {
689 f_link_next = f_link->
next;
713 const uint faces_src_region_len,
714 const uint verts_src_region_len,
715 uint *r_faces_result_len)
717 #ifndef USE_WALKER_REUSE
719 UUIDWalk *w_src = &w_src_, *w_dst = &w_dst_;
726 #ifndef USE_WALKER_REUSE
731 w_src->use_face_isolate =
true;
760 fstep_src = fstep_src_next;
761 fstep_dst = fstep_dst_next;
773 fstep_item_src && fstep_item_dst;
774 fstep_item_src = fstep_item_src->
next, fstep_item_dst = fstep_item_dst->
next) {
775 while ((fstep_item_dst !=
NULL) && (fstep_item_dst->
uuid < fstep_item_src->
uuid)) {
776 fstep_item_dst = fstep_item_dst->
next;
779 if ((fstep_item_dst ==
NULL) || (fstep_item_src->
uuid != fstep_item_dst->
uuid) ||
810 fstep_src = fstep_src->
next;
811 fstep_dst = fstep_dst->
next;
834 faces_result =
MEM_mallocN(
sizeof(*faces_result) * (faces_result_len + 1), __func__);
839 faces_result[faces_result_len] =
NULL;
840 *r_faces_result_len = faces_result_len;
843 *r_faces_result_len = 0;
848 #ifdef USE_WALKER_REUSE
863 const uint faces_len,
869 for (i = 0; i < faces_len; i++) {
882 }
while ((l_iter = l_iter->
next) != l_first);
890 *r_verts_len = verts_len;
894 #ifdef USE_PIVOT_SEARCH
905 return (
a < 0) ? -
a :
a;
910 if (
e->l->radial_next !=
e->l) {
932 if (e_pivot_test_id[0] > e_pivot_test_id[1]) {
936 if ((*r_e_pivot_best ==
NULL) ||
937 ((e_pivot_best_id[0] != e_pivot_test_id[0]) ? (e_pivot_best_id[0] < e_pivot_test_id[0]) :
938 (e_pivot_best_id[1] < e_pivot_test_id[1]))) {
939 e_pivot_best_id[0] = e_pivot_test_id[0];
940 e_pivot_best_id[1] = e_pivot_test_id[1];
943 *r_e_pivot_best = e_test;
950 # define PRIME_VERT_SMALL_A 7
951 # define PRIME_VERT_SMALL_B 13
952 # define PRIME_VERT_MID_A 103
953 # define PRIME_VERT_MID_B 131
971 # undef PRIME_VERT_SMALL_A
972 # undef PRIME_VERT_SMALL_B
973 # undef PRIME_VERT_MID_A
974 # undef PRIME_VERT_MID_B
990 # define PRIME_VERT_MID_A 23
991 # define PRIME_VERT_MID_B 31
999 if (v_other_id > 0) {
1000 v_sum_id += v_other_id;
1008 v_sum_face_len += l_iter->
f->
len;
1026 # undef PRIME_VERT_MID_A
1027 # undef PRIME_VERT_MID_B
1038 uint faces_region_len,
1039 uint verts_region_len,
1058 uint vert_queue_used = 0;
1064 for (i = 0; i < faces_region_len; i++) {
1065 BMFace *f = faces_region[i];
1067 BMLoop *l_iter, *l_first;
1073 for (j = 0; j < 2; j++) {
1077 *val_p = (
void *)v_id;
1079 vert_queue_used += 1;
1085 e_pivot_fallback =
e;
1087 }
while ((l_iter = l_iter->
next) != l_first);
1105 *val_p = (
void *)v_id_other;
1107 vert_queue_used += 1;
1117 for (v_link = vert_queue_next; v_link; v_link = v_link->
next) {
1119 *v_id_p = -(*v_id_p);
1127 if (vert_queue_used == verts_region_len) {
1136 SUID_Int e_pivot_best_id[2] = {0, 0};
1139 for (v_link = vert_queue_prev; v_link; v_link = v_link->
next) {
1145 for (v_link = vert_queue_prev; v_link; v_link = v_link->
next) {
1162 e_pivot = e_pivot_best;
1168 SUID_Int e_pivot_best_id[2] = {0, 0};
1177 for (v_link = vert_queue_prev; v_link; v_link = v_link->
next) {
1192 e_pivot = e_pivot_best;
1200 if (e_pivot ==
NULL) {
1202 printf(
"%s: using fallback edge!\n", __func__);
1204 e_pivot = e_pivot_fallback;
1208 *r_depth = (
uint)pass;
1219 #ifdef USE_PIVOT_FASTMATCH
1233 # define PRIME_EDGE 7
1234 # define PRIME_FACE 31
1235 # define PRIME_LOOP 61
1270 for (pass = 0; pass < depth; pass++) {
1273 memcpy(id_curr, id_prev,
sizeof(*id_prev) * (
uint)
bm->
totvert);
1280 id_curr[
i1] += id_prev[i2];
1281 id_curr[i2] += id_prev[
i1];
1297 if (e_fm[0] > e_fm[1]) {
1310 return ((e_a_fm[0] == e_b_fm[0]) && (e_a_fm[1] == e_b_fm[1]));
1324 uint faces_region_len,
1330 uint verts_region_len = 0;
1331 uint faces_result_len = 0;
1335 #ifdef USE_WALKER_REUSE
1339 #ifdef USE_PIVOT_FASTMATCH
1358 #ifdef USE_PIVOT_SEARCH
1374 if (e_src ==
NULL) {
1376 printf(
"Couldn't find 'e_src'");
1383 #ifdef USE_PIVOT_FASTMATCH
1392 #ifdef USE_WALKER_REUSE
1399 uint faces_result_len_out;
1405 #ifdef USE_PIVOT_FASTMATCH
1424 &faces_result_len_out);
1434 faces_result_len += 1;
1438 #ifdef USE_WALKER_REUSE
1445 #ifdef USE_PIVOT_FASTMATCH
1452 printf(
"%s: search: %d, found %d\n", __func__, search_num, faces_result_len);
1459 return (
int)faces_result_len;
#define BLI_array_alloca(arr, realsize)
BLI_INLINE void * BLI_ghashIterator_getKey(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
bool BLI_ghash_haskey(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
bool BLI_gset_haskey(const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_clear(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
BLI_INLINE void * BLI_ghashIterator_getValue(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
BLI_INLINE void ** BLI_ghashIterator_getValue_p(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
GSet * BLI_gset_new_ex(GSetHashFP hashfp, GSetCmpFP cmpfp, const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
#define GHASH_ITER(gh_iter_, ghash_)
void BLI_gset_clear(GSet *gs, GSetKeyFreeFP keyfreefp)
unsigned int BLI_gset_len(const GSet *gs) ATTR_WARN_UNUSED_RESULT
void BLI_gset_insert(GSet *gs, void *key)
GHash * BLI_ghash_int_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
unsigned int BLI_ghash_len(const GHash *gh) ATTR_WARN_UNUSED_RESULT
GHash * BLI_ghash_new_ex(GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void ** BLI_ghash_lookup_p(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghash_ensure_p(GHash *gh, void *key, void ***r_val) ATTR_WARN_UNUSED_RESULT
#define GHASH_ITER_INDEX(gh_iter_, ghash_, i_)
void BLI_linklist_free_pool(LinkNode *list, LinkNodeFreeFP freefunc, struct BLI_mempool *mempool)
int BLI_linklist_count(const LinkNode *list) ATTR_WARN_UNUSED_RESULT
void void BLI_linklist_prepend_pool(LinkNode **listp, void *ptr, struct BLI_mempool *mempool) ATTR_NONNULL(1
BLI_LINKSTACK_*** wrapper macros for using a LinkNode to store a stack of pointers,...
#define BLI_LINKSTACK_PUSH(var, ptr)
#define BLI_LINKSTACK_DECLARE(var, type)
#define BLI_LINKSTACK_SIZE(var)
#define BLI_LINKSTACK_FREE(var)
#define BLI_LINKSTACK_INIT(var)
#define BLI_LINKSTACK_POP(var)
#define BLI_LINKSTACK_SWAP(var_a, var_b)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void * BLI_pophead(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
struct LinkData * BLI_genericNodeN(void *data)
void void BLI_listbase_sort(struct ListBase *listbase, int(*cmp)(const void *, const void *)) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_mempool_free(BLI_mempool *pool, void *addr) ATTR_NONNULL(1
BLI_mempool * BLI_mempool_create(unsigned int esize, unsigned int elem_num, unsigned int pchunk, unsigned int flag) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL
void * BLI_mempool_alloc(BLI_mempool *pool) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(1)
void BLI_mempool_destroy(BLI_mempool *pool) ATTR_NONNULL(1)
void BLI_mempool_clear(BLI_mempool *pool) ATTR_NONNULL(1)
Strict compiler flags for areas of code we want to ensure don't do conversions without us knowing abo...
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint i1
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
Read Guarded memory(de)allocation.
#define MEM_reallocN(vmemh, len)
Platform independent time functions.
Utility defines for timing/benchmarks.
#define TIMEIT_START(var)
#define BM_FACE_FIRST_LOOP(p)
#define BM_elem_index_get(ele)
#define BM_elem_flag_disable(ele, hflag)
#define BM_elem_flag_test(ele, hflag)
#define BM_elem_flag_test_bool(ele, hflag)
#define BM_elem_flag_enable(ele, hflag)
#define BM_ITER_ELEM(ele, iter, data, itype)
#define BM_ITER_MESH(ele, iter, bm, itype)
#define BM_ITER_MESH_INDEX(ele, iter, bm, itype, indexvar)
ATTR_WARN_UNUSED_RESULT BMesh * bm
void BM_select_history_clear(BMesh *bm)
BMEdge * BM_mesh_active_edge_get(BMesh *bm)
void BM_mesh_elem_hflag_disable_all(BMesh *bm, const char htype, const char hflag, const bool respecthide)
#define BM_select_history_store(bm, ele)
void BM_mesh_elem_index_ensure(BMesh *bm, const char htype)
int BM_edge_face_count(const BMEdge *e)
BLI_INLINE BMVert * BM_edge_other_vert(BMEdge *e, const BMVert *v) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
BLI_INLINE bool BM_edge_is_wire(const BMEdge *e) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
static void bm_uuidwalk_init(UUIDWalk *uuidwalk, const uint faces_src_region_len, const uint verts_src_region_len)
BLI_INLINE bool bm_uuidwalk_face_test(UUIDWalk *uuidwalk, BMFace *f)
BLI_INLINE bool bm_uuidwalk_vert_lookup(UUIDWalk *uuidwalk, BMVert *v, UUID_Int *r_uuid)
static void bm_face_region_pivot_edge_use_best(GHash *gh, BMEdge *e_test, BMEdge **r_e_pivot_best, SUID_Int e_pivot_best_id[2])
static UUID_Int bm_uuidwalk_calc_face_uuid(UUIDWalk *uuidwalk, BMFace *f)
struct UUIDFaceStepItem UUIDFaceStepItem
static void bm_uuidwalk_free(UUIDWalk *uuidwalk)
static int bm_face_len_cmp(const void *v1, const void *v2)
static void bm_uuidwalk_rehash_reserve(UUIDWalk *uuidwalk, uint rehash_store_len_new)
static bool ghashutil_bmelem_indexcmp(const void *a, const void *b)
static bool bm_vert_is_uuid_connect(UUIDWalk *uuidwalk, BMVert *v)
static UUID_Int bm_uuidwalk_calc_vert_uuid(UUIDWalk *uuidwalk, BMVert *v)
static void bm_uuidwalk_pass_add(UUIDWalk *uuidwalk, LinkNode *faces_pass, const uint faces_pass_len)
static UUIDFashMatch bm_vert_fasthash_single(BMVert *v)
static UUIDFashMatch * bm_vert_fasthash_create(BMesh *bm, const uint depth)
static bool bm_uuidwalk_facestep_begin(UUIDWalk *uuidwalk, UUIDFaceStep *fstep)
static BMFace ** bm_mesh_region_match_pair(UUIDWalk *w_src, UUIDWalk *w_dst, BMEdge *e_src, BMEdge *e_dst, const uint faces_src_region_len, const uint verts_src_region_len, uint *r_faces_result_len)
BLI_INLINE intptr_t abs_intptr(intptr_t a)
BLI_INLINE bool bm_uuidwalk_face_lookup(UUIDWalk *uuidwalk, BMFace *f, UUID_Int *r_uuid)
static GSet * gset_bmelem_new_ex(const char *info, const uint nentries_reserve)
static void bm_vert_fasthash_destroy(UUIDFashMatch *fm)
static SUID_Int bm_face_region_vert_pass_id(GHash *gh, BMVert *v)
static uint bm_uuidwalk_init_from_edge(UUIDWalk *uuidwalk, BMEdge *e)
static int facestep_sort(const void *a, const void *b)
static void bm_uuidwalk_facestep_free(UUIDWalk *uuidwalk, UUIDFaceStep *fstep)
static uint ghashutil_bmelem_indexhash(const void *key)
static bool bm_vert_fasthash_edge_is_match(UUIDFashMatch *fm, const BMEdge *e_a, const BMEdge *e_b)
static BMEdge * bm_face_region_pivot_edge_find(BMFace **faces_region, uint faces_region_len, uint verts_region_len, uint *r_depth)
static void bm_uuidwalk_rehash(UUIDWalk *uuidwalk)
static void bm_uuidwalk_facestep_end(UUIDWalk *uuidwalk, UUIDFaceStep *fstep)
#define PRIME_VERT_SMALL_A
static void bm_uuidwalk_clear(UUIDWalk *uuidwalk)
struct UUIDFaceStep UUIDFaceStep
static SUID_Int bm_face_region_vert_boundary_id(BMVert *v)
static bool bm_edge_is_region_boundary(BMEdge *e)
static GHash * ghash_bmelem_new(const char *info)
static void bm_vert_fasthash_edge_order(const UUIDFashMatch *fm, const BMEdge *e, UUIDFashMatch e_fm[2])
#define PRIME_VERT_SMALL_B
int BM_mesh_region_match(BMesh *bm, BMFace **faces_region, uint faces_region_len, ListBase *r_face_regions)
static void bm_uuidwalk_rehash_facelinks(UUIDWalk *uuidwalk, LinkNode *faces, const uint faces_len, const bool is_init)
static GHash * ghash_bmelem_new_ex(const char *info, const uint nentries_reserve)
static void bm_face_array_visit(BMFace **faces, const uint faces_len, uint *r_verts_len, bool visit_faces)
static GSet * gset_bmelem_new(const char *info)
SyclQueue void void size_t num_bytes void
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
_W64 unsigned int uintptr_t
struct BMLoop * radial_next
struct UUIDFaceStepItem * prev
struct UUIDFaceStepItem * next
struct UUIDFaceStep * prev
struct UUIDFaceStep * next
BLI_mempool * step_pool_items
struct UUIDWalk::@176 cache