1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| class EmptyQueueError(Exception): pass
class FullQueueError(Exception): pass
class Queue(object):
def __init__(self, size):
self._size = size
self._data = []
self.__class__ = EmptyQueue
def add(self, value):
self._data.append(value)
def get(self):
return self._data.pop(0)
class EmptyQueue(Queue):
def add(self, value):
Queue.add(self, value)
self.__class__ = PartialyFilledQueue
def get(self):
raise EmptyQueueError()
class PartialyFilledQueue(Queue):
def add(self, value):
Queue.add(self, value)
if len(self._data) == self._size:
self.__class__ = FullQueue
def get(self):
value = Queue.get(self)
if len(self._data) == 0:
self.__class__ = EmptyQueue
return value
class FullQueue(Queue):
def add(self, value):
raise FullQueueError()
def get(self):
value = Queue.get(self)
self.__class__ = PartialyFilledQueue
return value |