From 6cdc6f41465e88344b5ed62e45b036cf502f3770 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 21 Aug 1996 17:41:54 +0000 Subject: Added PyObject_DelItem and PySequence_Del{Item,Slice}. --- Include/abstract.h | 23 ++++++++++++++++++++ Objects/abstract.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/Include/abstract.h b/Include/abstract.h index 53b4193..956ca89 100644 --- a/Include/abstract.h +++ b/Include/abstract.h @@ -410,6 +410,13 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/ statement: o[key]=v. */ + int PyObject_DelItem Py_PROTO((PyObject *o, PyObject *key)); + + /* + Delete the mapping for key from *o. Returns -1 on failure. + This is the equivalent of the Python statement: del o[key]. + */ + /* Number Protocol:*/ @@ -672,6 +679,14 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/ */ + int PySequence_DelItem Py_PROTO((PyObject *o, int i)); + + /* + Delete the ith element of object v. Returns + -1 on failure. This is the equivalent of the Python + statement: del o[i]. + */ + int PySequence_SetSlice Py_PROTO((PyObject *o, int i1, int i2, PyObject *v)); /* @@ -680,6 +695,14 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/ equivalent of the Python statement: o[i1:i2]=v. */ + int PySequence_DelSlice Py_PROTO((PyObject *o, int i1, int i2)); + + /* + Delete the slice in sequence object, o, from i1 to i2. + Returns -1 on failure. This is the equivalent of the Python + statement: del o[i1:i2]. + */ + PyObject *PySequence_Tuple Py_PROTO((PyObject *o)); /* diff --git a/Objects/abstract.c b/Objects/abstract.c index 1efec1a..e0483a1 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -155,6 +155,24 @@ PyObject_SetItem(o, key, value) return -1; } +int +PyObject_DelItem(o, key) + PyObject *o; + PyObject *key; +{ + PyMappingMethods *m; + + if(! o || ! key) return Py_ReturnNullError(),-1; + if((m=o->ob_type->tp_as_mapping) && m->mp_ass_subscript) + return m->mp_ass_subscript(o,key,(PyObject*)NULL); + + if(PyInt_Check(key)) + return PySequence_SetItem(o,PyInt_AsLong(key),(PyObject*)NULL); + + PyErr_SetString(PyExc_TypeError,"expeced integer index"); + return -1; +} + int PyNumber_Check(o) PyObject *o; @@ -695,6 +713,27 @@ PySequence_SetItem(s, i, o) return m->sq_ass_item(s,i,o); } +int +PySequence_DelItem(s, i) + PyObject *s; + int i; +{ + PySequenceMethods *m; + int l; + if(! s) return Py_ReturnNullError(),-1; + + if(! ((m=s->ob_type->tp_as_sequence) && m->sq_length && m->sq_ass_item)) + return Py_ReturnMethodError("__delitem__"),-1; + + if(i < 0) + { + if(0 > (l=m->sq_length(s))) return -1; + i += l; + } + + return m->sq_ass_item(s,i,(PyObject*)NULL); +} + int PySequence_SetSlice(s, i1, i2, o) PyObject *s; @@ -718,6 +757,28 @@ PySequence_SetSlice(s, i1, i2, o) return m->sq_ass_slice(s,i1,i2,o); } +int +PySequence_DelSlice(s, i1, i2) + PyObject *s; + int i1; + int i2; +{ + PySequenceMethods *m; + int l; + + if(! s) return Py_ReturnNullError(),-1; + + if(! ((m=s->ob_type->tp_as_sequence) && m->sq_length && m->sq_ass_slice)) + return Py_ReturnMethodError("__delslice__"),-1; + + if(0 > (l=m->sq_length(s))) return -1; + + if(i1 < 0) i1 += l; + if(i2 < 0) i2 += l; + + return m->sq_ass_slice(s,i1,i2,(PyObject*)NULL); +} + PyObject * PySequence_Tuple(s) PyObject *s; -- cgit v0.12