Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / MostlySingletonList.cs / 1 / 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. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CustomGrammar.cs
- FileLevelControlBuilderAttribute.cs
- ListViewDeleteEventArgs.cs
- ISO2022Encoding.cs
- ConnectionStringSettingsCollection.cs
- PermissionSet.cs
- DataSourceHelper.cs
- CreateUserErrorEventArgs.cs
- TableLayoutPanel.cs
- BigIntegerStorage.cs
- Line.cs
- OperatorExpressions.cs
- StorageInfo.cs
- VisemeEventArgs.cs
- MonikerHelper.cs
- ExclusiveHandle.cs
- WebAdminConfigurationHelper.cs
- PriorityChain.cs
- ApplicationFileCodeDomTreeGenerator.cs
- HttpResponseInternalBase.cs
- HttpApplication.cs
- CollectionDataContract.cs
- TextEvent.cs
- ToolStripCodeDomSerializer.cs
- HttpWebRequest.cs
- TextRangeEditLists.cs
- XsltOutput.cs
- StsCommunicationException.cs
- EvidenceTypeDescriptor.cs
- InputLanguageProfileNotifySink.cs
- ImpersonateTokenRef.cs
- Italic.cs
- StreamUpdate.cs
- PropertyBuilder.cs
- ValidatorCollection.cs
- RefreshEventArgs.cs
- HttpAsyncResult.cs
- ExpressionNormalizer.cs
- ControlDesigner.cs
- MappingItemCollection.cs
- SpeakCompletedEventArgs.cs
- BitmapEffectOutputConnector.cs
- HashMembershipCondition.cs
- followingquery.cs
- FontWeightConverter.cs
- UnsafeNativeMethods.cs
- DoubleLinkListEnumerator.cs
- Utils.cs
- ConditionalAttribute.cs
- SingleObjectCollection.cs
- DiscoveryDocumentLinksPattern.cs
- safePerfProviderHandle.cs
- Overlapped.cs
- CollectionViewProxy.cs
- Item.cs
- PrimaryKeyTypeConverter.cs
- CounterSampleCalculator.cs
- TopClause.cs
- StringAttributeCollection.cs
- GenericXmlSecurityTokenAuthenticator.cs
- WebControlAdapter.cs
- HttpCapabilitiesSectionHandler.cs
- PersonalizationState.cs
- BitmapEffect.cs
- complextypematerializer.cs
- AppDomainManager.cs
- RegexGroup.cs
- TypeTypeConverter.cs
- DragStartedEventArgs.cs
- ASCIIEncoding.cs
- InternalsVisibleToAttribute.cs
- XmlDictionary.cs
- Vector3DCollection.cs
- StateValidator.cs
- DetailsViewRowCollection.cs
- XhtmlTextWriter.cs
- ProxyDataContractResolver.cs
- ParagraphVisual.cs
- ZipIOExtraFieldZip64Element.cs
- ExitEventArgs.cs
- SecondaryViewProvider.cs
- MbpInfo.cs
- InterleavedZipPartStream.cs
- MemberRelationshipService.cs
- Touch.cs
- Geometry.cs
- _UriSyntax.cs
- OracleTimeSpan.cs
- GreenMethods.cs
- ImageAnimator.cs
- DbConnectionPoolGroupProviderInfo.cs
- _NegoStream.cs
- HandlerFactoryCache.cs
- ScriptManager.cs
- Vector3DAnimation.cs
- ClientRoleProvider.cs
- safex509handles.cs
- DebugHandleTracker.cs
- XmlSerializationWriter.cs
- AssemblySettingAttributes.cs