]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Added view and iterator types to collections / _abcoll
authorChristian Heimes <christian@cheimes.de>
Wed, 28 Nov 2007 09:44:38 +0000 (09:44 +0000)
committerChristian Heimes <christian@cheimes.de>
Wed, 28 Nov 2007 09:44:38 +0000 (09:44 +0000)
I've also renamed several of the iterators to keep a consistent naming schema.

Lib/_abcoll.py
Objects/dictobject.c
Objects/iterobject.c
Objects/listobject.c
Objects/rangeobject.c
Objects/setobject.c
Objects/unicodeobject.c

index 6363de9bb7a6f69f486bd9e3b2709ce5d24bc91b..d91c0107afc8bc2b97313d3234aa4498d3ca3e36 100644 (file)
@@ -17,8 +17,35 @@ __all__ = ["Hashable", "Iterable", "Iterator",
            "MappingView", "KeysView", "ItemsView", "ValuesView",
            "Sequence", "MutableSequence",
            "ByteString",
+           "bytearray_iterator", "bytes_iterator", "dict_itemiterator",
+           "dict_items", "dict_keyiterator", "dict_keys",
+           "dict_valueiterator", "dict_values", "list_iterator",
+           "list_reverseiterator", "range_iterator", "set_iterator",
+           "str_iterator", "tuple_iterator", "zip_iterator",
            ]
 
+
+### collection related types which are not exposed through builtin ###
+## iterators ##
+bytes_iterator = type(iter(b''))
+bytearray_iterator = type(iter(bytearray()))
+#callable_iterator = ???
+dict_keyiterator = type(iter({}.keys()))
+dict_valueiterator = type(iter({}.values()))
+dict_itemiterator = type(iter({}.items()))
+list_iterator = type(iter([]))
+list_reverseiterator = type(iter(reversed([])))
+range_iterator = type(iter(range(0)))
+set_iterator = type(iter(set()))
+str_iterator = type(iter(""))
+tuple_iterator = type(iter(()))
+zip_iterator = type(iter(zip()))
+## views ##
+dict_keys = type({}.keys())
+dict_values = type({}.values())
+dict_items = type({}.items())
+
+
 ### ONE-TRICK PONIES ###
 
 class Hashable(metaclass=ABCMeta):
@@ -69,6 +96,19 @@ class Iterator(metaclass=ABCMeta):
                 return True
         return NotImplemented
 
+Iterator.register(bytes_iterator)
+Iterator.register(bytearray_iterator)
+#Iterator.register(callable_iterator)
+Iterator.register(dict_keyiterator)
+Iterator.register(dict_valueiterator)
+Iterator.register(dict_itemiterator)
+Iterator.register(list_iterator)
+Iterator.register(list_reverseiterator)
+Iterator.register(range_iterator)
+Iterator.register(set_iterator)
+Iterator.register(str_iterator)
+Iterator.register(tuple_iterator)
+Iterator.register(zip_iterator)
 
 class Sized(metaclass=ABCMeta):
 
@@ -349,7 +389,7 @@ class KeysView(MappingView, Set):
         for key in self._mapping:
             yield key
 
-KeysView.register(type({}.keys()))
+KeysView.register(dict_keys)
 
 
 class ItemsView(MappingView, Set):
@@ -367,7 +407,7 @@ class ItemsView(MappingView, Set):
         for key in self._mapping:
             yield (key, self._mapping[key])
 
-ItemsView.register(type({}.items()))
+ItemsView.register(dict_items)
 
 
 class ValuesView(MappingView):
@@ -382,7 +422,7 @@ class ValuesView(MappingView):
         for key in self._mapping:
             yield self._mapping[key]
 
-ValuesView.register(type({}.values()))
+ValuesView.register(dict_values)
 
 
 class MutableMapping(Mapping):
index 7bff7d8153ecf7f0d5e1c83f27666b84305778c4..b849f574434c9d645144f0d9f9b7ff98ac6fdb4e 100644 (file)
@@ -2148,7 +2148,7 @@ fail:
 
 PyTypeObject PyDictIterKey_Type = {
        PyVarObject_HEAD_INIT(&PyType_Type, 0)
-       "dictionary-keyiterator",               /* tp_name */
+       "dict_keyiterator",                     /* tp_name */
        sizeof(dictiterobject),                 /* tp_basicsize */
        0,                                      /* tp_itemsize */
        /* methods */
@@ -2220,7 +2220,7 @@ fail:
 
 PyTypeObject PyDictIterValue_Type = {
        PyVarObject_HEAD_INIT(&PyType_Type, 0)
-       "dictionary-valueiterator",             /* tp_name */
+       "dict_valueiterator",                   /* tp_name */
        sizeof(dictiterobject),                 /* tp_basicsize */
        0,                                      /* tp_itemsize */
        /* methods */
@@ -2306,7 +2306,7 @@ fail:
 
 PyTypeObject PyDictIterItem_Type = {
        PyVarObject_HEAD_INIT(&PyType_Type, 0)
-       "dictionary-itemiterator",              /* tp_name */
+       "dict_itemiterator",                    /* tp_name */
        sizeof(dictiterobject),                 /* tp_basicsize */
        0,                                      /* tp_itemsize */
        /* methods */
index 32b9f949ad0ebe8b2f185c5ba6cd3499281643c8..ce9c661c4cd37bc5c5340a27fc8d7d50dbc24dd6 100644 (file)
@@ -369,7 +369,7 @@ zipiter_next(zipiterobject *zit)
 
 static PyTypeObject PyZipIter_Type = {
        PyVarObject_HEAD_INIT(0, 0)
-       "zipiterator",                          /* tp_name */
+       "zip_iterator",                         /* tp_name */
        sizeof(zipiterobject),                  /* tp_basicsize */
        0,                                      /* tp_itemsize */
        /* methods */
index 5df40fa9ee5db7c604fee38e322b9a4652aa5382..1d82e354104a4af14f8377db0d465ab6926a7379 100644 (file)
@@ -2726,7 +2726,7 @@ static PyMethodDef listiter_methods[] = {
 
 PyTypeObject PyListIter_Type = {
        PyVarObject_HEAD_INIT(&PyType_Type, 0)
-       "listiterator",                         /* tp_name */
+       "list_iterator",                        /* tp_name */
        sizeof(listiterobject),                 /* tp_basicsize */
        0,                                      /* tp_itemsize */
        /* methods */
@@ -2848,7 +2848,7 @@ static PySequenceMethods listreviter_as_sequence = {
 
 PyTypeObject PyListRevIter_Type = {
        PyVarObject_HEAD_INIT(&PyType_Type, 0)
-       "listreverseiterator",                  /* tp_name */
+       "list_reverseiterator",                 /* tp_name */
        sizeof(listreviterobject),              /* tp_basicsize */
        0,                                      /* tp_itemsize */
        /* methods */
index 0bb3e7b0ae5f182b0e1d486aabcbb7582d0c6959..d1c959a1bf589b20fe9b0c2d39f437ce0aa45758 100644 (file)
@@ -369,7 +369,7 @@ static PyMethodDef rangeiter_methods[] = {
 
 PyTypeObject Pyrangeiter_Type = {
        PyVarObject_HEAD_INIT(&PyType_Type, 0)
-       "rangeiterator",                        /* tp_name */
+       "range_iterator",                        /* tp_name */
        sizeof(rangeiterobject),                /* tp_basicsize */
        0,                                      /* tp_itemsize */
        /* methods */
index d85a28d386b5cccba1d735658241757895e6b74a..e4e7780e8de31518c2b455b817ddf733fdb73c15 100644 (file)
@@ -851,7 +851,7 @@ fail:
 
 static PyTypeObject PySetIter_Type = {
        PyVarObject_HEAD_INIT(&PyType_Type, 0)
-       "setiterator",                          /* tp_name */
+       "set_iterator",                         /* tp_name */
        sizeof(setiterobject),                  /* tp_basicsize */
        0,                                      /* tp_itemsize */
        /* methods */
index 205576fef4ec78d4ffe286b9a4b4b982e25ef16c..26349ef11de1871abd572a9d7cd4244d9ffb8e6a 100644 (file)
@@ -9263,7 +9263,7 @@ static PyMethodDef unicodeiter_methods[] = {
 
 PyTypeObject PyUnicodeIter_Type = {
        PyVarObject_HEAD_INIT(&PyType_Type, 0)
-       "unicode_iterator",                     /* tp_name */
+       "str_iterator",                 /* tp_name */
        sizeof(unicodeiterobject),              /* tp_basicsize */
        0,                                      /* tp_itemsize */
        /* methods */