1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#[cfg(not(Py_LIMITED_API))]
use crate::pyport::{Py_hash_t, Py_ssize_t};
#[cfg(not(Py_LIMITED_API))]
use std::os::raw::{c_char, c_void};
use std::os::raw::{c_int, c_ulong};
extern "C" {
#[cfg(not(any(Py_LIMITED_API, PyPy)))]
pub fn _Py_HashBytes(src: *const c_void, len: Py_ssize_t) -> Py_hash_t;
}
pub const _PyHASH_MULTIPLIER: c_ulong = 1000003;
#[cfg(not(Py_LIMITED_API))]
#[repr(C)]
#[derive(Copy, Clone)]
pub struct PyHash_FuncDef {
pub hash: Option<extern "C" fn(arg1: *const c_void, arg2: Py_ssize_t) -> Py_hash_t>,
pub name: *const c_char,
pub hash_bits: c_int,
pub seed_bits: c_int,
}
#[cfg(not(Py_LIMITED_API))]
impl Default for PyHash_FuncDef {
#[inline]
fn default() -> Self {
unsafe { std::mem::zeroed() }
}
}
extern "C" {
#[cfg(not(any(Py_LIMITED_API, PyPy)))]
pub fn PyHash_GetFuncDef() -> *mut PyHash_FuncDef;
}
pub const Py_HASH_EXTERNAL: c_int = 0;
pub const Py_HASH_SIPHASH24: c_int = 1;
pub const Py_HASH_FNV: c_int = 2;