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
- XmlILAnnotation.cs
- PolyLineSegmentFigureLogic.cs
- TextAnchor.cs
- DoubleAnimationClockResource.cs
- InsufficientMemoryException.cs
- SqlDependencyUtils.cs
- FacetDescription.cs
- LocationSectionRecord.cs
- WebConfigurationManager.cs
- ErrorView.xaml.cs
- PresentationSource.cs
- RegexRunnerFactory.cs
- DbException.cs
- Attributes.cs
- safesecurityhelperavalon.cs
- ChildrenQuery.cs
- WebBrowsableAttribute.cs
- DictionarySurrogate.cs
- HttpCookie.cs
- TextEvent.cs
- ServiceManager.cs
- DispatcherOperation.cs
- FormsAuthenticationModule.cs
- followingsibling.cs
- PolicyStatement.cs
- DataControlCommands.cs
- DataListGeneralPage.cs
- Stroke.cs
- DisplayMemberTemplateSelector.cs
- InfoCardUIAgent.cs
- TraversalRequest.cs
- PointLightBase.cs
- CodeCatchClause.cs
- SafeCoTaskMem.cs
- PagePropertiesChangingEventArgs.cs
- Viewport3DVisual.cs
- TextTreeRootTextBlock.cs
- InvalidateEvent.cs
- AssemblyInfo.cs
- NullRuntimeConfig.cs
- QueryAccessibilityHelpEvent.cs
- VisualStyleRenderer.cs
- Currency.cs
- DSASignatureDeformatter.cs
- ChildDocumentBlock.cs
- URL.cs
- DesignerVerb.cs
- RestClientProxyHandler.cs
- PeerNameRecord.cs
- VisualStyleInformation.cs
- UdpDiscoveryEndpointElement.cs
- EncryptedPackage.cs
- DataGridCommandEventArgs.cs
- Certificate.cs
- ObjectResult.cs
- XmlSiteMapProvider.cs
- FamilyMapCollection.cs
- ViewBox.cs
- HttpWebRequest.cs
- DataGridViewTopLeftHeaderCell.cs
- CircleHotSpot.cs
- XmlResolver.cs
- InstanceNotReadyException.cs
- HistoryEventArgs.cs
- log.cs
- FixedPageAutomationPeer.cs
- DateTimeConstantAttribute.cs
- IconConverter.cs
- EntityDataSourceQueryBuilder.cs
- ComPlusContractBehavior.cs
- DesignSurfaceServiceContainer.cs
- querybuilder.cs
- CodeIdentifier.cs
- TextFormatterHost.cs
- SqlBuilder.cs
- ImageKeyConverter.cs
- RoutedUICommand.cs
- AuthenticationManager.cs
- HashSet.cs
- _ScatterGatherBuffers.cs
- WizardStepBase.cs
- PackageRelationship.cs
- HwndKeyboardInputProvider.cs
- ObjectReaderCompiler.cs
- _BasicClient.cs
- UpdateEventArgs.cs
- SortKey.cs
- ColorInterpolationModeValidation.cs
- RtfFormatStack.cs
- AdornedElementPlaceholder.cs
- DebugView.cs
- RadioButtonList.cs
- AncillaryOps.cs
- ComponentEditorPage.cs
- CalendarDay.cs
- ButtonFieldBase.cs
- SymbolMethod.cs
- TextSelectionHelper.cs
- InfoCardMetadataExchangeClient.cs
- Publisher.cs