124 lines
2.7 KiB
Text
124 lines
2.7 KiB
Text
$NetBSD: patch-ab,v 1.1.1.1 2002/02/05 21:05:58 drochner Exp $
|
|
--- src/tableobject.c.orig Mon May 28 23:00:41 2001
|
|
+++ src/tableobject.c Sun Nov 4 18:28:55 2001
|
|
@@ -185,6 +185,105 @@
|
|
};
|
|
|
|
/**
|
|
+ ** table_get
|
|
+ **
|
|
+ *
|
|
+ * Implements dictionary like get(k,[x]) method.
|
|
+ */
|
|
+
|
|
+static PyObject * table_get(tableobject *self, PyObject *args)
|
|
+{
|
|
+
|
|
+ PyObject *key,*v;
|
|
+ PyObject *failob = Py_None;
|
|
+ array_header *ah;
|
|
+ table_entry *elts;
|
|
+ int i, j;
|
|
+
|
|
+ if(!PyArg_ParseTuple(args, "O|O:get", &key, &failob))
|
|
+ return NULL;
|
|
+ v=tablegetitem(self,key);
|
|
+ if(v = NULL) {
|
|
+ v=failob;
|
|
+ Py_INCREF(failob);
|
|
+ }
|
|
+ return v;
|
|
+}
|
|
+
|
|
+/**
|
|
+ ** table_keys
|
|
+ **
|
|
+ *
|
|
+ * Implements dictionary like items() method.
|
|
+ */
|
|
+
|
|
+static PyObject * table_items(tableobject *self)
|
|
+{
|
|
+
|
|
+ PyObject *v;
|
|
+ array_header *ah;
|
|
+ table_entry *elts;
|
|
+ int i, j;
|
|
+
|
|
+ ah = ap_table_elts(self->table);
|
|
+ elts = (table_entry *) ah->elts;
|
|
+
|
|
+ v = PyList_New(ah->nelts);
|
|
+
|
|
+ for (i = 0, j = 0; i < ah->nelts; i++)
|
|
+ {
|
|
+ if (elts[i].key)
|
|
+ {
|
|
+ PyObject *vp = PyTuple_New(2);
|
|
+ if(vp == NULL) {
|
|
+ Py_DECREF(v);
|
|
+ return NULL;
|
|
+ }
|
|
+ PyTuple_SET_ITEM(vp,0,PyString_FromString(elts[i].key));
|
|
+ PyTuple_SET_ITEM(vp,1,PyString_FromString(ap_table_get(self->table,
|
|
+ elts[i].key)));
|
|
+ PyList_SetItem(v, j, vp);
|
|
+ j++;
|
|
+ }
|
|
+ }
|
|
+ return v;
|
|
+}
|
|
+/**
|
|
+ ** table_keys
|
|
+ **
|
|
+ *
|
|
+ * Implements dictionary like values() method.
|
|
+ * This mostly for completeness sake, I can't see use for it
|
|
+ */
|
|
+
|
|
+static PyObject * table_values(tableobject *self)
|
|
+{
|
|
+
|
|
+ PyObject *v;
|
|
+ array_header *ah;
|
|
+ table_entry *elts;
|
|
+ int i, j;
|
|
+
|
|
+ ah = ap_table_elts(self->table);
|
|
+ elts = (table_entry *) ah->elts;
|
|
+
|
|
+ v = PyList_New(ah->nelts);
|
|
+
|
|
+ for (i = 0, j = 0; i < ah->nelts; i++)
|
|
+ {
|
|
+ if (elts[i].key)
|
|
+ {
|
|
+ PyObject *val = PyString_FromString(ap_table_get(self->table,
|
|
+ elts[i].key));
|
|
+ PyList_SetItem(v, j, val);
|
|
+ j++;
|
|
+ }
|
|
+ }
|
|
+ return v;
|
|
+}
|
|
+
|
|
+
|
|
+/**
|
|
** table_keys
|
|
**
|
|
*
|
|
@@ -261,9 +360,13 @@
|
|
/* table method definitions */
|
|
|
|
static PyMethodDef tablemethods[] = {
|
|
- {"keys", (PyCFunction)table_keys, METH_VARARGS},
|
|
{"has_key", (PyCFunction)table_has_key, METH_VARARGS},
|
|
{"add", (PyCFunction)mp_table_add, METH_VARARGS},
|
|
+ {"items", (PyCFunction)table_items, METH_VARARGS},
|
|
+ {"keys", (PyCFunction)table_keys, METH_VARARGS},
|
|
+ {"get", (PyCFunction)table_get, METH_VARARGS},
|
|
+ {"values", (PyCFunction)table_values, METH_VARARGS},
|
|
+ /* Still needs: copy, update, clear, setdefault, popitem */
|
|
{NULL, NULL} /* sentinel */
|
|
};
|
|
|