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
- dataobject.cs
- TypeExtensionSerializer.cs
- FileChangesMonitor.cs
- EventData.cs
- ContentFileHelper.cs
- Region.cs
- DataGridViewComboBoxColumn.cs
- Component.cs
- TraceSwitch.cs
- Permission.cs
- DiscardableAttribute.cs
- DoubleLinkListEnumerator.cs
- DeclarativeExpressionConditionDeclaration.cs
- ByteAnimationBase.cs
- TableAdapterManagerHelper.cs
- ConfigurationLocationCollection.cs
- MemberInfoSerializationHolder.cs
- ListViewGroup.cs
- AttributeConverter.cs
- DateTimeParse.cs
- TypeConverters.cs
- ConfigXmlElement.cs
- HtmlProps.cs
- Atom10FormatterFactory.cs
- WindowsStreamSecurityUpgradeProvider.cs
- BrushValueSerializer.cs
- SqlNodeTypeOperators.cs
- IgnoreFlushAndCloseStream.cs
- FrameworkReadOnlyPropertyMetadata.cs
- PermissionAttributes.cs
- SingleStorage.cs
- RoleServiceManager.cs
- VectorAnimation.cs
- ResourceExpression.cs
- SurrogateSelector.cs
- SQLRoleProvider.cs
- RowUpdatedEventArgs.cs
- SerializerProvider.cs
- DataPagerField.cs
- UriTemplateMatchException.cs
- HttpHandlersSection.cs
- DefaultValueAttribute.cs
- HttpRuntimeSection.cs
- PaginationProgressEventArgs.cs
- ConnectionProviderAttribute.cs
- ChtmlFormAdapter.cs
- SpeechRecognitionEngine.cs
- StateChangeEvent.cs
- SpotLight.cs
- ColorAnimationBase.cs
- AttributeUsageAttribute.cs
- XmlUrlEditor.cs
- ThemeDirectoryCompiler.cs
- WebColorConverter.cs
- IImplicitResourceProvider.cs
- ScrollPattern.cs
- XpsImage.cs
- InfoCardTrace.cs
- ToolboxItemAttribute.cs
- UserControlParser.cs
- FormViewAutoFormat.cs
- DictationGrammar.cs
- PickBranch.cs
- InheritanceContextChangedEventManager.cs
- ConfigXmlDocument.cs
- DataGridViewImageCell.cs
- LineServices.cs
- SqlConnection.cs
- ServicesUtilities.cs
- CheckBoxPopupAdapter.cs
- PersonalizationStateInfo.cs
- StorageMappingItemCollection.cs
- PhoneCall.cs
- DebuggerService.cs
- HtmlLinkAdapter.cs
- PointValueSerializer.cs
- MultitargetUtil.cs
- Buffer.cs
- FormsIdentity.cs
- VisualTreeHelper.cs
- ToolStripProgressBar.cs
- TransactionChannel.cs
- LogicalExpr.cs
- ServiceAuthorizationBehavior.cs
- CodeSubDirectory.cs
- DataList.cs
- ArrayWithOffset.cs
- XmlChoiceIdentifierAttribute.cs
- ExpressionEditorAttribute.cs
- baseshape.cs
- SingleTagSectionHandler.cs
- XmlSchemaProviderAttribute.cs
- ToolStripItemCollection.cs
- ProcessModelInfo.cs
- ErrorView.xaml.cs
- Accessible.cs
- TextEditorCharacters.cs
- DataPagerField.cs
- List.cs
- RegisteredExpandoAttribute.cs