11// SPDX-License-Identifier: (Apache-2.0 OR MIT)
22
3+ use ahash:: RandomState ;
34use once_cell:: unsync:: Lazy ;
45use pyo3:: ffi:: * ;
56use std:: os:: raw:: c_char;
@@ -17,7 +18,6 @@ pub struct NumpyTypes {
1718 pub uint32 : * mut PyTypeObject ,
1819 pub uint8 : * mut PyTypeObject ,
1920}
20- pub static mut HASH_SEED : u64 = 0 ;
2121
2222pub static mut NONE : * mut PyObject = 0 as * mut PyObject ;
2323pub static mut TRUE : * mut PyObject = 0 as * mut PyObject ;
@@ -57,6 +57,14 @@ pub static mut VALUE_STR: *mut PyObject = 0 as *mut PyObject;
5757pub static mut STR_HASH_FUNCTION : Option < hashfunc > = None ;
5858pub static mut DEFAULT : * mut PyObject = 0 as * mut PyObject ;
5959pub static mut OPTION : * mut PyObject = 0 as * mut PyObject ;
60+ pub static mut HASH_BUILDER : Lazy < ahash:: RandomState > = Lazy :: new ( || unsafe {
61+ RandomState :: with_seeds (
62+ VALUE_STR as u64 ,
63+ DICT_TYPE as u64 ,
64+ STR_TYPE as u64 ,
65+ BYTES_TYPE as u64 ,
66+ )
67+ } ) ;
6068
6169#[ allow( non_upper_case_globals) ]
6270pub static mut JsonEncodeError : * mut PyObject = 0 as * mut PyObject ;
@@ -114,7 +122,6 @@ pub fn init_typerefs() {
114122 ARRAY_STRUCT_STR =
115123 pyo3:: ffi:: PyUnicode_InternFromString ( "__array_struct__\0 " . as_ptr ( ) as * const c_char ) ;
116124 VALUE_STR = pyo3:: ffi:: PyUnicode_InternFromString ( "value\0 " . as_ptr ( ) as * const c_char ) ;
117- HASH_SEED = ( VALUE_STR as u64 ) . wrapping_mul ( DICT_TYPE as u64 ) ;
118125 DEFAULT = PyUnicode_InternFromString ( "default\0 " . as_ptr ( ) as * const c_char ) ;
119126 OPTION = PyUnicode_InternFromString ( "option\0 " . as_ptr ( ) as * const c_char ) ;
120127 JsonEncodeError = pyo3:: ffi:: PyExc_TypeError ;
0 commit comments