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
- FrameworkElement.cs
- MdImport.cs
- ScriptComponentDescriptor.cs
- SafeTimerHandle.cs
- TransactionManager.cs
- WindowsListViewItemStartMenu.cs
- ReflectionUtil.cs
- BooleanStorage.cs
- CharacterString.cs
- PrintEvent.cs
- Setter.cs
- ReflectionHelper.cs
- Comparer.cs
- RealProxy.cs
- EntityContainerEntitySet.cs
- Transform3DCollection.cs
- DateTimeOffset.cs
- FileClassifier.cs
- ISO2022Encoding.cs
- FormsAuthenticationUser.cs
- ControlIdConverter.cs
- XmlRawWriterWrapper.cs
- Hash.cs
- X509DefaultServiceCertificateElement.cs
- OleCmdHelper.cs
- SHA512Cng.cs
- WsdlEndpointConversionContext.cs
- ProfessionalColorTable.cs
- ControlDesigner.cs
- UIElement3D.cs
- MobilePage.cs
- ResourceReferenceExpressionConverter.cs
- EventArgs.cs
- RemoteCryptoTokenProvider.cs
- SqlNotificationRequest.cs
- ColorMatrix.cs
- XsltQilFactory.cs
- wgx_commands.cs
- AsyncContentLoadedEventArgs.cs
- RequestQueryProcessor.cs
- SectionXmlInfo.cs
- XmlCharCheckingWriter.cs
- WebPartEditorApplyVerb.cs
- OdbcErrorCollection.cs
- MetaForeignKeyColumn.cs
- RegexParser.cs
- DeflateStream.cs
- entityreference_tresulttype.cs
- ObjectNotFoundException.cs
- InvalidProgramException.cs
- ToolStripControlHost.cs
- DtdParser.cs
- SystemResourceKey.cs
- ToolZoneDesigner.cs
- ListViewContainer.cs
- MLangCodePageEncoding.cs
- ProcessThread.cs
- DoubleUtil.cs
- CodeDOMUtility.cs
- DataSourceCacheDurationConverter.cs
- SkewTransform.cs
- HashSetEqualityComparer.cs
- HandlerFactoryWrapper.cs
- TreeNodeEventArgs.cs
- PostBackTrigger.cs
- NamespaceMapping.cs
- cookie.cs
- WeakReferenceList.cs
- StorageBasedPackageProperties.cs
- CacheMemory.cs
- DPCustomTypeDescriptor.cs
- SaveFileDialog.cs
- EntityDataSourceDataSelection.cs
- OleCmdHelper.cs
- StateMachineHistory.cs
- ClientCultureInfo.cs
- RootAction.cs
- DescendentsWalkerBase.cs
- CodeCompileUnit.cs
- RegexCaptureCollection.cs
- DataGridPagerStyle.cs
- OutputCacheSettings.cs
- CultureInfoConverter.cs
- XpsFilter.cs
- DependencyObjectValidator.cs
- InheritanceAttribute.cs
- HuffmanTree.cs
- UnsafeCollabNativeMethods.cs
- HttpProfileBase.cs
- TemplateControl.cs
- SourceFileInfo.cs
- QueryInterceptorAttribute.cs
- ConnectionsZone.cs
- IdentifierCollection.cs
- ZoneMembershipCondition.cs
- SystemInfo.cs
- ViewStateException.cs
- DefaultAssemblyResolver.cs
- HtmlDocument.cs
- TableLayoutSettingsTypeConverter.cs