Merge zizzer:/bk/m5 into zeep.eecs.umich.edu:/z/saidi/work/m5
[gem5.git] / python / m5 / smartdict.py
1 from convert import *
2
3 class SmartDict(dict):
4 class Proxy(str):
5 def __int__(self):
6 return int(to_integer(str(self)))
7 def __long__(self):
8 return long(to_integer(str(self)))
9 def __float__(self):
10 return float(to_integer(str(self)))
11 def __nonzero__(self):
12 return to_bool(str(self))
13 def convert(self, other):
14 t = type(other)
15 if t == bool:
16 return bool(self)
17 if t == int:
18 return int(self)
19 if t == long:
20 return long(self)
21 if t == float:
22 return float(self)
23 return str(self)
24 def __lt__(self, other):
25 return self.convert(other) < other
26 def __le__(self, other):
27 return self.convert(other) <= other
28 def __eq__(self, other):
29 return self.convert(other) == other
30 def __ne__(self, other):
31 return self.convert(other) != other
32 def __gt__(self, other):
33 return self.convert(other) > other
34 def __ge__(self, other):
35 return self.convert(other) >= other
36
37 def __add__(self, other):
38 return self.convert(other) + other
39 def __sub__(self, other):
40 return self.convert(other) - other
41 def __mul__(self, other):
42 return self.convert(other) * other
43 def __div__(self, other):
44 return self.convert(other) / other
45 def __truediv__(self, other):
46 return self.convert(other) / other
47
48 def __radd__(self, other):
49 return other + self.convert(other)
50 def __rsub__(self, other):
51 return other - self.convert(other)
52 def __rmul__(self, other):
53 return other * self.convert(other)
54 def __rdiv__(self, other):
55 return other / self.convert(other)
56 def __rtruediv__(self, other):
57 return other / self.convert(other)
58
59
60 def __getitem__(self, key):
61 return self.Proxy(dict.__getitem__(self, key))
62
63 def __setitem__(self, key, item):
64 dict.__setitem__(self, key, str(item))
65
66 def values(self):
67 return [ self.Proxy(v) for v in dict.values(self) ]
68
69 def itervalues(self):
70 for value in dict.itervalues(self):
71 yield self.Proxy(value)
72
73 def items(self):
74 return [ (k, self.Proxy(v)) for k,v in dict.items(self) ]
75
76 def iteritems(self):
77 for key,value in dict.iteritems(self):
78 yield key, self.Proxy(value)
79
80 def get(self, key, default=''):
81 return self.Proxy(dict.get(self, key, str(default)))
82
83 def setdefault(self, key, default=''):
84 return self.Proxy(dict.setdefault(self, key, str(default)))
85