]> jfr.im git - irc/gameservirc.git/commitdiff
Updated TODO and fixed the hashing algorithm for P10 numerics + others' nickname...
authorkainazzzo <redacted>
Tue, 6 Apr 2004 17:11:52 +0000 (17:11 +0000)
committerkainazzzo <redacted>
Tue, 6 Apr 2004 17:11:52 +0000 (17:11 +0000)
git-svn-id: https://svn.code.sf.net/p/gameservirc/code/trunk@158 bc333340-6410-0410-a689-9d09f3c113fa

gameserv/TODO
gameserv/gameserv.cpp
gameserv/list.h
gameserv/tcpclient.cpp

index 5af2501341e7acd778bc01911c002050874fc1fd..ddfd06d20e63ee2dfa82fc321f589e92db9ae0c4 100644 (file)
@@ -89,3 +89,5 @@ X Deal with cheaters who create additional characters, fight with them a
 
 X Hash tables for speedy search/insert into player lists.
 
+X Fix the hashing algorithm for nickname changes!
+
index c5e9cdfbd806cbdd86041a47e560cd9704796d8b..e97642002e2d12065cec71e44e1f7ab5fa9b3062 100644 (file)
@@ -2919,7 +2919,11 @@ unsigned long HASH(const unsigned char *name, int size_of_table)
 
   while (*name)
   {
-    h = (h << 4) + tolower(*name++);
+    #ifdef P10
+       h = (h << 4) + (*name++); // Case sensitive for numerics
+    #else
+       h = (h << 4) + tolower(*name++);
+    #endif
     if ((g = (h & 0xF0000000)))
       h ^= g >> 24;
     h &= ~g;
index e51d6f5a2a1dfd3d9a0561092916cd30879555e2..d19e5564614454726289ca9b41a7bd936816c83b 100644 (file)
@@ -21,7 +21,8 @@ class List {
        void insertAtBack( T *&);
        bool removeFromFront( T & );
        bool removeFromBack( T & );
-       bool remove( T * );
+       bool del( T *);
+       ListNode < T > *remove( T * );
        bool isEmpty() const;
        void print() const;
        ListNode < T > *Find( T * );
@@ -195,7 +196,19 @@ void List<T>::print() const
 #endif
 
 template <class T>
-bool List<T>::remove(T *remPtr)
+bool List<T>::del(T *remPtr)
+{
+    ListNode<T> *removed = remove( remPtr );
+    if (removed != NULL)
+    {
+       delete removed;
+       return true;
+    }
+    return false;
+}
+
+template <class T>
+ListNode<T> *List<T>::remove(T *remPtr)
 {
     ListNode<T> *newPtr = firstPtr;
     T *testPtr;
@@ -214,8 +227,7 @@ bool List<T>::remove(T *remPtr)
                    log("One Element. Deleting it");
                #endif
                firstPtr = lastPtr = NULL;
-               delete newPtr;
-               return true;
+               return newPtr;
            }
            else if (newPtr != lastPtr && newPtr != firstPtr)
            {
@@ -224,8 +236,7 @@ bool List<T>::remove(T *remPtr)
                #endif
                newPtr->prev->next = newPtr->next;
                newPtr->next->prev = newPtr->prev;
-               delete newPtr;
-               return true;
+               return newPtr;
            }
            else if (newPtr == lastPtr)
            {
@@ -234,8 +245,7 @@ bool List<T>::remove(T *remPtr)
                #endif
                lastPtr = newPtr->prev;
                lastPtr->next = 0;
-               delete newPtr;
-               return true;
+               return newPtr;
            }
            else if (newPtr == firstPtr)
            {
@@ -244,12 +254,11 @@ bool List<T>::remove(T *remPtr)
                #endif
                firstPtr = newPtr->next;
                firstPtr->prev = 0;
-               delete newPtr;
-               return true;
+               return newPtr;
            }
        }
        newPtr = newPtr->next;
     }
-    return false;
+    return NULL;
 }
 #endif
index a0440aec8adce79e5d52b1c5eb2fc64ac6533b79..3e355d61757fc68384e983cd7d767c85f7684e81 100644 (file)
@@ -238,8 +238,14 @@ int main(int argc, char *argv[])
                if ((tempPtr = find((source + 1))))
                {
                    char *nick;
+                   unsigned long oldhv, newhv;
                    nick = strtok(NULL, " ");
+                   oldhv = HASH((unsigned char *) tempPtr->getNick(),
+                               U_TABLE_SIZE);
+                   newhv = HASH((unsigned char *) nick, U_TABLE_SIZE);
                    tempPtr->setNick(nick);
+                   clients[oldhv].remove(tempPtr);
+                   clients[newhv].insertAtBack(tempPtr);
                }
            }
            else