return -1;
// Create the AS object
- int r = loc_as_new(loc_ctx, NULL, &self->as, number);
+ int r = loc_as_new(loc_ctx, &self->as, number);
if (r)
return -1;
return 0;
}
+static PyObject* AS_repr(ASObject* self) {
+ uint32_t number = loc_as_get_number(self->as);
+ const char* name = loc_as_get_name(self->as);
+
+ if (name)
+ return PyUnicode_FromFormat("<AS %d (%s)>", number, name);
+
+ return PyUnicode_FromFormat("<AS %d>", number);
+}
+
+static PyObject* AS_str(ASObject* self) {
+ uint32_t number = loc_as_get_number(self->as);
+ const char* name = loc_as_get_name(self->as);
+
+ if (name)
+ return PyUnicode_FromFormat("AS%d (%s)", number, name);
+
+ return PyUnicode_FromFormat("AS%d", number);
+}
+
static PyObject* AS_get_number(ASObject* self) {
uint32_t number = loc_as_get_number(self->as);
return PyUnicode_FromString(name);
}
+static int AS_set_name(ASObject* self, PyObject* value) {
+ const char* name = PyUnicode_AsUTF8(value);
+
+ int r = loc_as_set_name(self->as, name);
+ if (r) {
+ PyErr_Format(PyExc_ValueError, "Could not set name: %s", name);
+ return r;
+ }
+
+ return 0;
+}
+
+static PyObject* AS_richcompare(ASObject* self, ASObject* other, int op) {
+ int r = loc_as_cmp(self->as, other->as);
+
+ 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 PyGetSetDef AS_getsetters[] = {
{
"name",
(getter)AS_get_name,
- NULL,
+ (setter)AS_set_name,
NULL,
NULL,
},
PyTypeObject ASType = {
PyVarObject_HEAD_INIT(NULL, 0)
- tp_name: "location.AS",
- tp_basicsize: sizeof(ASObject),
- tp_flags: Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,
- tp_new: AS_new,
- tp_dealloc: (destructor)AS_dealloc,
- tp_init: (initproc)AS_init,
- tp_doc: "AS object",
- tp_getset: AS_getsetters,
+ .tp_name = "location.AS",
+ .tp_basicsize = sizeof(ASObject),
+ .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,
+ .tp_new = AS_new,
+ .tp_dealloc = (destructor)AS_dealloc,
+ .tp_init = (initproc)AS_init,
+ .tp_doc = "AS object",
+ .tp_getset = AS_getsetters,
+ .tp_repr = (reprfunc)AS_repr,
+ .tp_str = (reprfunc)AS_str,
+ .tp_richcompare = (richcmpfunc)AS_richcompare,
};