32 namespace System.Collections.Concurrent
36 bool keysOrderedInEachPartition;
37 bool keysOrderedAcrossPartitions;
41 bool keysOrderedAcrossPartitions,
42 bool keysNormalized) : base ()
44 this.keysOrderedInEachPartition = keysOrderedInEachPartition;
45 this.keysOrderedAcrossPartitions = keysOrderedAcrossPartitions;
46 this.keysNormalized = keysNormalized;
51 foreach (KeyValuePair<long, TSource> item
in GetOrderableDynamicPartitions ())
52 yield
return item.Value;
55 public override IList<IEnumerator<TSource>>
GetPartitions (
int partitionCount)
57 IEnumerator<TSource>[] temp =
new IEnumerator<TSource>[partitionCount];
58 IList<IEnumerator<KeyValuePair<long, TSource>>> enumerators
59 = GetOrderablePartitions (partitionCount);
61 for (
int i = 0; i < enumerators.Count; i++)
62 temp[i] =
new ProxyEnumerator (enumerators[i]);
68 IEnumerator<TSource> GetProxyEnumerator (IEnumerator<KeyValuePair<long, TSource>> enumerator)
70 while (enumerator.MoveNext ())
71 yield
return enumerator.Current.Value;
74 public abstract IList<IEnumerator<KeyValuePair<long, TSource>>> GetOrderablePartitions(
int partitionCount);
78 if (!SupportsDynamicPartitions)
79 throw new NotSupportedException ();
84 public bool KeysOrderedInEachPartition {
86 return keysOrderedInEachPartition;
90 public bool KeysOrderedAcrossPartitions {
92 return keysOrderedAcrossPartitions;
96 public bool KeysNormalized {
98 return keysNormalized;
102 class ProxyEnumerator : IEnumerator<TSource>, IDisposable
104 IEnumerator<KeyValuePair<long, TSource>> internalEnumerator;
106 internal ProxyEnumerator (IEnumerator<KeyValuePair<long, TSource>> enumerator)
108 internalEnumerator = enumerator;
111 public void Dispose ()
113 internalEnumerator.Dispose ();
116 public bool MoveNext ()
118 if (!internalEnumerator.MoveNext ())
121 Current = internalEnumerator.Current.Value;
128 internalEnumerator.Reset ();
131 object IEnumerator.Current {
137 public TSource Current {
virtual IEnumerable< KeyValuePair< long, TSource > > GetOrderableDynamicPartitions()
override IEnumerable< TSource > GetDynamicPartitions()
override IList< IEnumerator< TSource > > GetPartitions(int partitionCount)
OrderablePartitioner(bool keysOrderedInEachPartition, bool keysOrderedAcrossPartitions, bool keysNormalized)