1
0
Fork 0

(svn r20884) -Codechange: Make clear_Hash a method.

release/1.1
alberth 2010-10-02 19:43:29 +00:00
parent f185a35269
commit d86f781ca5
3 changed files with 15 additions and 14 deletions

View File

@ -216,8 +216,8 @@ void AyStar::Clear()
* the hash. */ * the hash. */
this->OpenListQueue.Clear(false); this->OpenListQueue.Clear(false);
/* Clean the hashes */ /* Clean the hashes */
clear_Hash(&this->OpenListHash, true); this->OpenListHash.Clear(true);
clear_Hash(&this->ClosedListHash, true); this->ClosedListHash.Clear(true);
#ifdef AYSTAR_DEBUG #ifdef AYSTAR_DEBUG
printf("[AyStar] Cleared AyStar\n"); printf("[AyStar] Cleared AyStar\n");

View File

@ -346,23 +346,26 @@ static void stat_Hash(const Hash *h)
} }
#endif #endif
void clear_Hash(Hash *h, bool free_values) /**
* Cleans the hash, but keeps the memory allocated
*/
void Hash::Clear(bool free_values)
{ {
uint i; uint i;
#ifdef HASH_STATS #ifdef HASH_STATS
if (h->size > 2000) stat_Hash(h); if (this->size > 2000) stat_Hash(this);
#endif #endif
/* 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;
h->buckets_in_use[i] = false; this->buckets_in_use[i] = false;
/* 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;
@ -372,7 +375,7 @@ void clear_Hash(Hash *h, bool free_values)
} }
} }
} }
h->size = 0; this->size = 0;
} }
/** /**

View File

@ -91,6 +91,8 @@ struct Hash {
void *DeleteValue(uint key1, uint key2); void *DeleteValue(uint key1, uint key2);
void Clear(bool free_values);
/** /**
* Gets the current size of the hash. * Gets the current size of the hash.
*/ */
@ -116,9 +118,5 @@ void init_Hash(Hash *h, Hash_HashProc *hash, uint num_buckets);
* are left in the hash. * are left in the hash.
*/ */
void delete_Hash(Hash *h, bool free_values); void delete_Hash(Hash *h, bool free_values);
/**
* Cleans the hash, but keeps the memory allocated
*/
void clear_Hash(Hash *h, bool free_values);
#endif /* QUEUE_H */ #endif /* QUEUE_H */