1.1 --- a/ItemSupport.py Mon Feb 18 18:50:02 2013 +0100
1.2 +++ b/ItemSupport.py Sun Mar 10 01:16:50 2013 +0100
1.3 @@ -149,20 +149,48 @@
1.4
1.5 "An iterator over items in a store."
1.6
1.7 - def __init__(self, store):
1.8 + def __init__(self, store, direction=1):
1.9 self.store = store
1.10 - self._next = -1
1.11 + self.direction = direction
1.12 + self.reset()
1.13 +
1.14 + def reset(self):
1.15 + if self.direction == 1:
1.16 + self._next = 0
1.17 + self.final = len(self.store)
1.18 + else:
1.19 + self._next = len(self.store) - 1
1.20 + self.final = 0
1.21 +
1.22 + def more(self):
1.23 + if self.direction == 1:
1.24 + return self._next < self.final
1.25 + else:
1.26 + return self._next >= self.final
1.27 +
1.28 + def get_next(self):
1.29 + next = self._next
1.30 + self._next += self.direction
1.31 + return next
1.32
1.33 def next(self):
1.34 - final = len(self.store)
1.35 -
1.36 - while self._next < final:
1.37 - self._next += 1
1.38 + while self.more():
1.39 try:
1.40 - return self.store[self._next]
1.41 + return self.store[self.get_next()]
1.42 except IndexError:
1.43 pass
1.44
1.45 raise StopIteration
1.46
1.47 + def reverse(self):
1.48 + self.direction = -self.direction
1.49 + self.reset()
1.50 +
1.51 + def reversed(self):
1.52 + self.reverse()
1.53 + return self
1.54 +
1.55 + def __iter__(self):
1.56 + return self
1.57 +
1.58 # vim: tabstop=4 expandtab shiftwidth=4