public ReadFeedCrossFeedRangeState Merge(ReadFeedCrossFeedRangeState first)
        {
            Memory <FeedRangeState <ReadFeedState> > mergedRange = CrossFeedRangeStateSplitterAndMerger.Merge <ReadFeedState>(
                this.FeedRangeStates,
                first.FeedRangeStates);

            return(new ReadFeedCrossFeedRangeState(mergedRange));
        }
Beispiel #2
0
        public ChangeFeedCrossFeedRangeState Merge(ChangeFeedCrossFeedRangeState first, ChangeFeedCrossFeedRangeState second)
        {
            Memory <FeedRangeState <ChangeFeedState> > mergedRange = CrossFeedRangeStateSplitterAndMerger.Merge <ChangeFeedState>(
                this.FeedRangeStates,
                first.FeedRangeStates,
                second.FeedRangeStates);

            return(new ChangeFeedCrossFeedRangeState(mergedRange));
        }
        public bool TrySplit(out ReadFeedCrossFeedRangeState first, out ReadFeedCrossFeedRangeState second)
        {
            if (!CrossFeedRangeStateSplitterAndMerger.TrySplit(
                    this.FeedRangeStates,
                    out ReadOnlyMemory <FeedRangeState <ReadFeedState> > firstRange,
                    out ReadOnlyMemory <FeedRangeState <ReadFeedState> > secondRange))
            {
                first  = default;
                second = default;
                return(false);
            }

            first  = new ReadFeedCrossFeedRangeState(firstRange);
            second = new ReadFeedCrossFeedRangeState(secondRange);
            return(true);
        }
        public ReadFeedCrossFeedRangeState Merge(IReadOnlyList <ReadFeedCrossFeedRangeState> readFeedCrossFeedRangeStates)
        {
            List <ReadOnlyMemory <FeedRangeState <ReadFeedState> > > varArgs = new List <ReadOnlyMemory <FeedRangeState <ReadFeedState> > >(1 + readFeedCrossFeedRangeStates.Count)
            {
                this.FeedRangeStates
            };

            foreach (ReadFeedCrossFeedRangeState readFeedCrossFeedRangeState in readFeedCrossFeedRangeStates)
            {
                varArgs.Add(readFeedCrossFeedRangeState.FeedRangeStates);
            }

            Memory <FeedRangeState <ReadFeedState> > mergedRange = CrossFeedRangeStateSplitterAndMerger.Merge <ReadFeedState>(varArgs);

            return(new ReadFeedCrossFeedRangeState(mergedRange));
        }
Beispiel #5
0
        public ChangeFeedCrossFeedRangeState Merge(IReadOnlyList <ChangeFeedCrossFeedRangeState> changeFeedCrossFeedRangeStates)
        {
            List <ReadOnlyMemory <FeedRangeState <ChangeFeedState> > > varArgs = new List <ReadOnlyMemory <FeedRangeState <ChangeFeedState> > >(1 + changeFeedCrossFeedRangeStates.Count)
            {
                this.FeedRangeStates
            };

            foreach (ChangeFeedCrossFeedRangeState changeFeedCrossFeedRangeState in changeFeedCrossFeedRangeStates)
            {
                varArgs.Add(changeFeedCrossFeedRangeState.FeedRangeStates);
            }

            Memory <FeedRangeState <ChangeFeedState> > mergedRange = CrossFeedRangeStateSplitterAndMerger.Merge <ChangeFeedState>(varArgs);

            return(new ChangeFeedCrossFeedRangeState(mergedRange));
        }
        // TODO: Add more varadic split methods.

        public bool TrySplit(
            int numberOfPartitions,
            out List <ReadFeedCrossFeedRangeState> partitions)
        {
            if (!CrossFeedRangeStateSplitterAndMerger.TrySplit(
                    this.FeedRangeStates,
                    numberOfPartitions,
                    out List <ReadOnlyMemory <FeedRangeState <ReadFeedState> > > partitionsAfterSplit))
            {
                partitions = default;
                return(false);
            }

            partitions = new List <ReadFeedCrossFeedRangeState>(partitionsAfterSplit.Count);
            foreach (ReadOnlyMemory <FeedRangeState <ReadFeedState> > partition in partitionsAfterSplit)
            {
                partitions.Add(new ReadFeedCrossFeedRangeState(partition));
            }

            return(true);
        }