[Bf-blender-cvs] [e0d4aede4da] master: BMesh: move bmesh_mesh to C++

Campbell Barton noreply at git.blender.org
Fri Jul 22 12:42:36 CEST 2022


Commit: e0d4aede4da8a1f670f53fe597140111b9726234
Author: Campbell Barton
Date:   Fri Jul 22 16:49:37 2022 +1000
Branches: master
https://developer.blender.org/rBe0d4aede4da8a1f670f53fe597140111b9726234

BMesh: move bmesh_mesh to C++

This allows parts of the code to be threaded more easily.

===================================================================

M	source/blender/bmesh/CMakeLists.txt
R084	source/blender/bmesh/intern/bmesh_mesh.c	source/blender/bmesh/intern/bmesh_mesh.cc

===================================================================

diff --git a/source/blender/bmesh/CMakeLists.txt b/source/blender/bmesh/CMakeLists.txt
index 31492cd5c13..0d1eeab8eec 100644
--- a/source/blender/bmesh/CMakeLists.txt
+++ b/source/blender/bmesh/CMakeLists.txt
@@ -80,7 +80,7 @@ set(SRC
   intern/bmesh_log.h
   intern/bmesh_marking.c
   intern/bmesh_marking.h
-  intern/bmesh_mesh.c
+  intern/bmesh_mesh.cc
   intern/bmesh_mesh.h
   intern/bmesh_mesh_convert.cc
   intern/bmesh_mesh_convert.h
diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.cc
similarity index 84%
rename from source/blender/bmesh/intern/bmesh_mesh.c
rename to source/blender/bmesh/intern/bmesh_mesh.cc
index 7dba854b9ef..c16d874e3ec 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.cc
@@ -88,19 +88,19 @@ void BM_mesh_elem_toolflags_ensure(BMesh *bm)
   BMVert_OFlag *v_olfag;
   BLI_mempool *toolflagpool = bm->vtoolflagpool;
   BM_ITER_MESH (v_olfag, &iter, bm, BM_VERTS_OF_MESH) {
-    v_olfag->oflags = BLI_mempool_calloc(toolflagpool);
+    v_olfag->oflags = (BMFlagLayer *)BLI_mempool_calloc(toolflagpool);
   }
 
   BMEdge_OFlag *e_olfag;
   toolflagpool = bm->etoolflagpool;
   BM_ITER_MESH (e_olfag, &iter, bm, BM_EDGES_OF_MESH) {
-    e_olfag->oflags = BLI_mempool_calloc(toolflagpool);
+    e_olfag->oflags = (BMFlagLayer *)BLI_mempool_calloc(toolflagpool);
   }
 
   BMFace_OFlag *f_olfag;
   toolflagpool = bm->ftoolflagpool;
   BM_ITER_MESH (f_olfag, &iter, bm, BM_FACES_OF_MESH) {
-    f_olfag->oflags = BLI_mempool_calloc(toolflagpool);
+    f_olfag->oflags = (BMFlagLayer *)BLI_mempool_calloc(toolflagpool);
   }
 
   bm->totflags = 1;
@@ -110,22 +110,22 @@ void BM_mesh_elem_toolflags_clear(BMesh *bm)
 {
   if (bm->vtoolflagpool) {
     BLI_mempool_destroy(bm->vtoolflagpool);
-    bm->vtoolflagpool = NULL;
+    bm->vtoolflagpool = nullptr;
   }
   if (bm->etoolflagpool) {
     BLI_mempool_destroy(bm->etoolflagpool);
-    bm->etoolflagpool = NULL;
+    bm->etoolflagpool = nullptr;
   }
   if (bm->ftoolflagpool) {
     BLI_mempool_destroy(bm->ftoolflagpool);
-    bm->ftoolflagpool = NULL;
+    bm->ftoolflagpool = nullptr;
   }
 }
 
 BMesh *BM_mesh_create(const BMAllocTemplate *allocsize, const struct BMeshCreateParams *params)
 {
   /* allocate the structure */
-  BMesh *bm = MEM_callocN(sizeof(BMesh), __func__);
+  BMesh *bm = (BMesh *)MEM_callocN(sizeof(BMesh), __func__);
 
   /* allocate the memory pools for the mesh elements */
   bm_mempool_init(bm, allocsize, params->use_toolflags);
@@ -262,8 +262,8 @@ void BM_mesh_free(BMesh *bm)
   if (bm->py_handle) {
     /* keep this out of 'BM_mesh_data_free' because we want python
      * to be able to clear the mesh and maintain access. */
-    bpy_bm_generic_invalidate(bm->py_handle);
-    bm->py_handle = NULL;
+    bpy_bm_generic_invalidate((BPy_BMGeneric *)bm->py_handle);
+    bm->py_handle = nullptr;
   }
 
   MEM_freeN(bm);
@@ -336,7 +336,7 @@ void BM_mesh_elem_index_ensure_ex(BMesh *bm, const char htype, int elem_offset[4
   BM_ELEM_INDEX_VALIDATE(bm, "Should Never Fail!", __func__);
 #endif
 
-  if (elem_offset == NULL) {
+  if (elem_offset == nullptr) {
     /* Simple case. */
     const char htype_needed = bm->elem_index_dirty & htype;
     if (htype_needed == 0) {
@@ -445,7 +445,7 @@ finally:
 
 void BM_mesh_elem_index_ensure(BMesh *bm, const char htype)
 {
-  BM_mesh_elem_index_ensure_ex(bm, htype, NULL);
+  BM_mesh_elem_index_ensure_ex(bm, htype, nullptr);
 }
 
 void BM_mesh_elem_index_validate(
@@ -459,7 +459,7 @@ void BM_mesh_elem_index_validate(
   BMIter iter;
   BMElem *ele;
   int i;
-  bool is_any_error = 0;
+  bool is_any_error = false;
 
   for (i = 0; i < 3; i++) {
     const bool is_dirty = (flag_types[i] & bm->elem_index_dirty) != 0;
@@ -581,9 +581,10 @@ void BM_mesh_elem_table_ensure(BMesh *bm, const char htype)
       if (bm->vtable) {
         MEM_freeN(bm->vtable);
       }
-      bm->vtable = MEM_mallocN(sizeof(void **) * bm->totvert, "bm->vtable");
+      bm->vtable = (BMVert **)MEM_mallocN(sizeof(void **) * bm->totvert, "bm->vtable");
       bm->vtable_tot = bm->totvert;
     }
+    BM_iter_as_array(bm, BM_VERTS_OF_MESH, nullptr, (void **)bm->vtable, bm->totvert);
   }
   if (htype_needed & BM_EDGE) {
     if (bm->etable && bm->totedge <= bm->etable_tot && bm->totedge * 2 >= bm->etable_tot) {
@@ -593,9 +594,10 @@ void BM_mesh_elem_table_ensure(BMesh *bm, const char htype)
       if (bm->etable) {
         MEM_freeN(bm->etable);
       }
-      bm->etable = MEM_mallocN(sizeof(void **) * bm->totedge, "bm->etable");
+      bm->etable = (BMEdge **)MEM_mallocN(sizeof(void **) * bm->totedge, "bm->etable");
       bm->etable_tot = bm->totedge;
     }
+    BM_iter_as_array(bm, BM_EDGES_OF_MESH, nullptr, (void **)bm->etable, bm->totedge);
   }
   if (htype_needed & BM_FACE) {
     if (bm->ftable && bm->totface <= bm->ftable_tot && bm->totface * 2 >= bm->ftable_tot) {
@@ -605,21 +607,10 @@ void BM_mesh_elem_table_ensure(BMesh *bm, const char htype)
       if (bm->ftable) {
         MEM_freeN(bm->ftable);
       }
-      bm->ftable = MEM_mallocN(sizeof(void **) * bm->totface, "bm->ftable");
+      bm->ftable = (BMFace **)MEM_mallocN(sizeof(void **) * bm->totface, "bm->ftable");
       bm->ftable_tot = bm->totface;
     }
-  }
-
-  if (htype_needed & BM_VERT) {
-    BM_iter_as_array(bm, BM_VERTS_OF_MESH, NULL, (void **)bm->vtable, bm->totvert);
-  }
-
-  if (htype_needed & BM_EDGE) {
-    BM_iter_as_array(bm, BM_EDGES_OF_MESH, NULL, (void **)bm->etable, bm->totedge);
-  }
-
-  if (htype_needed & BM_FACE) {
-    BM_iter_as_array(bm, BM_FACES_OF_MESH, NULL, (void **)bm->ftable, bm->totface);
+    BM_iter_as_array(bm, BM_FACES_OF_MESH, nullptr, (void **)bm->ftable, bm->totface);
   }
 
 finally:
@@ -656,17 +647,17 @@ void BM_mesh_elem_table_free(BMesh *bm, const char htype)
 
 BMVert *BM_vert_at_index_find(BMesh *bm, const int index)
 {
-  return BLI_mempool_findelem(bm->vpool, index);
+  return (BMVert *)BLI_mempool_findelem(bm->vpool, index);
 }
 
 BMEdge *BM_edge_at_index_find(BMesh *bm, const int index)
 {
-  return BLI_mempool_findelem(bm->epool, index);
+  return (BMEdge *)BLI_mempool_findelem(bm->epool, index);
 }
 
 BMFace *BM_face_at_index_find(BMesh *bm, const int index)
 {
-  return BLI_mempool_findelem(bm->fpool, index);
+  return (BMFace *)BLI_mempool_findelem(bm->fpool, index);
 }
 
 BMLoop *BM_loop_at_index_find(BMesh *bm, const int index)
@@ -687,13 +678,13 @@ BMLoop *BM_loop_at_index_find(BMesh *bm, const int index)
     }
     i -= f->len;
   }
-  return NULL;
+  return nullptr;
 }
 
 BMVert *BM_vert_at_index_find_or_table(BMesh *bm, const int index)
 {
   if ((bm->elem_table_dirty & BM_VERT) == 0) {
-    return (index < bm->totvert) ? bm->vtable[index] : NULL;
+    return (index < bm->totvert) ? bm->vtable[index] : nullptr;
   }
   return BM_vert_at_index_find(bm, index);
 }
@@ -701,7 +692,7 @@ BMVert *BM_vert_at_index_find_or_table(BMesh *bm, const int index)
 BMEdge *BM_edge_at_index_find_or_table(BMesh *bm, const int index)
 {
   if ((bm->elem_table_dirty & BM_EDGE) == 0) {
-    return (index < bm->totedge) ? bm->etable[index] : NULL;
+    return (index < bm->totedge) ? bm->etable[index] : nullptr;
   }
   return BM_edge_at_index_find(bm, index);
 }
@@ -709,7 +700,7 @@ BMEdge *BM_edge_at_index_find_or_table(BMesh *bm, const int index)
 BMFace *BM_face_at_index_find_or_table(BMesh *bm, const int index)
 {
   if ((bm->elem_table_dirty & BM_FACE) == 0) {
-    return (index < bm->totface) ? bm->ftable[index] : NULL;
+    return (index < bm->totface) ? bm->ftable[index] : nullptr;
   }
   return BM_face_at_index_find(bm, index);
 }
@@ -735,7 +726,7 @@ int BM_mesh_elem_count(BMesh *bm, const char htype)
 void BM_mesh_remap(BMesh *bm, const uint *vert_idx, const uint *edge_idx, const uint *face_idx)
 {
   /* Mapping old to new pointers. */
-  GHash *vptr_map = NULL, *eptr_map = NULL, *fptr_map = NULL;
+  GHash *vptr_map = nullptr, *eptr_map = nullptr, *fptr_map = nullptr;
   BMIter iter, iterl;
   BMVert *ve;
   BMEdge *ed;
@@ -763,14 +754,16 @@ void BM_mesh_remap(BMesh *bm, const uint *vert_idx, const uint *edge_idx, const
 
     /* Make a copy of all vertices. */
     verts_pool = bm->vtable;
-    verts_copy = MEM_mallocN(sizeof(BMVert) * totvert, "BM_mesh_remap verts copy");
-    void **pyptrs = (cd_vert_pyptr != -1) ? MEM_mallocN(sizeof(void *) * totvert, __func__) : NULL;
+    verts_copy = (BMVert *)MEM_mallocN(sizeof(BMVert) * totvert, "BM_mesh_remap verts copy");
+    void **pyptrs = (cd_vert_pyptr != -1) ?
+                        (void **)MEM_mallocN(sizeof(void *) * totvert, __func__) :
+                        nullptr;
     for (i = totvert, ve = verts_copy + totvert - 1, vep = verts_pool + totvert - 1; i--;
          ve--, vep--) {
       *ve = **vep;
       // printf("*vep: %p, verts_pool[%d]: %p\n", *vep, i, verts_pool[i]);
       if (cd_vert_pyptr != -1) {
-        void **pyptr = BM_ELEM_CD_GET_VOID_P(((BMElem *)ve), cd_vert_pyptr);
+        void **pyptr = (void **)BM_ELEM_CD_GET_VOID_P(((BMElem *)ve), cd_vert_pyptr);
         pyptrs[i] = *pyptr;
       }
     }
@@ -788,7 +781,7 @@ void BM_mesh_remap(BMesh *bm, const uint *vert_idx, const uint *edge_idx, const
 #endif
       BLI_ghash_insert(vptr_map, *vep, new_vep);
       if (cd_vert_pyptr != -1) {
-        void **pyptr = BM_ELEM_CD_GET_VOID_P(((BMElem *)new_vep), cd_vert_pyptr);
+        void **pyptr = (void **)BM_ELEM_CD_GET_VOID_P(((BMElem *)new_vep), cd_vert_pyptr);
         *pyptr = pyptrs[*new_idx];
       }
     }
@@ -815,13 +808,15 @@ void BM_mesh_remap(BMesh *bm, const uint *vert_idx, const uint *edge_idx, const
 
     /* Make a copy of all vertices. */
     edges_pool = bm->etable;
-    edges_copy = MEM_mallocN(sizeof(BMEdge) * totedge, "BM_mesh_remap edges copy");
-    void **pyptrs = (cd_edge_pyptr != -1) ? MEM_mallocN(sizeof(void *) * totedge, __func__) : NULL;
+    edges_copy = (BMEdge *)MEM_mallocN(sizeof(BMEdge) * totedge, "BM_mesh_remap edges copy");
+    void **pyptrs = (cd_edge_pyptr != -1) ?
+                        (void **)MEM_mallocN(sizeof(void *) * totedge, __func__) :
+                        nullptr;
     for (i = totedge, ed = edges_copy + totedge - 1, edp = edges_pool + 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list