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
- FloatUtil.cs
- TextElement.cs
- XPathPatternBuilder.cs
- COM2FontConverter.cs
- StylusEventArgs.cs
- TrustSection.cs
- NotSupportedException.cs
- DoubleAnimationClockResource.cs
- CompareInfo.cs
- DragStartedEventArgs.cs
- PageBuildProvider.cs
- MLangCodePageEncoding.cs
- Point.cs
- DPTypeDescriptorContext.cs
- TextModifier.cs
- SolidColorBrush.cs
- BindingExpression.cs
- ThreadStartException.cs
- FontStretches.cs
- FrameworkElementAutomationPeer.cs
- VersionValidator.cs
- SelfIssuedAuthProofToken.cs
- XmlSchemaSequence.cs
- CodeDomSerializer.cs
- ToolStripDropDown.cs
- DummyDataSource.cs
- ValueOfAction.cs
- Executor.cs
- OleDbPropertySetGuid.cs
- ClientBuildManager.cs
- InspectionWorker.cs
- ResourcePool.cs
- StringUtil.cs
- DocumentViewerHelper.cs
- CounterSet.cs
- CodeParameterDeclarationExpression.cs
- MimeBasePart.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- XmlSchemaDocumentation.cs
- ShadowGlyph.cs
- CookieParameter.cs
- HttpCookie.cs
- TextEditorCopyPaste.cs
- LOSFormatter.cs
- CharConverter.cs
- RemotingSurrogateSelector.cs
- ExtractedStateEntry.cs
- DateTime.cs
- TextServicesDisplayAttribute.cs
- UpdateTranslator.cs
- EdmToObjectNamespaceMap.cs
- BackStopAuthenticationModule.cs
- RewritingProcessor.cs
- PageClientProxyGenerator.cs
- SqlPersonalizationProvider.cs
- LinkTarget.cs
- PackageStore.cs
- StaticResourceExtension.cs
- HostingPreferredMapPath.cs
- Floater.cs
- recordstate.cs
- SqlBinder.cs
- SignedPkcs7.cs
- DockPattern.cs
- ExecutionContext.cs
- CodeSnippetCompileUnit.cs
- ListViewGroupCollectionEditor.cs
- SharedUtils.cs
- ArgumentNullException.cs
- PointAnimationUsingKeyFrames.cs
- CodeSnippetExpression.cs
- PerformanceCounterPermissionAttribute.cs
- SqlNotificationEventArgs.cs
- SafeNativeMethodsMilCoreApi.cs
- SessionStateUtil.cs
- BlurEffect.cs
- OutputCacheModule.cs
- SecurityContext.cs
- ConnectionProviderAttribute.cs
- TrackingMemoryStream.cs
- TypefaceCollection.cs
- RadioButton.cs
- PartEditor.cs
- HwndSourceKeyboardInputSite.cs
- PublisherMembershipCondition.cs
- CodeArgumentReferenceExpression.cs
- HiddenField.cs
- ScrollItemPatternIdentifiers.cs
- DllNotFoundException.cs
- HttpListenerResponse.cs
- CompositionAdorner.cs
- SuppressIldasmAttribute.cs
- DoubleSumAggregationOperator.cs
- PropertyTab.cs
- ScrollableControlDesigner.cs
- PrincipalPermission.cs
- TextParaClient.cs
- DataListItemCollection.cs
- ListViewSortEventArgs.cs
- XamlBrushSerializer.cs