MCPcopy Create free account
hub / github.com/ashvardanian/StringZilla / Hasher_init

Function Hasher_init

python/stringzilla.c:5877–5917  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5875}
5876
5877static int Hasher_init(Hasher *self, PyObject *args, PyObject *kwargs) {
5878 // Positional seed
5879 Py_ssize_t nargs = PyTuple_Size(args);
5880 if (nargs > 1) {
5881 PyErr_SetString(PyExc_TypeError, "Hasher() takes at most 1 positional argument");
5882 return -1;
5883 }
5884 PyObject *seed_obj = nargs == 1 ? PyTuple_GET_ITEM(args, 0) : NULL;
5885 // Keyword seed
5886 if (kwargs) {
5887 PyObject *kw_seed = PyDict_GetItemString(kwargs, "seed");
5888 if (kw_seed) {
5889 if (seed_obj) {
5890 PyErr_SetString(PyExc_TypeError, "seed specified twice");
5891 return -1;
5892 }
5893 seed_obj = kw_seed;
5894 }
5895 // Check for unexpected kwargs
5896 Py_ssize_t pos = 0;
5897 PyObject *key, *value;
5898 while (PyDict_Next(kwargs, &pos, &key, &value)) {
5899 if (PyUnicode_CompareWithASCIIString(key, "seed") != 0) {
5900 PyErr_Format(PyExc_TypeError, "unexpected keyword argument: %S", key);
5901 return -1;
5902 }
5903 }
5904 }
5905 unsigned long long seed = 0ULL;
5906 if (seed_obj) {
5907 if (!PyLong_Check(seed_obj)) {
5908 PyErr_SetString(PyExc_TypeError, "seed must be an integer");
5909 return -1;
5910 }
5911 seed = PyLong_AsUnsignedLongLong(seed_obj);
5912 if (PyErr_Occurred()) return -1;
5913 }
5914 self->seed = (sz_u64_t)seed;
5915 sz_hash_state_init(&self->state, self->seed);
5916 return 0;
5917}
5918
5919static PyObject *Hasher_update(PyObject *self_obj, PyObject *arg) {
5920 Hasher *self = (Hasher *)self_obj;

Callers

nothing calls this directly

Calls 1

sz_hash_state_initFunction · 0.50

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…