< Summary

Information
Class: CounterpointCollective.Dataflow.Encapsulation.EncapsulatedSourceBlock<T>
Assembly: Dataflow.Fluent
File(s): /builds/counterpointcollective/composabledataflowblocks/Source/Dataflow.Fluent/Dataflow/Encapsulation/EncapsulatedSourceBlock.cs
Line coverage
100%
Covered lines: 3
Uncovered lines: 0
Coverable lines: 3
Total lines: 67
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_CompleteSide()100%11100%
get_SourceSide()100%11100%

File(s)

/builds/counterpointcollective/composabledataflowblocks/Source/Dataflow.Fluent/Dataflow/Encapsulation/EncapsulatedSourceBlock.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Diagnostics.CodeAnalysis;
 4using System.Threading.Tasks;
 5using System.Threading.Tasks.Dataflow;
 6
 7namespace CounterpointCollective.Dataflow.Encapsulation
 8{
 9    /// <exclude />
 110    public sealed class EncapsulatedSourceBlock<T>(IDataflowBlock completeSide, ISourceBlock<T> sourceSide) : AbstractEn
 11    {
 112        protected override IDataflowBlock CompleteSide { get; } = completeSide;
 1013        protected override ISourceBlock<T> SourceSide { get; } = sourceSide;
 14    }
 15
 16    /// <exclude />
 17    public abstract class AbstractEncapsulatedSourceBlock<T>: IReceivableSourceBlock<T>
 18    {
 19        protected abstract IDataflowBlock CompleteSide { get; }
 20        protected abstract ISourceBlock<T> SourceSide { get; }
 21
 22
 23        public virtual void Complete()
 24            => CompleteSide.Complete();
 25
 26        public virtual void Fault(Exception exception)
 27            => CompleteSide.Fault(exception);
 28
 29        public virtual Task Completion
 30            => SourceSide.Completion;
 31
 32
 33        public T? ConsumeMessage(DataflowMessageHeader messageHeader, ITargetBlock<T> target, out bool messageConsumed) 
 34            SourceSide.ConsumeMessage(messageHeader, target, out messageConsumed);
 35
 36        public IDisposable LinkTo(ITargetBlock<T> target, DataflowLinkOptions linkOptions)
 37            => SourceSide.LinkToWithCustomCompletion(Completion, target, linkOptions);
 38
 39        public void ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock<T> target)
 40            => SourceSide.ReleaseReservation(messageHeader, target);
 41
 42        public bool ReserveMessage(DataflowMessageHeader messageHeader, ITargetBlock<T> target)
 43            => SourceSide.ReserveMessage(messageHeader, target);
 44
 45        public virtual bool TryReceive(Predicate<T>? filter, [MaybeNullWhen(false)] out T item)
 46        {
 47            if (SourceSide is IReceivableSourceBlock<T> receivableSource)
 48            {
 49                return receivableSource.TryReceive(filter, out item);
 50            }
 51
 52            item = default;
 53            return false;
 54        }
 55
 56        public virtual bool TryReceiveAll([NotNullWhen(true)] out IList<T>? items)
 57        {
 58            if (SourceSide is IReceivableSourceBlock<T> receivableSource)
 59            {
 60                return receivableSource.TryReceiveAll(out items);
 61            }
 62
 63            items = default;
 64            return false;
 65        }
 66    }
 67}