mirror of https://github.com/python/cpython.git
add list_contains and tuplecontains: efficient implementations of tp_contains
This commit is contained in:
parent
035a07e263
commit
37b1a26c89
|
@ -306,6 +306,26 @@ list_length(a)
|
||||||
return a->ob_size;
|
return a->ob_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
list_contains(a, el)
|
||||||
|
PyListObject *a;
|
||||||
|
PyObject *el;
|
||||||
|
{
|
||||||
|
int i, cmp;
|
||||||
|
|
||||||
|
for (i = 0; i < a->ob_size; ++i) {
|
||||||
|
cmp = PyObject_Compare(el, PyList_GET_ITEM(a, i));
|
||||||
|
if (cmp == 0)
|
||||||
|
return 1;
|
||||||
|
if (PyErr_Occurred())
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_item(a, i)
|
list_item(a, i)
|
||||||
PyListObject *a;
|
PyListObject *a;
|
||||||
|
@ -1447,6 +1467,7 @@ static PySequenceMethods list_as_sequence = {
|
||||||
(intintargfunc)list_slice, /*sq_slice*/
|
(intintargfunc)list_slice, /*sq_slice*/
|
||||||
(intobjargproc)list_ass_item, /*sq_ass_item*/
|
(intobjargproc)list_ass_item, /*sq_ass_item*/
|
||||||
(intintobjargproc)list_ass_slice, /*sq_ass_slice*/
|
(intintobjargproc)list_ass_slice, /*sq_ass_slice*/
|
||||||
|
(objobjproc)list_contains, /*sq_contains*/
|
||||||
};
|
};
|
||||||
|
|
||||||
PyTypeObject PyList_Type = {
|
PyTypeObject PyList_Type = {
|
||||||
|
|
|
@ -281,6 +281,23 @@ tuplelength(a)
|
||||||
return a->ob_size;
|
return a->ob_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
tuplecontains(a, el)
|
||||||
|
PyTupleObject *a;
|
||||||
|
PyObject *el;
|
||||||
|
{
|
||||||
|
int i, cmp;
|
||||||
|
|
||||||
|
for (i = 0; i < a->ob_size; ++i) {
|
||||||
|
cmp = PyObject_Compare(el, PyTuple_GET_ITEM(a, i));
|
||||||
|
if (cmp == 0)
|
||||||
|
return 1;
|
||||||
|
if (PyErr_Occurred())
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
tupleitem(a, i)
|
tupleitem(a, i)
|
||||||
register PyTupleObject *a;
|
register PyTupleObject *a;
|
||||||
|
@ -409,6 +426,7 @@ static PySequenceMethods tuple_as_sequence = {
|
||||||
(intintargfunc)tupleslice, /*sq_slice*/
|
(intintargfunc)tupleslice, /*sq_slice*/
|
||||||
0, /*sq_ass_item*/
|
0, /*sq_ass_item*/
|
||||||
0, /*sq_ass_slice*/
|
0, /*sq_ass_slice*/
|
||||||
|
(objobjproc)tuplecontains, /*sq_contains*/
|
||||||
};
|
};
|
||||||
|
|
||||||
PyTypeObject PyTuple_Type = {
|
PyTypeObject PyTuple_Type = {
|
||||||
|
|
Loading…
Reference in New Issue