File: System\Linq\Parallel\QueryOperators\ListQueryResults.cs
Web Access
Project: src\src\libraries\System.Linq.Parallel\src\System.Linq.Parallel.csproj (System.Linq.Parallel)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
//
// ListQueryResults.cs
//
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 
using System.Collections.Generic;
 
namespace System.Linq.Parallel
{
    /// <summary>
    /// Class to represent an IList{T} as QueryResults{T}
    /// </summary>
    /// <typeparam name="T"></typeparam>
    internal sealed class ListQueryResults<T> : QueryResults<T>
    {
        private readonly IList<T> _source;
        private readonly int _partitionCount;
        private readonly bool _useStriping;
 
        internal ListQueryResults(IList<T> source, int partitionCount, bool useStriping)
        {
            _source = source;
            _partitionCount = partitionCount;
            _useStriping = useStriping;
        }
 
        internal override void GivePartitionedStream(IPartitionedStreamRecipient<T> recipient)
        {
            PartitionedStream<T, int> partitionedStream = GetPartitionedStream();
            recipient.Receive<int>(partitionedStream);
        }
 
        internal override bool IsIndexible
        {
            get { return true; }
        }
 
        internal override int ElementsCount
        {
            get { return _source.Count; }
        }
 
        internal override T GetElement(int index)
        {
            return _source[index];
        }
 
        internal PartitionedStream<T, int> GetPartitionedStream()
        {
            return ExchangeUtilities.PartitionDataSource(_source, _partitionCount, _useStriping);
        }
    }
}