Revision: 39968
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39968
Author:   howardt
Date:     2011-09-06 13:48:20 +0000 (Tue, 06 Sep 2011)
Log Message:
-----------
Fix BLI_smallhash for 0 and negative keys.  Fixes some problems with edge 
snapping in knife tool.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenlib/BLI_smallhash.h

Modified: branches/bmesh/blender/source/blender/blenlib/BLI_smallhash.h
===================================================================
--- branches/bmesh/blender/source/blender/blenlib/BLI_smallhash.h       
2011-09-06 13:00:46 UTC (rev 39967)
+++ branches/bmesh/blender/source/blender/blenlib/BLI_smallhash.h       
2011-09-06 13:48:20 UTC (rev 39968)
@@ -100,8 +100,6 @@
 {
        int h, hoff=1;
 
-       /* key = ABS(key); BMESH_TODO: XXXXX this throws error with MSVC 
(warning as error) */
-
        if (hash->size < hash->used*3) {
                int newsize = hashsizes[++hash->curhash];
                entry *tmp;
@@ -126,7 +124,8 @@
                        if (ELEM(tmp[i].val, CELL_UNUSED, CELL_FREE))
                                continue;
                        
-                       h = tmp[i].key; hoff = 1;
+                       h = ABS((int)(tmp[i].key));
+                       hoff = 1;
                        while (!ELEM(hash->table[h % newsize].val, CELL_UNUSED, 
CELL_FREE))
                                h = HASHNEXT(h, hoff);
                        
@@ -141,7 +140,8 @@
                }
        }
        
-       h = key; hoff = 1;
+       h = ABS((int)key);
+       hoff = 1;
        while (!ELEM(hash->table[h % hash->size].val, CELL_UNUSED, CELL_FREE))
                h = HASHNEXT(h, hoff);
        
@@ -156,8 +156,7 @@
 {
        int h, hoff=1;
 
-       /* key = ABS(key); BMESH_TODO: XXXXX this throws error with MSVC 
(warning as error) */
-       h = key;
+       h = ABS((int)key);
        
        while (hash->table[h % hash->size].key != key 
              || hash->table[h % hash->size].val == CELL_UNUSED)
@@ -175,9 +174,9 @@
 BM_INLINE void *BLI_smallhash_lookup(SmallHash *hash, uintptr_t key)
 {
        int h, hoff=1;
+       void *v;
 
-       /* key = ABS(key); BMESH_TODO: XXXXX this throws error with MSVC 
(warning as error) */
-       h = key;
+       h = ABS((int)key);
        
        if (!hash->table)
                return NULL;
@@ -190,15 +189,17 @@
                h = HASHNEXT(h, hoff);
        }
        
-       return hash->table[h % hash->size].val;
+       v = hash->table[h % hash->size].val;
+       if (ELEM(v, CELL_UNUSED, CELL_FREE))
+               return NULL;
+       return v;
 }
 
 
 BM_INLINE int BLI_smallhash_haskey(SmallHash *hash, uintptr_t key)
 {
-       int h = key, hoff=1;
-       h = ABS(h);
-       /* key = ABS(key); BMESH_TODO: XXXXX this throws error with MSVC 
(warning as error) */
+       int h = ABS((int)key);
+       int hoff =1;
        
        if (!hash->table)
                return 0;
@@ -211,7 +212,7 @@
                h = HASHNEXT(h, hoff);
        }
        
-       return 1;
+       return !ELEM(hash->table[h % hash->size].val, CELL_UNUSED, CELL_FREE);
 }
 
 BM_INLINE int BLI_smallhash_count(SmallHash *hash)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to