(svn r20885) -Codechange: Make delete_Hash a method.

This commit is contained in:
alberth 2010-10-02 19:44:54 +00:00
parent 0612dc2e86
commit 67f4b8ab83
3 changed files with 15 additions and 16 deletions

View File

@ -199,8 +199,8 @@ void AyStar::Free()
this->OpenListQueue.Free(false); this->OpenListQueue.Free(false);
/* 2nd argument above is false, below is true, to free the values only /* 2nd argument above is false, below is true, to free the values only
* once */ * once */
delete_Hash(&this->OpenListHash, true); this->OpenListHash.Delete(true);
delete_Hash(&this->ClosedListHash, true); this->ClosedListHash.Delete(true);
#ifdef AYSTAR_DEBUG #ifdef AYSTAR_DEBUG
printf("[AyStar] Memory free'd\n"); printf("[AyStar] Memory free'd\n");
#endif #endif

View File

@ -263,19 +263,23 @@ void init_Hash(Hash *h, Hash_HashProc *hash, uint num_buckets)
for (i = 0; i < num_buckets; i++) h->buckets_in_use[i] = false; for (i = 0; i < num_buckets; i++) h->buckets_in_use[i] = false;
} }
/**
void delete_Hash(Hash *h, bool free_values) * Deletes the hash and cleans up. Only cleans up memory allocated by new_Hash
* & friends. If free is true, it will call free() on all the values that
* are left in the hash.
*/
void Hash::Delete(bool free_values)
{ {
uint i; uint i;
/* Iterate all buckets */ /* Iterate all buckets */
for (i = 0; i < h->num_buckets; i++) { for (i = 0; i < this->num_buckets; i++) {
if (h->buckets_in_use[i]) { if (this->buckets_in_use[i]) {
HashNode *node; HashNode *node;
/* Free the first value */ /* Free the first value */
if (free_values) free(h->buckets[i].value); if (free_values) free(this->buckets[i].value);
node = h->buckets[i].next; node = this->buckets[i].next;
while (node != NULL) { while (node != NULL) {
HashNode *prev = node; HashNode *prev = node;
@ -287,11 +291,11 @@ void delete_Hash(Hash *h, bool free_values)
} }
} }
} }
free(h->buckets); free(this->buckets);
/* No need to free buckets_in_use, it is always allocated in one /* No need to free buckets_in_use, it is always allocated in one
* malloc with buckets */ * malloc with buckets */
#ifdef HASH_DEBUG #ifdef HASH_DEBUG
debug("Freeing Hash: %p", h); debug("Freeing Hash: %p", this);
#endif #endif
} }

View File

@ -92,6 +92,7 @@ struct Hash {
void *DeleteValue(uint key1, uint key2); void *DeleteValue(uint key1, uint key2);
void Clear(bool free_values); void Clear(bool free_values);
void Delete(bool free_values);
/** /**
* Gets the current size of the hash. * Gets the current size of the hash.
@ -112,11 +113,5 @@ struct Hash {
* returns a hash less than num_buckets! Call delete_hash after use * returns a hash less than num_buckets! Call delete_hash after use
*/ */
void init_Hash(Hash *h, Hash_HashProc *hash, uint num_buckets); void init_Hash(Hash *h, Hash_HashProc *hash, uint num_buckets);
/**
* Deletes the hash and cleans up. Only cleans up memory allocated by new_Hash
* & friends. If free is true, it will call free() on all the values that
* are left in the hash.
*/
void delete_Hash(Hash *h, bool free_values);
#endif /* QUEUE_H */ #endif /* QUEUE_H */