Example #1
0
        //TODO: create additional varadic Merge methods for allocation free code paths.

        public static Memory <FeedRangeState <TState> > Merge <TState>(IReadOnlyList <ReadOnlyMemory <FeedRangeState <TState> > > ranges)
            where TState : State
        {
            if (ranges == null)
            {
                throw new ArgumentNullException(nameof(ranges));
            }

            int totalLength = 0;

            for (int i = 0; i < ranges.Count; i++)
            {
                totalLength += ranges[i].Length;
            }

            FeedRangeState <TState>[]         feedRanges     = new FeedRangeState <TState> [totalLength];
            Memory <FeedRangeState <TState> > feedRangesSpan = feedRanges.AsMemory();

            for (int i = 0; i < ranges.Count; i++)
            {
                ReadOnlyMemory <FeedRangeState <TState> > range = ranges[i];
                range.CopyTo(feedRangesSpan);

                feedRangesSpan = feedRangesSpan.Slice(start: range.Length);
            }

            return(feedRanges);
        }
Example #2
0
        public static Memory <FeedRangeState <TState> > Merge <TState>(
            ReadOnlyMemory <FeedRangeState <TState> > first,
            ReadOnlyMemory <FeedRangeState <TState> > second,
            ReadOnlyMemory <FeedRangeState <TState> > third)
            where TState : State
        {
            FeedRangeState <TState>[]         feedRanges       = new FeedRangeState <TState> [first.Length + second.Length + third.Length];
            Memory <FeedRangeState <TState> > feedRangesMemory = feedRanges.AsMemory();

            first.CopyTo(feedRangesMemory);
            feedRangesMemory = feedRangesMemory.Slice(start: first.Length);

            second.CopyTo(feedRangesMemory);
            feedRangesMemory = feedRangesMemory.Slice(start: second.Length);

            third.CopyTo(feedRangesMemory);
            feedRangesMemory = feedRangesMemory.Slice(start: third.Length);

            return(feedRanges);
        }