implement a method to replace chain members

This commit is contained in:
Jakob Ketterl
2021-07-20 00:44:41 +02:00
parent eb76ec4a9f
commit be093b8b05
4 changed files with 41 additions and 39 deletions

View File

@@ -1,14 +1,11 @@
from pycsdr.modules import Buffer
import logging
logger = logging.getLogger(__name__)
class Chain:
def __init__(self, *workers):
self.input = None
self.output = None
self.workers = workers
self.workers = list(workers)
for i in range(1, len(self.workers)):
self._connect(self.workers[i - 1], self.workers[i])
@@ -55,6 +52,35 @@ class Chain:
else:
return self.input.getOutputFormat()
def replace(self, index, newWorker):
if index >= len(self.workers):
raise IndexError("Index {} does not exist".format(index))
self.workers[index].stop()
self.workers[index] = newWorker
if index == 0:
newWorker.setInput(self.input)
else:
previousWorker = self.workers[index - 1]
if isinstance(previousWorker, Chain):
newWorker.setInput(previousWorker.getOutput())
else:
buffer = Buffer(previousWorker.getOutputFormat())
previousWorker.setOutput(buffer)
newWorker.setInput(buffer)
if index < len(self.workers) - 1:
nextWorker = self.workers[index + 1]
if isinstance(newWorker, Chain):
nextWorker.setInput(newWorker.getOutput())
else:
buffer = Buffer(newWorker.getOutputFormat())
newWorker.setOutput(buffer)
nextWorker.setInput(buffer)
else:
newWorker.setOutput(self.output)
def pump(self, write):
output = self.getOutput()