Add OrderedDict class. (trunk r14967)
authorZac Medico <zmedico@gentoo.org>
Thu, 10 Dec 2009 01:03:20 +0000 (01:03 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 10 Dec 2009 01:03:20 +0000 (01:03 -0000)
svn path=/main/branches/2.1.7/; revision=15001

pym/portage/cache/mappings.py

index ed6e19ddd9269c9480fcebf809eff13e3f53be72..2e24a7a8a0a309cf6d5e2bc0fe8e29120b132736 100644 (file)
@@ -188,6 +188,32 @@ class UserDict(MutableMapping):
        if sys.hexversion >= 0x3000000:
                keys = __iter__
 
+class OrderedDict(UserDict):
+
+       def __init__(self, *args, **kwargs):
+               self._order = []
+               UserDict.__init__(self, *args, **kwargs)
+
+       def __iter__(self):
+               return iter(self._order)
+
+       def __setitem__(self, key, item):
+               if key in self:
+                       self._order.remove(key)
+               UserDict.__setitem__(self, key, item)
+               self._order.append(key)
+
+       def __delitem__(self, key):
+               UserDict.__delitem__(self, key)
+               self._order.remove(key)
+
+       def clear(self):
+               UserDict.clear(self)
+               del self._order[:]
+
+       if sys.hexversion >= 0x3000000:
+               keys = __iter__
+
 class ProtectedDict(MutableMapping):
        """
        given an initial dict, this wraps that dict storing changes in a secondary dict, protecting