]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - test-suite/hash.c
SourceFormat Enforcement
[thirdparty/squid.git] / test-suite / hash.c
index f69dc0b1c33c74c2a50f08e56f235422a15f7f8b..6bedfcceef7c31529a20b02c283680b67d4a2efa 100644 (file)
@@ -1,47 +1,30 @@
-
 /*
- * $Id$
- *
- * DEBUG: section 0     Hash Tables
- * AUTHOR: Harvest Derived
- *
- * SQUID Web Proxy Cache          http://www.squid-cache.org/
- * ----------------------------------------------------------
- *
- *  Squid is the result of efforts by numerous individuals from
- *  the Internet community; see the CONTRIBUTORS file for full
- *  details.   Many organizations have provided support for Squid's
- *  development; see the SPONSORS file for full details.  Squid is
- *  Copyrighted (C) 2001 by the Regents of the University of
- *  California; see the COPYRIGHT file for full details.  Squid
- *  incorporates software developed and/or copyrighted by other
- *  sources; see the CREDITS file for full details.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
  *
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
  */
 
+/* DEBUG: section 00    Hash Tables */
+
+#include "squid.h"
+
+#if HAVE_UNISTD_H
 #include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/types.h>
+#endif
+#if HAVE_CTYPE_H
 #include <ctype.h>
-#include <sys/time.h>
+#endif
+#if HAVE_STRINGS_H
 #include <strings.h>
+#endif
+#if HAVE_ASSERT_H
 #include <assert.h>
+#endif
+
 #include "hash.h"
+
 #undef free
 extern void my_free(char *, int, void *);
 
@@ -93,8 +76,8 @@ hash_string(const void *data, unsigned int size)
  * This came from ejb's hsearch.
  */
 
-#define PRIME1         37
-#define PRIME2         1048583
+#define PRIME1      37
+#define PRIME2      1048583
 
 /* Hash function from Chris Torek. */
 unsigned int
@@ -116,25 +99,25 @@ hash4(const void *data, unsigned int size)
     case 0:
         do {
             HASH4;
-            /* FALLTHROUGH */
+        /* FALLTHROUGH */
         case 7:
             HASH4;
-            /* FALLTHROUGH */
+        /* FALLTHROUGH */
         case 6:
             HASH4;
-            /* FALLTHROUGH */
+        /* FALLTHROUGH */
         case 5:
             HASH4;
-            /* FALLTHROUGH */
+        /* FALLTHROUGH */
         case 4:
             HASH4;
-            /* FALLTHROUGH */
+        /* FALLTHROUGH */
         case 3:
             HASH4;
-            /* FALLTHROUGH */
+        /* FALLTHROUGH */
         case 2:
             HASH4;
-            /* FALLTHROUGH */
+        /* FALLTHROUGH */
         case 1:
             HASH4;
         } while (--loop);
@@ -257,7 +240,7 @@ hash_next(hash_table * hid)
     if (hid->current_ptr != NULL) {
         hid->current_ptr = hid->current_ptr->next;
         if (hid->current_ptr != NULL)
-            return (hid->current_ptr); /* next item */
+            return (hid->current_ptr);  /* next item */
     }
     /* find next bucket */
     for (i = hid->current_slot + 1; i < hid->size; i++) {
@@ -265,7 +248,7 @@ hash_next(hash_table * hid)
         if (hid->buckets[i] != NULL)
             return (hid->current_ptr = hid->buckets[i]);
     }
-    return NULL;               /* end of list */
+    return NULL;        /* end of list */
 }
 
 int
@@ -292,10 +275,10 @@ hash_unlink(hash_table * hid, hash_link * hl, int FreeLink)
     for (prev = NULL, walker = hid->buckets[i];
             walker != NULL; prev = walker, walker = walker->next) {
         if (walker == hl) {
-            if (prev == NULL) {        /* it's the head */
+            if (prev == NULL) { /* it's the head */
                 hid->buckets[i] = walker->next;
             } else {
-                prev->next = walker->next;     /* skip it */
+                prev->next = walker->next;  /* skip it */
             }
             /* fix walker state if needed */
             if (walker == hid->current_ptr)
@@ -337,7 +320,6 @@ hash_get_bucket(hash_table * hid, unsigned int bucket)
     return (hid->buckets[bucket]);
 }
 
-
 void
 hashFreeMemory(hash_table * hid)
 {
@@ -347,8 +329,7 @@ hashFreeMemory(hash_table * hid)
         free(hid);
 }
 
-
-#ifdef USE_HASH_DRIVER
+#if USE_HASH_DRIVER
 /*
  *  hash-driver - Run with a big file as stdin to insert each line into the
  *  hash table, then prints the whole hash table, then deletes a random item,
@@ -373,12 +354,15 @@ main(void)
     }
     printf("done creating hash table: %d\n", hid);
 
+    std::mt19937 mt;
+    xuniform_int_distribution<> dist(0,16);
+
     while (fgets(buf, BUFSIZ, stdin)) {
         buf[strlen(buf) - 1] = '\0';
         printf("Inserting '%s' for item %p to hash table: %d\n",
                buf, buf, hid);
         hash_insert(hid, xstrdup(buf), (void *) 0x12345678);
-        if (random() % 17 == 0)
+        if (dist(mt) == 0)
             strcpy(todelete, buf);
     }
 
@@ -401,8 +385,8 @@ main(void)
     }
     printf("done walking hash table...\n");
 
-
     printf("driver finished.\n");
     exit(0);
 }
 #endif
+