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
- DataGridViewCellLinkedList.cs
- BooleanConverter.cs
- GenericRootAutomationPeer.cs
- DataGridViewComboBoxColumn.cs
- DataGridViewToolTip.cs
- FileCodeGroup.cs
- Subtree.cs
- ImplicitInputBrush.cs
- ClientSponsor.cs
- RegexCaptureCollection.cs
- RuleAction.cs
- ControlValuePropertyAttribute.cs
- StoreItemCollection.cs
- OpenTypeLayoutCache.cs
- EmptyEnumerator.cs
- SystemUdpStatistics.cs
- _Events.cs
- RetriableClipboard.cs
- TextureBrush.cs
- EventArgs.cs
- WebControlsSection.cs
- PeerServiceMessageContracts.cs
- SamlAdvice.cs
- IndexedString.cs
- Int32Rect.cs
- EventData.cs
- SliderAutomationPeer.cs
- SqlNotificationEventArgs.cs
- BooleanToVisibilityConverter.cs
- PageHandlerFactory.cs
- odbcmetadatafactory.cs
- PerformanceCounterNameAttribute.cs
- Int32Rect.cs
- RegexGroup.cs
- GPRECT.cs
- StrokeNode.cs
- RuleRefElement.cs
- DbParameterHelper.cs
- InternalConfigRoot.cs
- ParameterSubsegment.cs
- TypeDefinition.cs
- NotifyCollectionChangedEventArgs.cs
- WebPartEditVerb.cs
- IList.cs
- X509SecurityTokenAuthenticator.cs
- SessionStateContainer.cs
- NumericUpDownAcceleration.cs
- AtomParser.cs
- ObjectSpanRewriter.cs
- RuleAction.cs
- CalendarDateRangeChangingEventArgs.cs
- DataTableMappingCollection.cs
- Currency.cs
- DataFormat.cs
- HttpValueCollection.cs
- MultipartIdentifier.cs
- SystemColorTracker.cs
- TemplateDefinition.cs
- TdsParserHelperClasses.cs
- XmlElementAttribute.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- PolicyStatement.cs
- DataGridViewColumnCollectionDialog.cs
- ScrollBar.cs
- ItemsPresenter.cs
- SurrogateChar.cs
- NavigationProperty.cs
- WebPartCloseVerb.cs
- DataRecordInternal.cs
- XmlQueryOutput.cs
- GeneralTransform3DTo2DTo3D.cs
- SqlBulkCopyColumnMapping.cs
- ExpressionVisitor.cs
- Application.cs
- EmulateRecognizeCompletedEventArgs.cs
- Highlights.cs
- MulticastNotSupportedException.cs
- CheckoutException.cs
- HttpHeaderCollection.cs
- ParamArrayAttribute.cs
- SystemFonts.cs
- TagPrefixCollection.cs
- DesignTimeTemplateParser.cs
- InvalidPropValue.cs
- GacUtil.cs
- DefaultClaimSet.cs
- ReferenceEqualityComparer.cs
- Literal.cs
- _SslStream.cs
- KoreanLunisolarCalendar.cs
- SafeProcessHandle.cs
- Assert.cs
- UrlMapping.cs
- UrlMappingCollection.cs
- OperationContext.cs
- ReflectionPermission.cs
- ParsedAttributeCollection.cs
- FontClient.cs
- ControlBuilder.cs
- Button.cs