Factor out common recv code; throw QueueEmpty exception in get_nowait

This commit is contained in:
Alex Forencich
2021-03-21 21:02:44 -07:00
parent f52f6dbe33
commit 5c6510faea
4 changed files with 36 additions and 40 deletions

View File

@@ -344,23 +344,22 @@ class GmiiSink(Reset):
self._init_reset(reset, reset_active_level) self._init_reset(reset, reset_active_level)
async def recv(self, compact=True): def _recv(self, frame, compact=True):
frame = await self.queue.get()
if self.queue.empty(): if self.queue.empty():
self.active_event.clear() self.active_event.clear()
self.queue_occupancy_bytes -= len(frame) self.queue_occupancy_bytes -= len(frame)
self.queue_occupancy_frames -= 1 self.queue_occupancy_frames -= 1
if compact:
frame.compact()
return frame return frame
async def recv(self, compact=True):
frame = await self.queue.get()
return self._recv(frame, compact)
def recv_nowait(self, compact=True): def recv_nowait(self, compact=True):
if not self.queue.empty():
frame = self.queue.get_nowait() frame = self.queue.get_nowait()
if self.queue.empty(): return self._recv(frame, compact)
self.active_event.clear()
self.queue_occupancy_bytes -= len(frame)
self.queue_occupancy_frames -= 1
return frame
return None
def count(self): def count(self):
return self.queue.qsize() return self.queue.qsize()

View File

@@ -238,23 +238,22 @@ class MiiSink(Reset):
self._init_reset(reset, reset_active_level) self._init_reset(reset, reset_active_level)
async def recv(self, compact=True): def _recv(self, frame, compact=True):
frame = await self.queue.get()
if self.queue.empty(): if self.queue.empty():
self.active_event.clear() self.active_event.clear()
self.queue_occupancy_bytes -= len(frame) self.queue_occupancy_bytes -= len(frame)
self.queue_occupancy_frames -= 1 self.queue_occupancy_frames -= 1
if compact:
frame.compact()
return frame return frame
async def recv(self, compact=True):
frame = await self.queue.get()
return self._recv(frame, compact)
def recv_nowait(self, compact=True): def recv_nowait(self, compact=True):
if not self.queue.empty():
frame = self.queue.get_nowait() frame = self.queue.get_nowait()
if self.queue.empty(): return self._recv(frame, compact)
self.active_event.clear()
self.queue_occupancy_bytes -= len(frame)
self.queue_occupancy_frames -= 1
return frame
return None
def count(self): def count(self):
return self.queue.qsize() return self.queue.qsize()

View File

@@ -252,23 +252,22 @@ class RgmiiSink(Reset):
self._init_reset(reset, reset_active_level) self._init_reset(reset, reset_active_level)
async def recv(self, compact=True): def _recv(self, frame, compact=True):
frame = await self.queue.get()
if self.queue.empty(): if self.queue.empty():
self.active_event.clear() self.active_event.clear()
self.queue_occupancy_bytes -= len(frame) self.queue_occupancy_bytes -= len(frame)
self.queue_occupancy_frames -= 1 self.queue_occupancy_frames -= 1
if compact:
frame.compact()
return frame return frame
async def recv(self, compact=True):
frame = await self.queue.get()
return self._recv(frame, compact)
def recv_nowait(self, compact=True): def recv_nowait(self, compact=True):
if not self.queue.empty():
frame = self.queue.get_nowait() frame = self.queue.get_nowait()
if self.queue.empty(): return self._recv(frame, compact)
self.active_event.clear()
self.queue_occupancy_bytes -= len(frame)
self.queue_occupancy_frames -= 1
return frame
return None
def count(self): def count(self):
return self.queue.qsize() return self.queue.qsize()

View File

@@ -366,23 +366,22 @@ class XgmiiSink(Reset):
self._init_reset(reset, reset_active_level) self._init_reset(reset, reset_active_level)
async def recv(self, compact=True): def _recv(self, frame, compact=True):
frame = await self.queue.get()
if self.queue.empty(): if self.queue.empty():
self.active_event.clear() self.active_event.clear()
self.queue_occupancy_bytes -= len(frame) self.queue_occupancy_bytes -= len(frame)
self.queue_occupancy_frames -= 1 self.queue_occupancy_frames -= 1
if compact:
frame.compact()
return frame return frame
async def recv(self, compact=True):
frame = await self.queue.get()
return self._recv(frame, compact)
def recv_nowait(self, compact=True): def recv_nowait(self, compact=True):
if not self.queue.empty():
frame = self.queue.get_nowait() frame = self.queue.get_nowait()
if self.queue.empty(): return self._recv(frame, compact)
self.active_event.clear()
self.queue_occupancy_bytes -= len(frame)
self.queue_occupancy_frames -= 1
return frame
return None
def count(self): def count(self):
return self.queue.qsize() return self.queue.qsize()