The automatic tag forwarding implemented in Block::workInternal was was not working for ASYNC ports since in this case the Block cannot determine a priori if samples will be consumed and consequently cannot perform an early return ahead of the unconditional tag forwarding and consumption.
This change introduces an extension of the ConsumableInputRange, which additionally takes care of consuming all tags up to the first sample of the currently processed chunk.
Also all tag merging logic is moved from Port to Block, while the logic for preparing the consumableInput or producableOutput ranges is moved into the Port.
The automatic tag forwarding implemented in Block::workInternal was was not working for ASYNC ports since in this case the Block cannot determine a priori if samples will be consumed and consequently cannot perform an early return ahead of the unconditional tag forwarding and consumption.
This change introduces an extension of the ConsumableInputRange, which additionally takes care of consuming all tags up to the first sample of the currently processed chunk.
Also all tag merging logic is moved from Port to Block, while the logic for preparing the consumableInput or producableOutput ranges is moved into the Port.