]> git.ipfire.org Git - location/libloc.git/commitdiff
python: Implement rich comparison for Network objects
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 21 Feb 2024 16:06:13 +0000 (16:06 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 21 Feb 2024 16:06:13 +0000 (16:06 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/python/network.c

index c14174e3610d21de7342dfe3dce969d76220f4fb..3400721271b39e34b7245f2e48d4d11932eee7d6 100644 (file)
@@ -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,
 };