summaryrefslogtreecommitdiffstats
path: root/Tools/perfecthash/perfhash.c
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/perfecthash/perfhash.c')
-rw-r--r--Tools/perfecthash/perfhash.c114
1 files changed, 0 insertions, 114 deletions
diff --git a/Tools/perfecthash/perfhash.c b/Tools/perfecthash/perfhash.c
deleted file mode 100644
index 6e8a8b5..0000000
--- a/Tools/perfecthash/perfhash.c
+++ /dev/null
@@ -1,114 +0,0 @@
-#include <Python.h>
-
-static PyObject * hashFunction(PyObject *self, PyObject *args, PyObject *kw)
-{
- PyStringObject *a;
- register int len;
- register unsigned char *p;
- register unsigned long x;
- unsigned long ulSeed;
- unsigned long cchSeed;
- unsigned long cHashElements;
-
- if (!PyArg_ParseTuple(args, "llOl:hash",
- &ulSeed, &cchSeed, &a, &cHashElements))
- return NULL;
- if (!PyString_Check(a))
- {
- PyErr_SetString(PyExc_TypeError, "arg 3 needs to be a string");
- return NULL;
- }
-
- len = a->ob_size;
- p = (unsigned char *) a->ob_sval;
- x = ulSeed;
- while (--len >= 0)
- {
- /* (1000003 * x) ^ *p++
- * translated to handle > 32 bit longs
- */
- x = (0xf4243 * x);
- x = x & 0xFFFFFFFF;
- x = x ^ *p++;
- }
- x ^= a->ob_size + cchSeed;
- if (x == 0xFFFFFFFF)
- x = 0xfffffffe;
- if (x & 0x80000000)
- {
- /* Emulate Python 32-bit signed (2's complement)
- * modulo operation
- */
- x = (~x & 0xFFFFFFFF) + 1;
- x %= cHashElements;
- if (x != 0)
- {
- x = x + (~cHashElements & 0xFFFFFFFF) + 1;
- x = (~x & 0xFFFFFFFF) + 1;
- }
- }
- else
- x %= cHashElements;
- return PyInt_FromLong((long)x);
-}
-
-static PyObject * calcSeed(PyObject *self, PyObject *args, PyObject *kw)
-{
- PyStringObject *a;
- register int len;
- register unsigned char *p;
- register unsigned long x;
-
- if (!PyString_Check(args))
- {
- PyErr_SetString(PyExc_TypeError, "arg 1 expected a string, but didn't get it.");
- return NULL;
- }
-
- a = (PyStringObject *)args;
-
- len = a->ob_size;
- p = (unsigned char *) a->ob_sval;
- x = (*p << 7) & 0xFFFFFFFF;
- while (--len >= 0)
- {
- /* (1000003 * x) ^ *p++
- * translated to handle > 32 bit longs
- */
- x = (0xf4243 * x);
- x = x & 0xFFFFFFFF;
- x = x ^ *p++;
- }
- return PyInt_FromLong((long)x);
-}
-
-
-static struct PyMethodDef hashMethods[] = {
- { "calcSeed", calcSeed, 0, NULL },
- { "hash", hashFunction, 0, NULL },
- { NULL, NULL, 0, NULL } /* sentinel */
-};
-
-#ifdef _MSC_VER
-_declspec(dllexport)
-#endif
-void initperfhash(void)
-{
- PyObject *m;
-
- m = Py_InitModule4("perfhash", hashMethods,
- NULL, NULL, PYTHON_API_VERSION);
- if ( m == NULL )
- Py_FatalError("can't initialize module perfhash");
-}
-
-
-
-
-
-
-
-
-
-
-