Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Linq / Parallel / Utils / ListChunk.cs / 1305376 / ListChunk.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // // ListChunk.cs // //[....] // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- using System.Collections.Generic; using System.Diagnostics.Contracts; namespace System.Linq.Parallel { ////// A linked list of array chunks. Allows direct access to its arrays. /// ///The elements held within. internal class ListChunk: IEnumerable { internal TInputOutput[] m_chunk; private int m_chunkCount; private ListChunk m_nextChunk; private ListChunk m_tailChunk; /// /// Allocates a new root chunk of a particular size. /// internal ListChunk(int size) { Contract.Assert(size > 0); m_chunk = new TInputOutput[size]; m_chunkCount = 0; m_tailChunk = this; } ////// Adds an element to this chunk. Only ever called on the root. /// /// The new element. internal void Add(TInputOutput e) { ListChunktail = m_tailChunk; if (tail.m_chunkCount == tail.m_chunk.Length) { m_tailChunk = new ListChunk (tail.m_chunkCount * 2); tail = (tail.m_nextChunk = m_tailChunk); } tail.m_chunk[tail.m_chunkCount++] = e; } /// /// The next chunk in the linked chain. /// internal ListChunkNext { get { return m_nextChunk; } } /// /// The number of elements contained within this particular chunk. /// internal int Count { get { return m_chunkCount; } } ////// Fetches an enumerator to walk the elements in all chunks rooted from this one. /// public IEnumeratorGetEnumerator() { ListChunk curr = this; while (curr != null) { for (int i = 0; i < curr.m_chunkCount; i++) { yield return curr.m_chunk[i]; } Contract.Assert(curr.m_chunkCount == curr.m_chunk.Length || curr.m_nextChunk == null); curr = curr.m_nextChunk; } } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return ((IEnumerable )this).GetEnumerator(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // // ListChunk.cs // // [....] // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- using System.Collections.Generic; using System.Diagnostics.Contracts; namespace System.Linq.Parallel { ////// A linked list of array chunks. Allows direct access to its arrays. /// ///The elements held within. internal class ListChunk: IEnumerable { internal TInputOutput[] m_chunk; private int m_chunkCount; private ListChunk m_nextChunk; private ListChunk m_tailChunk; /// /// Allocates a new root chunk of a particular size. /// internal ListChunk(int size) { Contract.Assert(size > 0); m_chunk = new TInputOutput[size]; m_chunkCount = 0; m_tailChunk = this; } ////// Adds an element to this chunk. Only ever called on the root. /// /// The new element. internal void Add(TInputOutput e) { ListChunktail = m_tailChunk; if (tail.m_chunkCount == tail.m_chunk.Length) { m_tailChunk = new ListChunk (tail.m_chunkCount * 2); tail = (tail.m_nextChunk = m_tailChunk); } tail.m_chunk[tail.m_chunkCount++] = e; } /// /// The next chunk in the linked chain. /// internal ListChunkNext { get { return m_nextChunk; } } /// /// The number of elements contained within this particular chunk. /// internal int Count { get { return m_chunkCount; } } ////// Fetches an enumerator to walk the elements in all chunks rooted from this one. /// public IEnumeratorGetEnumerator() { ListChunk curr = this; while (curr != null) { for (int i = 0; i < curr.m_chunkCount; i++) { yield return curr.m_chunk[i]; } Contract.Assert(curr.m_chunkCount == curr.m_chunk.Length || curr.m_nextChunk == null); curr = curr.m_nextChunk; } } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return ((IEnumerable )this).GetEnumerator(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Label.cs
- PasswordRecovery.cs
- HierarchicalDataBoundControlAdapter.cs
- DragDropHelper.cs
- HGlobalSafeHandle.cs
- CompiledRegexRunnerFactory.cs
- JsonDataContract.cs
- _NestedSingleAsyncResult.cs
- Site.cs
- FontUnit.cs
- AVElementHelper.cs
- ParenthesizePropertyNameAttribute.cs
- InvokeMethodActivityDesigner.cs
- NameNode.cs
- GeneralTransform3DTo2D.cs
- DoubleAnimation.cs
- CallTemplateAction.cs
- EventRouteFactory.cs
- HwndStylusInputProvider.cs
- BitmapFrameDecode.cs
- StickyNoteContentControl.cs
- PathSegment.cs
- WebPartZoneCollection.cs
- processwaithandle.cs
- Transform3D.cs
- COM2PictureConverter.cs
- IdnElement.cs
- ApplicationServicesHostFactory.cs
- InvokeMethodActivityDesigner.cs
- precedingsibling.cs
- StrokeNodeData.cs
- LambdaCompiler.cs
- ActivationArguments.cs
- serverconfig.cs
- TimeoutValidationAttribute.cs
- IsolatedStorageFile.cs
- DataListDesigner.cs
- PaintValueEventArgs.cs
- NonceToken.cs
- ControlsConfig.cs
- DecoderFallback.cs
- FieldNameLookup.cs
- MissingSatelliteAssemblyException.cs
- serverconfig.cs
- SiteOfOriginContainer.cs
- Transform.cs
- HttpCachePolicy.cs
- InkPresenter.cs
- MarginsConverter.cs
- EventProviderWriter.cs
- ItemType.cs
- WebPartUtil.cs
- MaterialGroup.cs
- ServiceDescriptionData.cs
- DataSysAttribute.cs
- FaultConverter.cs
- StubHelpers.cs
- SimpleMailWebEventProvider.cs
- ExceptionValidationRule.cs
- ChannelManager.cs
- BamlRecordReader.cs
- OpenTypeLayoutCache.cs
- AssemblyBuilder.cs
- AlignmentYValidation.cs
- EventWaitHandleSecurity.cs
- oledbmetadatacollectionnames.cs
- StrongName.cs
- DesignerAutoFormatStyle.cs
- ToolStripItemRenderEventArgs.cs
- CompatibleIComparer.cs
- Zone.cs
- RequestCachePolicy.cs
- WebPartConnectionsEventArgs.cs
- EtwTrace.cs
- FixedPageProcessor.cs
- InputQueue.cs
- ZipFileInfo.cs
- Point3DCollectionConverter.cs
- TextBoxRenderer.cs
- TextBlockAutomationPeer.cs
- DrawingImage.cs
- PaperSource.cs
- CryptographicAttribute.cs
- GenericEnumerator.cs
- XsdDataContractExporter.cs
- DesignerTransaction.cs
- TemplateModeChangedEventArgs.cs
- GenericRootAutomationPeer.cs
- MonitorWrapper.cs
- PlanCompilerUtil.cs
- AssemblyResolver.cs
- ParameterElement.cs
- AsyncOperation.cs
- COM2Enum.cs
- Vector3DCollection.cs
- KeyboardDevice.cs
- LinqDataSourceDeleteEventArgs.cs
- ColumnMapTranslator.cs
- DataGridViewHeaderCell.cs
- TextWriter.cs