Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / MostlySingletonList.cs / 1305376 / MostlySingletonList.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.IdentityModel { using System.Collections.Generic; // Embed this struct in a class to represent a field of that class // that is logically a list, but contains just one item in all but // the rarest of scenarios. When this class must be passed around // in internal APIs, use it as a ref parameter. struct MostlySingletonListwhere T : class { int count; T singleton; List list; public T this[int index] { get { if (this.list == null) { EnsureValidSingletonIndex(index); return this.singleton; } else { return this.list[index]; } } } public int Count { get { return this.count; } } public void Add(T item) { if (this.list == null) { if (this.count == 0) { this.singleton = item; this.count = 1; return; } this.list = new List (); this.list.Add(this.singleton); this.singleton = null; } this.list.Add(item); this.count++; } static bool Compare(T x, T y) { return x == null ? y == null : x.Equals(y); } public bool Contains(T item) { return IndexOf(item) >= 0; } void EnsureValidSingletonIndex(int index) { if (this.count != 1 ) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("count", SR.GetString(SR.ValueMustBeOne))); } if (index != 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("index", SR.GetString(SR.ValueMustBeZero))); } } bool MatchesSingleton(T item) { return this.count == 1 && Compare(this.singleton, item); } public int IndexOf(T item) { if (this.list == null) { return MatchesSingleton(item) ? 0 : -1; } else { return this.list.IndexOf(item); } } public bool Remove(T item) { if (this.list == null) { if (MatchesSingleton(item)) { this.singleton = null; this.count = 0; return true; } else { return false; } } else { bool result = this.list.Remove(item); if (result) { this.count--; } return result; } } public void RemoveAt(int index) { if (this.list == null) { EnsureValidSingletonIndex(index); this.singleton = null; this.count = 0; } else { this.list.RemoveAt(index); this.count--; } } } } // 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
- RadioButtonAutomationPeer.cs
- WebPartDisplayModeEventArgs.cs
- FunctionParameter.cs
- FillRuleValidation.cs
- SmiSettersStream.cs
- Pkcs7Signer.cs
- ClientConfigurationHost.cs
- MLangCodePageEncoding.cs
- PeerResolverMode.cs
- XPathNode.cs
- LambdaCompiler.Statements.cs
- ControlAdapter.cs
- CookieParameter.cs
- ExpressionBuilder.cs
- Int32.cs
- ScrollContentPresenter.cs
- WebConfigurationHostFileChange.cs
- ColumnMap.cs
- DisposableCollectionWrapper.cs
- EntityDataSourceChangingEventArgs.cs
- ViewStateException.cs
- CompilationRelaxations.cs
- XD.cs
- TextDecorationCollection.cs
- MouseBinding.cs
- BooleanExpr.cs
- GetWinFXPath.cs
- MemoryFailPoint.cs
- _WebProxyDataBuilder.cs
- PocoPropertyAccessorStrategy.cs
- DecoderNLS.cs
- ReceiveContent.cs
- PersistChildrenAttribute.cs
- NumericPagerField.cs
- AssociatedControlConverter.cs
- BackgroundFormatInfo.cs
- WorkflowTraceTransfer.cs
- GridView.cs
- ConfigurationPropertyCollection.cs
- TcpServerChannel.cs
- CompiledQuery.cs
- DataBindingCollection.cs
- GridViewRowEventArgs.cs
- Run.cs
- RadioButtonAutomationPeer.cs
- SmiContext.cs
- EdmComplexPropertyAttribute.cs
- Container.cs
- CommonObjectSecurity.cs
- CodeCompiler.cs
- StringAttributeCollection.cs
- UserControlBuildProvider.cs
- StreamSecurityUpgradeInitiatorAsyncResult.cs
- ConstraintEnumerator.cs
- EllipseGeometry.cs
- Operand.cs
- SerialReceived.cs
- TraceContext.cs
- Activator.cs
- Row.cs
- UInt32Storage.cs
- SchemaImporterExtensionsSection.cs
- OutputCacheProfileCollection.cs
- listitem.cs
- ServiceDocumentFormatter.cs
- ExceptionHandlers.cs
- DataBoundLiteralControl.cs
- MultiSelectRootGridEntry.cs
- SoapExtensionImporter.cs
- BrushValueSerializer.cs
- XmlILIndex.cs
- OperationContractAttribute.cs
- CommonXSendMessage.cs
- SelectionPattern.cs
- FontStretchConverter.cs
- SemaphoreFullException.cs
- UniformGrid.cs
- PowerEase.cs
- UnmanagedMemoryStreamWrapper.cs
- CodeGroup.cs
- SchemaElementDecl.cs
- base64Transforms.cs
- ColorMap.cs
- ProfileGroupSettings.cs
- HttpApplicationStateBase.cs
- KeyedByTypeCollection.cs
- XamlBrushSerializer.cs
- BamlLocalizationDictionary.cs
- Keywords.cs
- entitydatasourceentitysetnameconverter.cs
- JavaScriptString.cs
- EventRouteFactory.cs
- Page.cs
- ProcessProtocolHandler.cs
- FileUtil.cs
- WithParamAction.cs
- ScriptHandlerFactory.cs
- SafeBitVector32.cs
- Bold.cs
- HotSpotCollection.cs