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