summaryrefslogtreecommitdiff
path: root/ACE/apps/drwho/HT_Client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/drwho/HT_Client.cpp')
-rw-r--r--ACE/apps/drwho/HT_Client.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/ACE/apps/drwho/HT_Client.cpp b/ACE/apps/drwho/HT_Client.cpp
new file mode 100644
index 00000000000..0d3641382cd
--- /dev/null
+++ b/ACE/apps/drwho/HT_Client.cpp
@@ -0,0 +1,36 @@
+// $Id$
+
+#include "HT_Client.h"
+#include "ace/ACE.h"
+#include "ace/OS_NS_string.h"
+#include "ace/OS_Memory.h"
+
+// Insert a KEY_NAME into the hash table, if it doesn't already exist
+// there. What gets returned is a pointer to the node inserted. Note
+// that we do our own memory allocation here...
+
+Protocol_Record *
+HT_Client::insert (const char *key_name, int max_len)
+{
+ Protocol_Record **prpp = 0;
+
+ // This is tricky...
+
+ for (prpp = &this->hash_table[ACE::hash_pjw (key_name) % this->hash_table_size];
+ *prpp != 0
+ && ACE_OS::strncmp ((*prpp)->get_login (),
+ key_name, max_len) != 0;
+ prpp = &(*prpp)->next_)
+ continue;
+
+ if (*prpp == 0)
+ {
+ ACE_NEW_RETURN (*prpp,
+ Protocol_Record (ACE::strnew (key_name),
+ *prpp),
+ 0);
+ this->count_++;
+ }
+
+ return *prpp;
+}