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
- BindableTemplateBuilder.cs
- TemplateInstanceAttribute.cs
- FormsAuthenticationUserCollection.cs
- PrivilegedConfigurationManager.cs
- InlineCollection.cs
- AutomationElementIdentifiers.cs
- LazyLoadBehavior.cs
- DataBinding.cs
- ScopedMessagePartSpecification.cs
- URLMembershipCondition.cs
- Form.cs
- StringDictionaryEditor.cs
- dtdvalidator.cs
- CodeDirectoryCompiler.cs
- DrawingGroupDrawingContext.cs
- WebPartCatalogAddVerb.cs
- CursorConverter.cs
- FormViewInsertedEventArgs.cs
- ProgressChangedEventArgs.cs
- GetImportFileNameRequest.cs
- DBConnectionString.cs
- CommonEndpointBehaviorElement.cs
- SqlCrossApplyToCrossJoin.cs
- MergeEnumerator.cs
- ValidationManager.cs
- CopyNamespacesAction.cs
- MergeFailedEvent.cs
- CodeMethodReturnStatement.cs
- RegexGroup.cs
- DataTableClearEvent.cs
- DataGridSortCommandEventArgs.cs
- XPathNodeIterator.cs
- UIElementAutomationPeer.cs
- FontStretch.cs
- HttpWebResponse.cs
- CellNormalizer.cs
- StaticFileHandler.cs
- MemberAccessException.cs
- User.cs
- FilteredAttributeCollection.cs
- BaseParser.cs
- DiscoveryDocument.cs
- NonSerializedAttribute.cs
- TimeStampChecker.cs
- TraceContextRecord.cs
- DataTableCollection.cs
- AuthorizationSection.cs
- UnauthorizedWebPart.cs
- XsltInput.cs
- Vector3DAnimationUsingKeyFrames.cs
- DBSqlParserColumnCollection.cs
- ValidatorAttribute.cs
- CTreeGenerator.cs
- ComplexObject.cs
- WebBrowsableAttribute.cs
- Panel.cs
- XmlSerializerNamespaces.cs
- CultureSpecificStringDictionary.cs
- ValueUnavailableException.cs
- DecimalAnimationBase.cs
- GeneralTransform3D.cs
- TypeDescriptionProvider.cs
- TypeDependencyAttribute.cs
- CodeGenerator.cs
- Pkcs9Attribute.cs
- DataViewSetting.cs
- DataSourceHelper.cs
- WindowsListViewGroupSubsetLink.cs
- RoutingChannelExtension.cs
- BasicViewGenerator.cs
- TreeNodeClickEventArgs.cs
- EdmToObjectNamespaceMap.cs
- CookieProtection.cs
- DataComponentMethodGenerator.cs
- ConvertersCollection.cs
- SmtpTransport.cs
- NewArrayExpression.cs
- MembershipSection.cs
- ZipIOBlockManager.cs
- SecureEnvironment.cs
- PageThemeParser.cs
- SqlBulkCopy.cs
- _FtpControlStream.cs
- BackgroundWorker.cs
- RijndaelManaged.cs
- SspiSafeHandles.cs
- CharEntityEncoderFallback.cs
- FocusTracker.cs
- ResourcesChangeInfo.cs
- Event.cs
- ObjectStorage.cs
- BinaryExpressionHelper.cs
- NGCPageContentSerializerAsync.cs
- HtmlInputPassword.cs
- GatewayDefinition.cs
- ControlAdapter.cs
- StaticExtension.cs
- DefaultBinder.cs
- SafeNativeMethodsCLR.cs
- Clock.cs