changeset ee7587e7c71d in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=ee7587e7c71d
description:
        orderdict: Use DictMixin and add orderdict to m5.util

diffstat:

3 files changed, 29 insertions(+), 34 deletions(-)
src/python/SConscript           |    1 
src/python/m5/util/__init__.py  |    1 
src/python/m5/util/orderdict.py |   61 +++++++++++++++++----------------------

diffs (104 lines):

diff -r 312b22c30c16 -r ee7587e7c71d src/python/SConscript
--- a/src/python/SConscript     Sun Aug 16 13:39:59 2009 -0700
+++ b/src/python/SConscript     Sun Aug 16 13:40:00 2009 -0700
@@ -56,6 +56,7 @@
 PySource('m5.util', 'm5/util/jobfile.py')
 PySource('m5.util', 'm5/util/misc.py')
 PySource('m5.util', 'm5/util/multidict.py')
+PySource('m5.util', 'm5/util/orderdict.py')
 
 SwigSource('m5.internal', 'swig/core.i')
 SwigSource('m5.internal', 'swig/debug.i')
diff -r 312b22c30c16 -r ee7587e7c71d src/python/m5/util/__init__.py
--- a/src/python/m5/util/__init__.py    Sun Aug 16 13:39:59 2009 -0700
+++ b/src/python/m5/util/__init__.py    Sun Aug 16 13:40:00 2009 -0700
@@ -29,6 +29,7 @@
 from attrdict import attrdict, optiondict
 from misc import *
 from multidict import multidict
+from orderdict import orderdict
 import jobfile
 
 def print_list(items, indent=4):
diff -r 312b22c30c16 -r ee7587e7c71d src/python/m5/util/orderdict.py
--- a/src/python/m5/util/orderdict.py   Sun Aug 16 13:39:59 2009 -0700
+++ b/src/python/m5/util/orderdict.py   Sun Aug 16 13:40:00 2009 -0700
@@ -28,17 +28,20 @@
 
 __all__ = [ 'orderdict' ]
 
-class orderdict(dict):
-    def __init__(self, d = {}):
-        self._keys = d.keys()
-        super(orderdict, self).__init__(d)
+from UserDict import DictMixin
+
+class orderdict(dict, DictMixin):
+    def __init__(self, *args, **kwargs):
+        if len(args) > 1:
+            raise TypeError("expected at most one argument, got %d" % \
+                            len(args))
+        self._keys = []
+        self.update(*args, **kwargs)
 
     def __setitem__(self, key, item):
+        if key not in self:
+            self._keys.append(key)
         super(orderdict, self).__setitem__(key, item)
-        if not hasattr(self, '_keys'):
-            self._keys = [key,]
-        if key not in self._keys:
-            self._keys.append(key)
 
     def __delitem__(self, key):
         super(orderdict, self).__delitem__(key)
@@ -48,33 +51,23 @@
         super(orderdict, self).clear()
         self._keys = []
 
-    def items(self):
-        for i in self._keys:
-            yield i, self[i]
+    def iterkeys(self):
+        for key in self._keys:
+            yield key
+
+    def itervalues(self):
+        for key in self._keys:
+            yield self[key]
+
+    def iteritems(self):
+        for key in self._keys:
+            yield key, self[key]
 
     def keys(self):
-        return self._keys
-
-    def popitem(self):
-        if len(self._keys) == 0:
-            raise KeyError('dictionary is empty')
-        else:
-            key = self._keys[-1]
-            val = self[key]
-            del self[key]
-            return key, val
-
-    def setdefault(self, key, failobj = None):
-        super(orderdict, self).setdefault(key, failobj)
-        if key not in self._keys:
-            self._keys.append(key)
-
-    def update(self, d):
-        for key in d.keys():
-            if not self.has_key(key):
-                self._keys.append(key)
-        super(orderdict, self).update(d)
+        return self._keys[:]
 
     def values(self):
-        for i in self._keys:
-            yield self[i]
+        return [ self[key] for key in self._keys ]
+
+    def items(self):
+        return [ (self[key],key) for key in self._keys ]
_______________________________________________
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to