31 lines
873 B
Python
31 lines
873 B
Python
#!/usr/bin/env python3
|
|
|
|
from simlib.defaults import *
|
|
|
|
|
|
class BufferOverflow(Exception):
|
|
pass
|
|
|
|
|
|
class Buffer(object):
|
|
def __init__(self, bufsize=DEFAULT.BUFFER.SIZE):
|
|
self.__bufsize = bufsize
|
|
self.__queue = []
|
|
|
|
def enqueue(self, packet):
|
|
if self.__bufsize != 0:
|
|
if len(self.__queue) == self.__bufsize:
|
|
raise BufferOverflow()
|
|
self.__queue.append(packet)
|
|
|
|
def select(self, condition=DEFAULT.BUFFER.SELECTCONDITION):
|
|
if not callable(condition):
|
|
raise TypeError('condition must be a function')
|
|
if condition.__code__.co_argcount != 1:
|
|
raise TypeError('condition function must take 1 argument')
|
|
for packet in self.__queue:
|
|
if condition(packet):
|
|
return packet
|
|
|
|
def dequeue(self, packet):
|
|
self.__queue.remove(packet)
|