summaryrefslogtreecommitdiff
path: root/ACE/apps/drwho/Hash_Table.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/drwho/Hash_Table.cpp')
-rw-r--r--ACE/apps/drwho/Hash_Table.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/ACE/apps/drwho/Hash_Table.cpp b/ACE/apps/drwho/Hash_Table.cpp
new file mode 100644
index 00000000000..574cb71718b
--- /dev/null
+++ b/ACE/apps/drwho/Hash_Table.cpp
@@ -0,0 +1,75 @@
+// $Id$
+
+#include "Options.h"
+#include "Hash_Table.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_Memory.h"
+#include "ace/OS_NS_string.h"
+
+Hash_Table::Hash_Table (void)
+ : current_ptr (0),
+ current_index (0),
+ hash_table_size (HASH_TABLE_SIZE)
+{
+ ACE_NEW (this->hash_table,
+ Protocol_Record *[this->hash_table_size]);
+ ACE_OS::memset (this->hash_table,
+ 0,
+ this->hash_table_size * sizeof *this->hash_table);
+}
+
+// Iterate through the hash table returning one node at a time...
+
+Protocol_Record *
+Hash_Table::get_next_entry (void)
+{
+ // Reset the iterator if we are starting from the beginning.
+
+ if (this->current_index == -1)
+ this->current_index = 0;
+
+ if (this->current_ptr == 0)
+ {
+
+ for (;
+ this->current_index < this->hash_table_size;
+ this->current_index++)
+ if (this->hash_table[this->current_index] != 0)
+ {
+ Protocol_Record *prp = this->hash_table[this->current_index++];
+ this->current_ptr = prp->next_;
+ return prp;
+ }
+
+ this->current_index = -1;
+ return 0;
+ }
+ else
+ {
+ Protocol_Record *prp = this->current_ptr;
+ this->current_ptr = this->current_ptr->next_;
+ return prp;
+ }
+}
+
+Protocol_Record *
+Hash_Table::get_each_entry (void)
+{
+ return this->get_next_entry ();
+}
+
+// Frees up all the dynamic memory in the hash table.
+
+Hash_Table::~Hash_Table (void)
+{
+ if (Options::get_opt (Options::DEBUG))
+ ACE_DEBUG ((LM_DEBUG,
+ "disposing Hash_Table\n"));
+
+ for (int i = 0; i < this->hash_table_size; i++)
+ for (Protocol_Record *prp = this->hash_table[i];
+ prp != 0; )
+ {
+ prp = prp->next_;
+ }
+}