Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. class Deq( object ):
  2. def __init__(self, size=64):
  3. self._size = size + 1
  4. self.deq = [None for _ in xrange(self._size)]
  5. self.head = self._size - 1
  6. self.tail = 0
  7.  
  8. def size(self):
  9. return self._size - 1
  10.  
  11. def __getitem__(self, idx):
  12. return self.deq[idx]
  13.  
  14. def __setitem__(self, idx, val):
  15. self.deq[idx] = val
  16.  
  17. def pop(self):
  18. tail = (self.tail - 1) % self._size
  19. val, self.tail = self._pop(tail, self.head, self.tail)
  20. return val
  21.  
  22. def poph(self):
  23. head = (self.head + 1) % self._size
  24. val, self.head = self._pop(head, self.tail, self.head)
  25. return val
  26.  
  27. def _pop(self, new, check, old):
  28. try:
  29. assert (new != check)
  30. return self[new], new
  31. except:
  32. return None, old
  33.  
  34. def check(fn):
  35. def _checksize(self, val):
  36. try:
  37. assert(self.head != self.tail)
  38. except:
  39. self._refresh(self._resize(self.size()))
  40.  
  41. return fn(self, val)
  42.  
  43. return _checksize
  44.  
  45. @check
  46. def push(self, val):
  47. self[self.tail] = val
  48. self.tail = (self.tail + 1) % self._size
  49.  
  50. @check
  51. def pushh(self, val):
  52. self[self.head] = val
  53. self.head = (self.head - 1) % self._size
  54.  
  55.  
  56. def _resize(self, size):
  57. deq = Deq(2*size)
  58. val = self.poph()
  59.  
  60. while val != None:
  61. deq.push(val)
  62. val = self.poph()
  63.  
  64. return deq
  65.  
  66. def _refresh(self, deq):
  67. self._size = deq._size
  68. self.head = deq.head
  69. self.tail = deq.tail
  70. self.deq = deq.deq
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement