return (rc);
}
-static long fe_pyhash(PyObject *me)
+static Py_hash_t fe_pyhash(PyObject *me)
{ return (mphash(FE_X(me))); }
static int fe_pycoerce(PyObject **x, PyObject **y)
UNOP(hlv, ; )
#undef UNOP
-static PyObject *feget_field(PyObject *me, void *hunoz)
- { RETURN_OBJ(FE_FOBJ(me)); }
-
static PyObject *feget_value(PyObject *me, void *hunoz)
{
mp *x = F_OUT(FE_F(me), MP_NEW, FE_X(me));
return (mp_pywrap(x));
}
+static const PyMemberDef fe_pymembers[] = {
+#define MEMBERSTRUCT fe_pyobj
+ MEMRNM(field, T_OBJECT, ob_type, READONLY,
+ "X.field -> field containing X")
+#undef MEMBERSTRUCT
+ { 0 }
+};
+
static const PyGetSetDef fe_pygetset[] = {
#define GETSETNAME(op, name) fe##op##_##name
- GET (field, "X.field -> field containing X")
GET (value, "X.value -> `natural' MP/GF representation of X")
GET (_value, "X._value -> internal MP/GF representation of X")
#undef GETSETNAME
0, /* @nb_inplace_true_divide@ */
};
-static PyTypeObject fe_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+static const PyTypeObject fe_pytype_skel = {
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"FE", /* @tp_name@ */
sizeof(fe_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
0, /* @tp_iter@ */
0, /* @tp_iternext@ */
PYMETHODS(fe), /* @tp_methods@ */
- 0, /* @tp_members@ */
+ PYMEMBERS(fe), /* @tp_members@ */
PYGETSET(fe), /* @tp_getset@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
{ return (PyInt_FromLong(FIELD_F(me)->noctets)); }
static PyObject *fget_name(PyObject *me, void *hunoz)
- { return (PyString_FromString(F_NAME(FIELD_F(me)))); }
+ { return (TEXT_FROMSTR(F_NAME(FIELD_F(me)))); }
static PyObject *fget_type(PyObject *me, void *hunoz)
{ return (PyInt_FromLong(F_TYPE(FIELD_F(me)))); }
{ 0 }
};
-static PyTypeObject field_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+static const PyTypeObject field_pytype_skel = {
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"Field", /* @tp_name@ */
sizeof(field_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
#undef GETSETNAME
};
-static PyTypeObject primefield_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+static const PyTypeObject primefield_pytype_skel = {
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"PrimeField", /* @tp_name@ */
sizeof(field_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
return (0);
}
-static PyTypeObject niceprimefield_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+static const PyTypeObject niceprimefield_pytype_skel = {
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"NicePrimeField", /* @tp_name@ */
sizeof(field_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
{ 0 }
};
-static PyTypeObject binfield_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+static const PyTypeObject binfield_pytype_skel = {
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"BinField", /* @tp_name@ */
sizeof(field_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
return (0);
}
-static PyTypeObject binpolyfield_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+static const PyTypeObject binpolyfield_pytype_skel = {
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"BinPolyField", /* @tp_name@ */
sizeof(field_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
{ 0 }
};
-static PyTypeObject binnormfield_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+static const PyTypeObject binnormfield_pytype_skel = {
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"BinNormField", /* @tp_name@ */
sizeof(field_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
/*----- Setup -------------------------------------------------------------*/
+static const struct nameval consts[] = {
+ CONST(FTY_PRIME), CONST(FTY_BINARY),
+ { 0 }
+};
+
void field_pyinit(void)
{
INITTYPE(fe, root);
INSERT("BinField", binfield_pytype);
INSERT("BinPolyField", binpolyfield_pytype);
INSERT("BinNormField", binnormfield_pytype);
+ setconstants(mod, consts);
}
/*----- That's all, folks -------------------------------------------------*/