Changeset - r16173:73db41aab83f
[Not reviewed]
master
0 3 0
alberth - 14 years ago 2010-10-02 19:42:42
alberth@openttd.org
(svn r20883) -Codechange: Make Hash_Delete a method.
3 files changed with 13 insertions and 12 deletions:
0 comments (0 inline, 0 general)
src/pathfinder/npf/aystar.cpp
Show inline comments
 
@@ -61,7 +61,7 @@ OpenListNode *AyStar::OpenListPop()
 
	/* Return the item the Queue returns.. the best next OpenList item. */
 
	OpenListNode *res = (OpenListNode*)this->OpenListQueue.Pop();
 
	if (res != NULL) {
 
		Hash_Delete(&this->OpenListHash, res->path.node.tile, res->path.node.direction);
 
		this->OpenListHash.DeleteValue(res->path.node.tile, res->path.node.direction);
 
	}
 

	
 
	return res;
src/pathfinder/npf/queue.cpp
Show inline comments
 
@@ -427,11 +427,16 @@ static HashNode *Hash_FindNode(const Has
 
	return result;
 
}
 

	
 
void *Hash_Delete(Hash *h, uint key1, uint key2)
 
/**
 
 * Deletes the value with the specified key pair from the hash and returns
 
 * that value. Returns NULL when the value was not present. The value returned
 
 * is _not_ free()'d!
 
 */
 
void *Hash::DeleteValue(uint key1, uint key2)
 
{
 
	void *result;
 
	HashNode *prev; // Used as output var for below function call
 
	HashNode *node = Hash_FindNode(h, key1, key2, &prev);
 
	HashNode *node = Hash_FindNode(this, key1, key2, &prev);
 

	
 
	if (node == NULL) {
 
		/* not found */
 
@@ -452,8 +457,8 @@ void *Hash_Delete(Hash *h, uint key1, ui
 
		} else {
 
			/* This was the last in this bucket
 
			 * Mark it as empty */
 
			uint hash = h->hash(key1, key2);
 
			h->buckets_in_use[hash] = false;
 
			uint hash = this->hash(key1, key2);
 
			this->buckets_in_use[hash] = false;
 
		}
 
	} else {
 
		/* It is in another node
 
@@ -466,7 +471,7 @@ void *Hash_Delete(Hash *h, uint key1, ui
 
		free(node);
 
#endif
 
	}
 
	if (result != NULL) h->size--;
 
	if (result != NULL) this->size--;
 
	return result;
 
}
 

	
src/pathfinder/npf/queue.h
Show inline comments
 
@@ -89,6 +89,8 @@ struct Hash {
 
	void *Get(uint key1, uint key2) const;
 
	void *Set(uint key1, uint key2, void *value);
 

	
 
	void *DeleteValue(uint key1, uint key2);
 

	
 
	/**
 
	 * Gets the current size of the hash.
 
	 */
 
@@ -100,12 +102,6 @@ struct Hash {
 

	
 
/* Call these function to manipulate a hash */
 

	
 
/**
 
 * Deletes the value with the specified key pair from the hash and returns
 
 * that value. Returns NULL when the value was not present. The value returned
 
 * is _not_ free()'d!
 
 */
 
void *Hash_Delete(Hash *h, uint key1, uint key2);
 

	
 
/* Call these function to create/destroy a hash */
 

	
0 comments (0 inline, 0 general)