Factor-out constant expressions

This commit is contained in:
Raymond Hettinger 2010-04-03 07:57:09 +00:00
parent 6b96ecb0ab
commit dd2fedcd1c
1 changed files with 6 additions and 14 deletions

View File

@ -47,47 +47,39 @@ class OrderedDict(dict, MutableMapping):
self.__map = {} self.__map = {}
self.update(*args, **kwds) self.update(*args, **kwds)
def __setitem__(self, key, value): def __setitem__(self, key, value, PREV=0, NEXT=1, dict_setitem=dict.__setitem__):
'od.__setitem__(i, y) <==> od[i]=y' 'od.__setitem__(i, y) <==> od[i]=y'
# Setting a new item creates a new link which goes at the end of the linked # Setting a new item creates a new link which goes at the end of the linked
# list, and the inherited dictionary is updated with the new key/value pair. # list, and the inherited dictionary is updated with the new key/value pair.
if key not in self: if key not in self:
PREV = 0
NEXT = 1
root = self.__root root = self.__root
last = root[PREV] last = root[PREV]
last[NEXT] = root[PREV] = self.__map[key] = [last, root, key] last[NEXT] = root[PREV] = self.__map[key] = [last, root, key]
dict.__setitem__(self, key, value) dict_setitem(self, key, value)
def __delitem__(self, key): def __delitem__(self, key, PREV=0, NEXT=1, dict_delitem=dict.__delitem__):
'od.__delitem__(y) <==> del od[y]' 'od.__delitem__(y) <==> del od[y]'
# Deleting an existing item uses self.__map to find the link which is # Deleting an existing item uses self.__map to find the link which is
# then removed by updating the links in the predecessor and successor nodes. # then removed by updating the links in the predecessor and successor nodes.
dict.__delitem__(self, key) dict_delitem(self, key)
PREV = 0
NEXT = 1
link = self.__map.pop(key) link = self.__map.pop(key)
link_prev = link[PREV] link_prev = link[PREV]
link_next = link[NEXT] link_next = link[NEXT]
link_prev[NEXT] = link_next link_prev[NEXT] = link_next
link_next[PREV] = link_prev link_next[PREV] = link_prev
def __iter__(self): def __iter__(self, NEXT=1, KEY=2):
'od.__iter__() <==> iter(od)' 'od.__iter__() <==> iter(od)'
# Traverse the linked list in order. # Traverse the linked list in order.
NEXT = 1
KEY = 2
root = self.__root root = self.__root
curr = root[NEXT] curr = root[NEXT]
while curr is not root: while curr is not root:
yield curr[KEY] yield curr[KEY]
curr = curr[NEXT] curr = curr[NEXT]
def __reversed__(self): def __reversed__(self, PREV=0, KEY=2):
'od.__reversed__() <==> reversed(od)' 'od.__reversed__() <==> reversed(od)'
# Traverse the linked list in reverse order. # Traverse the linked list in reverse order.
PREV = 0
KEY = 2
root = self.__root root = self.__root
curr = root[PREV] curr = root[PREV]
while curr is not root: while curr is not root: