]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Make reversed() transparent with respect to length.
authorRaymond Hettinger <python@rcn.com>
Tue, 10 Feb 2004 09:33:39 +0000 (09:33 +0000)
committerRaymond Hettinger <python@rcn.com>
Tue, 10 Feb 2004 09:33:39 +0000 (09:33 +0000)
Lib/test/test_enumerate.py
Objects/enumobject.c

index ab1a60d0ef7c3527617f1d9871e1bd27d748b15c..00ecbcccaf3134cf8a8f4dbc489f669e76acb784 100644 (file)
@@ -145,6 +145,10 @@ class TestReversed(unittest.TestCase):
         s = 'hello'
         self.assertEqual(list(reversed(reversed(s))), list(s))
 
+    def test_len(self):
+        s = 'hello'
+        self.assertEqual(len(reversed(s)), len(s))
+
 def test_main(verbose=None):
     testclasses = (EnumerateTestCase, SubclassTestCase, TestEmpty, TestBig,
                    TestReversed)
index 3aac68095f71ecd31abd8898f24941d90f2f90f4..55595ce73e332efc66f1a4941cd826c0265566bd 100644 (file)
@@ -230,6 +230,12 @@ reversed_next(reversedobject *ro)
        return item;
 }
 
+static int
+reversed_len(reversedobject *ro)
+{
+       return PyObject_Size(ro->seq);
+}
+
 static PyObject *
 reversed_reverse(reversedobject *ro, PyObject *unused)
 {
@@ -244,6 +250,12 @@ PyDoc_STRVAR(reversed_doc,
 static PyMethodDef reversed_methods[] = {
        {"__reversed__",        (PyCFunction)reversed_reverse,  
                METH_NOARGS,     reversed_doc},
+       {NULL,          NULL}   /* sentinel */
+};
+
+static PySequenceMethods reversed_as_sequence = {
+       (inquiry)reversed_len,          /* sq_length */
+       0,                              /* sq_concat */
 };
 
 PyTypeObject PyReversed_Type = {
@@ -260,7 +272,7 @@ PyTypeObject PyReversed_Type = {
        0,                              /* tp_compare */
        0,                              /* tp_repr */
        0,                              /* tp_as_number */
-       0,                              /* tp_as_sequence */
+       &reversed_as_sequence,          /* tp_as_sequence */
        0,                              /* tp_as_mapping */
        0,                              /* tp_hash */
        0,                              /* tp_call */