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
- XmlSerializerNamespaces.cs
- VisualStyleElement.cs
- RequestCacheEntry.cs
- DbConnectionStringCommon.cs
- ProfileModule.cs
- CryptoApi.cs
- Rss20ItemFormatter.cs
- Sql8ExpressionRewriter.cs
- InfoCardSymmetricCrypto.cs
- GraphicsPath.cs
- Journaling.cs
- FilterEventArgs.cs
- XmlExpressionDumper.cs
- EditorZoneDesigner.cs
- BufferedMessageWriter.cs
- HttpWebResponse.cs
- GetWorkflowTree.cs
- TraversalRequest.cs
- UriTemplateLiteralQueryValue.cs
- CrossSiteScriptingValidation.cs
- EmptyStringExpandableObjectConverter.cs
- ReliableSession.cs
- MemoryMappedView.cs
- TreeNodeEventArgs.cs
- WebPartUtil.cs
- DocumentProperties.cs
- AppDomainManager.cs
- StringStorage.cs
- BoundPropertyEntry.cs
- ProxyElement.cs
- EpmSyndicationContentSerializer.cs
- InputReportEventArgs.cs
- IconBitmapDecoder.cs
- MissingSatelliteAssemblyException.cs
- SafeWaitHandle.cs
- CharKeyFrameCollection.cs
- DynamicUpdateCommand.cs
- DataGridColumnCollectionEditor.cs
- SerializationHelper.cs
- ImageButton.cs
- LocalServiceSecuritySettings.cs
- ScriptHandlerFactory.cs
- XmlDataSource.cs
- EdmType.cs
- XmlParserContext.cs
- ExtenderProviderService.cs
- CommandBinding.cs
- RelatedImageListAttribute.cs
- ToolStripArrowRenderEventArgs.cs
- StringUtil.cs
- MethodBuilder.cs
- ProviderSettingsCollection.cs
- ValidationHelpers.cs
- TdsParserSessionPool.cs
- PasswordRecovery.cs
- ProtectedProviderSettings.cs
- CompositeFontFamily.cs
- DecoderBestFitFallback.cs
- DataColumnPropertyDescriptor.cs
- ProfileSection.cs
- PageThemeParser.cs
- AttributeAction.cs
- FaultDesigner.cs
- ListControlActionList.cs
- TextDataBindingHandler.cs
- HttpChannelHelpers.cs
- ValueSerializerAttribute.cs
- ControlSerializer.cs
- MultiPageTextView.cs
- DropShadowEffect.cs
- SmtpClient.cs
- IriParsingElement.cs
- ZoneIdentityPermission.cs
- MemberRelationshipService.cs
- CryptoConfig.cs
- StringExpressionSet.cs
- DateTimeParse.cs
- AnonymousIdentificationSection.cs
- LinqDataSourceHelper.cs
- OracleCommandSet.cs
- MinimizableAttributeTypeConverter.cs
- SQLString.cs
- InvokeGenerator.cs
- Comparer.cs
- DecimalKeyFrameCollection.cs
- PersistenceParticipant.cs
- DataGridViewAdvancedBorderStyle.cs
- NotifyParentPropertyAttribute.cs
- ReadContentAsBinaryHelper.cs
- Cursor.cs
- DataGridColumnHeadersPresenter.cs
- LiteralControl.cs
- bindurihelper.cs
- PolygonHotSpot.cs
- MetadataException.cs
- EntityObject.cs
- Helpers.cs
- InlineCollection.cs
- ImpersonateTokenRef.cs
- IPPacketInformation.cs