summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/Include/cpython/pyhash.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tools/python3/Include/cpython/pyhash.h')
-rw-r--r--contrib/tools/python3/Include/cpython/pyhash.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/contrib/tools/python3/Include/cpython/pyhash.h b/contrib/tools/python3/Include/cpython/pyhash.h
new file mode 100644
index 00000000000..825c034a8d8
--- /dev/null
+++ b/contrib/tools/python3/Include/cpython/pyhash.h
@@ -0,0 +1,47 @@
+#ifndef Py_CPYTHON_HASH_H
+# error "this header file must not be included directly"
+#endif
+
+/* Prime multiplier used in string and various other hashes. */
+#define PyHASH_MULTIPLIER 1000003UL /* 0xf4243 */
+
+/* Parameters used for the numeric hash implementation. See notes for
+ _Py_HashDouble in Python/pyhash.c. Numeric hashes are based on
+ reduction modulo the prime 2**_PyHASH_BITS - 1. */
+
+#if SIZEOF_VOID_P >= 8
+# define PyHASH_BITS 61
+#else
+# define PyHASH_BITS 31
+#endif
+
+#define PyHASH_MODULUS (((size_t)1 << _PyHASH_BITS) - 1)
+#define PyHASH_INF 314159
+#define PyHASH_IMAG PyHASH_MULTIPLIER
+
+/* Aliases kept for backward compatibility with Python 3.12 */
+#define _PyHASH_MULTIPLIER PyHASH_MULTIPLIER
+#define _PyHASH_BITS PyHASH_BITS
+#define _PyHASH_MODULUS PyHASH_MODULUS
+#define _PyHASH_INF PyHASH_INF
+#define _PyHASH_IMAG PyHASH_IMAG
+
+/* Helpers for hash functions */
+PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double);
+
+// Kept for backward compatibility
+#define _Py_HashPointer Py_HashPointer
+
+
+/* hash function definition */
+typedef struct {
+ Py_hash_t (*const hash)(const void *, Py_ssize_t);
+ const char *name;
+ const int hash_bits;
+ const int seed_bits;
+} PyHash_FuncDef;
+
+PyAPI_FUNC(PyHash_FuncDef*) PyHash_GetFuncDef(void);
+
+PyAPI_FUNC(Py_hash_t) Py_HashPointer(const void *ptr);
+PyAPI_FUNC(Py_hash_t) PyObject_GenericHash(PyObject *);