From: Michael Tremer Date: Wed, 21 Feb 2024 16:06:13 +0000 (+0000) Subject: python: Implement rich comparison for Network objects X-Git-Tag: 0.9.18~181 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ff17216425968d4663f199b391fc1bff07776fb7;p=location%2Flibloc.git python: Implement rich comparison for Network objects Signed-off-by: Michael Tremer --- diff --git a/src/python/network.c b/src/python/network.c index c14174e..3400721 100644 --- a/src/python/network.c +++ b/src/python/network.c @@ -248,6 +248,37 @@ static PyObject* Network_get__last_address(NetworkObject* self) { return PyBytes_FromAddress(address); } +static PyObject* Network_richcompare(NetworkObject* self, PyObject* other, int op) { + int r; + + // Check for type + if (!PyObject_IsInstance(other, (PyObject *)&NetworkType)) + Py_RETURN_NOTIMPLEMENTED; + + NetworkObject* o = (NetworkObject*)other; + + r = loc_network_cmp(self->network, o->network); + + switch (op) { + case Py_EQ: + if (r == 0) + Py_RETURN_TRUE; + + Py_RETURN_FALSE; + + case Py_LT: + if (r < 0) + Py_RETURN_TRUE; + + Py_RETURN_FALSE; + + default: + break; + } + + Py_RETURN_NOTIMPLEMENTED; +} + static struct PyMethodDef Network_methods[] = { { "exclude", @@ -342,4 +373,5 @@ PyTypeObject NetworkType = { .tp_getset = Network_getsetters, .tp_repr = (reprfunc)Network_repr, .tp_str = (reprfunc)Network_str, + .tp_richcompare = (richcmpfunc)Network_richcompare, };