summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-12-10 01:03:20 +0000
committerZac Medico <zmedico@gentoo.org>2009-12-10 01:03:20 +0000
commit765f6c1ecf2a06720ba32ff26e8bb3c5e6d08a9d (patch)
tree24b3748751efa01b4e9097ce7739fccff717f500
parent44f9d22c7c87ca6a4357297e8588f150309264b3 (diff)
downloadportage-765f6c1ecf2a06720ba32ff26e8bb3c5e6d08a9d.tar.gz
portage-765f6c1ecf2a06720ba32ff26e8bb3c5e6d08a9d.tar.bz2
portage-765f6c1ecf2a06720ba32ff26e8bb3c5e6d08a9d.zip
Add OrderedDict class. (trunk r14967)
svn path=/main/branches/2.1.7/; revision=15001
-rw-r--r--pym/portage/cache/mappings.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/pym/portage/cache/mappings.py b/pym/portage/cache/mappings.py
index ed6e19ddd..2e24a7a8a 100644
--- a/pym/portage/cache/mappings.py
+++ b/pym/portage/cache/mappings.py
@@ -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