X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/b2687a0a4b3c5e45cad7c5815a6d3805bfc8d4f1..eb0f76ed2e02a0cfef9b837b96dfbbeb1193f4b8:/field.c diff --git a/field.c b/field.c index af7a561..f17f4d9 100644 --- a/field.c +++ b/field.c @@ -1,7 +1,5 @@ /* -*-c-*- * - * $Id$ - * * Abstract fields * * (c) 2004 Straylight/Edgeware @@ -232,11 +230,13 @@ end: static long fe_pyhash(PyObject *me) { - long i = mp_tolong(FE_X(me)); - i ^= 0xdcf62d6c; /* random perturbance */ - if (i == -1) - i = -2; - return (i); + size_t sz = FE_F(me)->noctets; + uint32 h = 0xe0c127ca + FE_F(me)->ops->ty; + octet *p = xmalloc(sz); + mp_storeb(FE_X(me), p, sz); + h = unihash_hash(&unihash_global, h, p, sz); + xfree(p); + return (h % LONG_MAX); } static int fe_pycoerce(PyObject **x, PyObject **y) @@ -408,7 +408,7 @@ static PyNumberMethods fe_pynumber = { static PyTypeObject fe_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.FE", /* @tp_name@ */ + "FE", /* @tp_name@ */ sizeof(fe_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -538,7 +538,7 @@ static PyMethodDef field_pymethods[] = { static PyTypeObject field_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.Field", /* @tp_name@ */ + "Field", /* @tp_name@ */ sizeof(field_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -616,7 +616,7 @@ static PyGetSetDef primefield_pygetset[] = { static PyTypeObject primefield_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.PrimeField", /* @tp_name@ */ + "PrimeField", /* @tp_name@ */ sizeof(field_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -683,7 +683,7 @@ end: static PyTypeObject niceprimefield_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.NicePrimeField", /* @tp_name@ */ + "NicePrimeField", /* @tp_name@ */ sizeof(field_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -743,7 +743,7 @@ static PyGetSetDef binfield_pygetset[] = { static PyTypeObject binfield_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.BinField", /* @tp_name@ */ + "BinField", /* @tp_name@ */ sizeof(field_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -816,7 +816,7 @@ static PyGetSetDef binpolyfield_pygetset[] = { static PyTypeObject binpolyfield_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.BinPolyField", /* @tp_name@ */ + "BinPolyField", /* @tp_name@ */ sizeof(field_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -898,7 +898,7 @@ static PyGetSetDef binnormfield_pygetset[] = { static PyTypeObject binnormfield_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.BinNormField", /* @tp_name@ */ + "BinNormField", /* @tp_name@ */ sizeof(field_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */