GSet, GHash: Add BLI_gset_add, since its common to add members to a set
authorCampbell Barton <ideasman42@gmail.com>
Thu, 29 May 2014 04:00:11 +0000 (14:00 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 13 Jun 2014 14:47:12 +0000 (00:47 +1000)
also rename BLI_edgeset_reinsert -> BLI_edgeset_add, in this case its the same.

source/blender/blenkernel/intern/cdderivedmesh.c
source/blender/blenkernel/intern/cloth.c
source/blender/blenkernel/intern/pbvh_bmesh.c
source/blender/blenkernel/intern/subsurf_ccg.c
source/blender/blenlib/BLI_edgehash.h
source/blender/blenlib/BLI_ghash.h
source/blender/blenlib/intern/BLI_ghash.c
source/blender/blenlib/intern/edgehash.c
source/blender/bmesh/intern/bmesh_walkers_impl.c
source/blender/editors/animation/anim_filter.c

index 9df527efa2177749cc49844655eed9450261f793..798633c8c56cf5b42f76931f87a2c39e3af08f6b 100644 (file)
@@ -2805,15 +2805,15 @@ void CDDM_calc_edges_tessface(DerivedMesh *dm)
        eh = BLI_edgeset_new_ex(__func__, BLI_EDGEHASH_SIZE_GUESS_FROM_POLYS(numFaces));
 
        for (i = 0; i < numFaces; i++, mf++) {
-               BLI_edgeset_reinsert(eh, mf->v1, mf->v2);
-               BLI_edgeset_reinsert(eh, mf->v2, mf->v3);
+               BLI_edgeset_add(eh, mf->v1, mf->v2);
+               BLI_edgeset_add(eh, mf->v2, mf->v3);
                
                if (mf->v4) {
-                       BLI_edgeset_reinsert(eh, mf->v3, mf->v4);
-                       BLI_edgeset_reinsert(eh, mf->v4, mf->v1);
+                       BLI_edgeset_add(eh, mf->v3, mf->v4);
+                       BLI_edgeset_add(eh, mf->v4, mf->v1);
                }
                else {
-                       BLI_edgeset_reinsert(eh, mf->v3, mf->v1);
+                       BLI_edgeset_add(eh, mf->v3, mf->v1);
                }
        }
 
index f5c7f9e45011ee6aa213dda54968a487fa0c3948..885f186faf365137269eec0ceed7a5f7a07a6ea6 100644 (file)
@@ -1323,14 +1323,14 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm )
 
        /* insert other near springs in edgeset AFTER bending springs are calculated (for selfcolls) */
        for (i = 0; i < numedges; i++) { /* struct springs */
-               BLI_edgeset_reinsert(edgeset, medge[i].v1, medge[i].v2);
+               BLI_edgeset_add(edgeset, medge[i].v1, medge[i].v2);
        }
 
        for (i = 0; i < numfaces; i++) { /* edge springs */
                if (mface[i].v4) {
-                       BLI_edgeset_reinsert(edgeset, mface[i].v1, mface[i].v3);
+                       BLI_edgeset_add(edgeset, mface[i].v1, mface[i].v3);
                        
-                       BLI_edgeset_reinsert(edgeset, mface[i].v2, mface[i].v4);
+                       BLI_edgeset_add(edgeset, mface[i].v2, mface[i].v4);
                }
        }
        
index 83e0d1a4740e469504e2692c3fdf220963b29535..1218e3a063c347191c6c6721fa130516d1bdd9df 100644 (file)
@@ -71,7 +71,7 @@ static void pbvh_bmesh_node_finalize(PBVH *bvh, int node_index, const int cd_ver
                        v = l_iter->v;
                        if (!BLI_gset_haskey(n->bm_unique_verts, v)) {
                                if (BM_ELEM_CD_GET_INT(v, cd_vert_node_offset) != DYNTOPO_NODE_NONE) {
-                                       BLI_gset_reinsert(n->bm_other_verts, v, NULL);
+                                       BLI_gset_add(n->bm_other_verts, v);
                                }
                                else {
                                        BLI_gset_insert(n->bm_unique_verts, v);
index 7d9ba1661d5f70d2847a35b28bea73a56d607d78..bc3ec2f96812bd2c0999582f3b89681c76ca68f5 100644 (file)
@@ -360,7 +360,7 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, DerivedMesh *dm,
                        MVert *mv0 = mvert + (ml[j_next].v);
                        MVert *mv1 = mvert + (ml[j].v);
 
-                       if (BLI_edgeset_reinsert(eset, v0, v1)) {
+                       if (BLI_edgeset_add(eset, v0, v1)) {
                                CCGEdge *e, *orige = ccgSubSurf_getFaceEdge(origf, j_next);
                                CCGEdgeHDL ehdl = SET_INT_IN_POINTER(mp->loopstart + j_next);
                                float crease;
index 8e74ce3a9e3e944433a67510a0f5963016b03b68..c0529d9032dc2f9e9127cd30bcfb5557af5e7b86 100644 (file)
@@ -102,7 +102,7 @@ EdgeSet *BLI_edgeset_new_ex(const char *info,
                             const unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
 EdgeSet *BLI_edgeset_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
 int      BLI_edgeset_size(EdgeSet *es) ATTR_WARN_UNUSED_RESULT;
-bool     BLI_edgeset_reinsert(EdgeSet *es, unsigned int v0, unsigned int v1);
+bool     BLI_edgeset_add(EdgeSet *es, unsigned int v0, unsigned int v1);
 void     BLI_edgeset_insert(EdgeSet *es, unsigned int v0, unsigned int v1);
 bool     BLI_edgeset_haskey(EdgeSet *eh, unsigned int v0, unsigned int v1) ATTR_WARN_UNUSED_RESULT;
 void     BLI_edgeset_free(EdgeSet *es);
index 2aa79d6da8d594da57487735b202615e3b8cc8db..947386dc93402e982cc4a1feed18c06f2755b807 100644 (file)
@@ -191,6 +191,7 @@ GSet  *BLI_gset_new(GSetHashFP hashfp, GSetCmpFP cmpfp, const char *info) ATTR_M
 int    BLI_gset_size(GSet *gs) ATTR_WARN_UNUSED_RESULT;
 void   BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp);
 void   BLI_gset_insert(GSet *gh, void *key);
+bool   BLI_gset_add(GSet *gs, void *key);
 bool   BLI_gset_reinsert(GSet *gh, void *key, GSetKeyFreeFP keyfreefp);
 bool   BLI_gset_haskey(GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT;
 bool   BLI_gset_remove(GSet *gs, void *key, GSetKeyFreeFP keyfreefp);
index e55f20e99ebfb57846163c3d77ee58acc440978c..b30553d0b5e81cfcc84683a0d3399b6b0f471dee 100644 (file)
@@ -900,6 +900,25 @@ void BLI_gset_insert(GSet *gs, void *key)
        ghash_insert_ex_keyonly((GHash *)gs, key, hash);
 }
 
+/**
+ * A version of BLI_gset_insert which checks first if the key is in the set.
+ * \returns true if a new key has been added.
+ *
+ * \note GHash has no equivalent to this because typically the value would be different.
+ */
+bool BLI_gset_add(GSet *gs, void *key)
+{
+       const unsigned int hash = ghash_keyhash((GHash *)gs, key);
+       Entry *e = ghash_lookup_entry_ex((GHash *)gs, key, hash);
+       if (e) {
+               return false;
+       }
+       else {
+               ghash_insert_ex_keyonly((GHash *)gs, key, hash);
+               return true;
+       }
+}
+
 /**
  * Adds the key to the set (duplicates are managed).
  * Matching #BLI_ghash_reinsert
index 51a22cc46ab9acfed0b8d2b54908ea47430e2e52..173d2a5a5908b2b98acc85b3c9d52cc8880a0d57 100644 (file)
@@ -588,9 +588,12 @@ void BLI_edgeset_insert(EdgeSet *es, unsigned int v0, unsigned int v1)
 }
 
 /**
- * Assign a new value to a key that may already be in edgehash.
+ * A version of BLI_edgeset_insert which checks first if the key is in the set.
+ * \returns true if a new key has been added.
+ *
+ * \note EdgeHash has no equivalent to this because typically the value would be different.
  */
-bool BLI_edgeset_reinsert(EdgeSet *es, unsigned int v0, unsigned int v1)
+bool BLI_edgeset_add(EdgeSet *es, unsigned int v0, unsigned int v1)
 {
        unsigned int hash;
        EdgeEntry *e;
index 8ca254a94f13f2284db217f90facd9914957d7f5..c76c203c2fba9e6055ecf0198d004084bdd9af3c 100644 (file)
@@ -919,8 +919,8 @@ static void *bmw_FaceLoopWalker_step(BMWalker *walker)
                }
 
                /* both may already exist */
-               BLI_gset_reinsert(walker->visit_set_alt, l->e, NULL);
-               BLI_gset_reinsert(walker->visit_set, l->f, NULL);
+               BLI_gset_add(walker->visit_set_alt, l->e);
+               BLI_gset_add(walker->visit_set, l->f);
        }
 
        return f;
index 9fec1d28a29eba0a37902b6ac7a0b3f8a4cec822..dad25eb04af22787feaabcb7708e0b6381425db8 100644 (file)
@@ -2595,7 +2595,7 @@ static size_t animdata_filter_remove_duplis(ListBase *anim_data)
                 *      - just use ale->data for now, though it would be nicer to involve 
                 *        ale->type in combination too to capture corner cases (where same data performs differently)
                 */
-               if (BLI_gset_reinsert(gs, ale->data, NULL)) {
+               if (BLI_gset_add(gs, ale->data)) {
                        /* this entry is 'unique' and can be kept */
                        items++;
                }