Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / CompMod / System / Collections / Generic / Queue.cs / 1305376 / Queue.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*==============================================================================
**
** Class: Queue
**
** Purpose: A circular-array implementation of a generic queue.
**
** Date: January 28, 2003
**
=============================================================================*/
namespace System.Collections.Generic {
using System;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Security.Permissions;
// A simple Queue of generic objects. Internally it is implemented as a
// circular buffer, so Enqueue can be O(n). Dequeue is O(1).
[DebuggerTypeProxy(typeof(System_QueueDebugView<>))]
[DebuggerDisplay("Count = {Count}")]
#if !SILVERLIGHT
[Serializable()]
#endif
[System.Runtime.InteropServices.ComVisible(false)]
public class Queue : IEnumerable,
System.Collections.ICollection {
private T[] _array;
private int _head; // First valid element in the queue
private int _tail; // Last valid element in the queue
private int _size; // Number of elements.
private int _version;
#if !SILVERLIGHT
[NonSerialized]
#endif
private Object _syncRoot;
private const int _MinimumGrow = 4;
private const int _ShrinkThreshold = 32;
private const int _GrowFactor = 200; // double each time
private const int _DefaultCapacity = 4;
static T[] _emptyArray = new T[0];
// Creates a queue with room for capacity objects. The default initial
// capacity and grow factor are used.
///
public Queue() {
_array = _emptyArray;
}
// Creates a queue with room for capacity objects. The default grow factor
// is used.
//
///
public Queue(int capacity) {
if (capacity < 0)
ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.capacity, ExceptionResource.ArgumentOutOfRange_NeedNonNegNumRequired);
_array = new T[capacity];
_head = 0;
_tail = 0;
_size = 0;
}
// Fills a Queue with the elements of an ICollection. Uses the enumerator
// to get each of the elements.
//
///
public Queue(IEnumerable collection)
{
if (collection == null)
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.collection);
_array = new T[_DefaultCapacity];
_size = 0;
_version = 0;
using(IEnumerator en = collection.GetEnumerator()) {
while(en.MoveNext()) {
Enqueue(en.Current);
}
}
}
///
public int Count {
get { return _size; }
}
///
bool System.Collections.ICollection.IsSynchronized {
get { return false; }
}
Object System.Collections.ICollection.SyncRoot {
get {
if( _syncRoot == null) {
System.Threading.Interlocked.CompareExchange
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MetadataArtifactLoaderCompositeResource.cs
- GridViewColumn.cs
- StrongNameUtility.cs
- ObjectDataSourceFilteringEventArgs.cs
- QilInvokeEarlyBound.cs
- GenericEnumConverter.cs
- ScriptControlDescriptor.cs
- SerialErrors.cs
- TargetException.cs
- Compiler.cs
- ContainerVisual.cs
- SerializerWriterEventHandlers.cs
- PipeSecurity.cs
- SystemResources.cs
- TableLayoutPanel.cs
- SqlBuilder.cs
- MobileUserControlDesigner.cs
- AnnouncementService.cs
- CustomAttributeBuilder.cs
- AutomationIdentifierGuids.cs
- WebUtil.cs
- SelectionHighlightInfo.cs
- StylusTip.cs
- BufferModeSettings.cs
- WeakRefEnumerator.cs
- Debug.cs
- PowerModeChangedEventArgs.cs
- VectorCollectionConverter.cs
- HttpApplicationFactory.cs
- SplineKeyFrames.cs
- HTMLTagNameToTypeMapper.cs
- InputScopeNameConverter.cs
- ThreadAttributes.cs
- BoundField.cs
- FixedTextView.cs
- WebPartUserCapability.cs
- ObjectStateFormatter.cs
- DataControlFieldHeaderCell.cs
- _SecureChannel.cs
- PathData.cs
- StorageModelBuildProvider.cs
- FieldBuilder.cs
- DeriveBytes.cs
- _SslState.cs
- SmtpMail.cs
- CategoryNameCollection.cs
- SequentialUshortCollection.cs
- SerializationEventsCache.cs
- HTTPRemotingHandler.cs
- AnnotationResourceChangedEventArgs.cs
- Terminate.cs
- PrintDialog.cs
- ToolBarTray.cs
- CopyAttributesAction.cs
- CharacterMetrics.cs
- DBDataPermissionAttribute.cs
- CatalogZoneBase.cs
- WindowsFormsHelpers.cs
- ParentUndoUnit.cs
- XmlNavigatorStack.cs
- BamlVersionHeader.cs
- RTTypeWrapper.cs
- UnitySerializationHolder.cs
- WorkflowItemPresenter.cs
- OdbcTransaction.cs
- MessageBox.cs
- Ref.cs
- UserControl.cs
- DataControlCommands.cs
- RootBrowserWindowAutomationPeer.cs
- JpegBitmapEncoder.cs
- ParentQuery.cs
- ImageMap.cs
- HttpRequest.cs
- QuaternionAnimationUsingKeyFrames.cs
- DeploymentSectionCache.cs
- ListSortDescription.cs
- HebrewCalendar.cs
- CompilerCollection.cs
- TransformCryptoHandle.cs
- AnonymousIdentificationSection.cs
- DrawListViewItemEventArgs.cs
- QueryGenerator.cs
- CodeEntryPointMethod.cs
- TransactionTraceIdentifier.cs
- RtfControlWordInfo.cs
- QueryContinueDragEvent.cs
- UpdateCommandGenerator.cs
- SqlDependencyUtils.cs
- RegexGroup.cs
- HtmlSelect.cs
- PersonalizationProviderCollection.cs
- TrayIconDesigner.cs
- Table.cs
- WebPartEditorOkVerb.cs
- OrderByQueryOptionExpression.cs
- DbConnectionPoolCounters.cs
- XPathMessageFilterTable.cs
- LaxModeSecurityHeaderElementInferenceEngine.cs
- BinaryCommonClasses.cs