[Scummvm-cvs-logs] SF.net SVN: scummvm:[44256] scummvm/trunk/common/hashmap.h

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Tue Sep 22 13:59:08 CEST 2009


Revision: 44256
          http://scummvm.svn.sourceforge.net/scummvm/?rev=44256&view=rev
Author:   lordhoto
Date:     2009-09-22 11:58:59 +0000 (Tue, 22 Sep 2009)

Log Message:
-----------
Fix regression in 44236, which caused iterators to see dummy node entries as valid entries.

Modified Paths:
--------------
    scummvm/trunk/common/hashmap.h

Modified: scummvm/trunk/common/hashmap.h
===================================================================
--- scummvm/trunk/common/hashmap.h	2009-09-22 11:18:05 UTC (rev 44255)
+++ scummvm/trunk/common/hashmap.h	2009-09-22 11:58:59 UTC (rev 44256)
@@ -160,6 +160,7 @@
 			assert(_idx <= _hashmap->_mask);
 			Node *node = _hashmap->_storage[_idx];
 			assert(node != 0);
+			assert(node != HASHMAP_DUMMY_NODE);
 			return node;
 		}
 
@@ -178,7 +179,7 @@
 			assert(_hashmap);
 			do {
 				_idx++;
-			} while (_idx <= _hashmap->_mask && _hashmap->_storage[_idx] == 0);
+			} while (_idx <= _hashmap->_mask && (_hashmap->_storage[_idx] == 0 || _hashmap->_storage[_idx] == HASHMAP_DUMMY_NODE));
 			if (_idx > _hashmap->_mask)
 				_idx = (uint)-1;
 
@@ -231,7 +232,7 @@
 	iterator	begin() {
 		// Find and return the first non-empty entry
 		for (uint ctr = 0; ctr <= _mask; ++ctr) {
-			if (_storage[ctr])
+			if (_storage[ctr] && _storage[ctr] != HASHMAP_DUMMY_NODE)
 				return iterator(ctr, this);
 		}
 		return end();
@@ -243,7 +244,7 @@
 	const_iterator	begin() const {
 		// Find and return the first non-empty entry
 		for (uint ctr = 0; ctr <= _mask; ++ctr) {
-			if (_storage[ctr])
+			if (_storage[ctr] && _storage[ctr] != HASHMAP_DUMMY_NODE)
 				return const_iterator(ctr, this);
 		}
 		return end();
@@ -254,14 +255,14 @@
 
 	iterator	find(const Key &key) {
 		uint ctr = lookup(key);
-		if (_storage[ctr])
+		if (_storage[ctr] && _storage[ctr] != HASHMAP_DUMMY_NODE)
 			return iterator(ctr, this);
 		return end();
 	}
 
 	const_iterator	find(const Key &key) const {
 		uint ctr = lookup(key);
-		if (_storage[ctr])
+		if (_storage[ctr] && _storage[ctr] != HASHMAP_DUMMY_NODE)
 			return const_iterator(ctr, this);
 		return end();
 	}


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list