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
- PassportAuthenticationModule.cs
- WindowsIdentity.cs
- Comparer.cs
- HttpResponse.cs
- HttpListenerContext.cs
- SafeNativeMethods.cs
- SevenBitStream.cs
- GradientStop.cs
- XmlName.cs
- securitycriticaldataClass.cs
- HttpStreams.cs
- JournalNavigationScope.cs
- RepeaterCommandEventArgs.cs
- DataBinding.cs
- DataGridViewColumnCollectionEditor.cs
- SurrogateSelector.cs
- ToolStripContainer.cs
- XslTransform.cs
- DocumentOrderQuery.cs
- GridViewColumnCollectionChangedEventArgs.cs
- TypeDescriptionProviderAttribute.cs
- SoapServerProtocol.cs
- ProcessInfo.cs
- TablePattern.cs
- ScaleTransform.cs
- Binding.cs
- CompoundFileDeflateTransform.cs
- ClientFactory.cs
- PlainXmlSerializer.cs
- PerformanceCounterManager.cs
- SmtpClient.cs
- SafeTimerHandle.cs
- Pointer.cs
- BrowserInteropHelper.cs
- Registry.cs
- FactoryId.cs
- util.cs
- _AutoWebProxyScriptEngine.cs
- XmlParserContext.cs
- TypeSystem.cs
- XmlCDATASection.cs
- ImageUrlEditor.cs
- Timer.cs
- NativeMethods.cs
- ProviderConnectionPointCollection.cs
- EditingMode.cs
- String.cs
- SQLGuid.cs
- ConsumerConnectionPointCollection.cs
- Enlistment.cs
- QueryNode.cs
- InputProcessorProfiles.cs
- OutputCacheSection.cs
- Rect.cs
- ItemTypeToolStripMenuItem.cs
- Types.cs
- BuildProviderCollection.cs
- DocumentPageViewAutomationPeer.cs
- DataGridParentRows.cs
- RedirectionProxy.cs
- ToolStripItemClickedEventArgs.cs
- SemanticResultKey.cs
- _SSPISessionCache.cs
- FilteredDataSetHelper.cs
- ClientCultureInfo.cs
- RepeaterItem.cs
- NamespaceList.cs
- RequestCachingSection.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- GeneralTransform3DTo2DTo3D.cs
- TextFragmentEngine.cs
- Int64.cs
- CancelAsyncOperationRequest.cs
- MemberCollection.cs
- WebPartTracker.cs
- ConfigXmlComment.cs
- UriTemplateTable.cs
- FormView.cs
- SpotLight.cs
- CodeDOMUtility.cs
- Int16KeyFrameCollection.cs
- DynamicScriptObject.cs
- Stream.cs
- LinqDataSourceHelper.cs
- ListSortDescriptionCollection.cs
- RegisteredExpandoAttribute.cs
- BitSet.cs
- TraceListeners.cs
- DataException.cs
- ConnectionString.cs
- AsyncSerializedWorker.cs
- MediaPlayer.cs
- PasswordRecovery.cs
- Grid.cs
- DataRecordObjectView.cs
- ModuleBuilderData.cs
- AdjustableArrowCap.cs
- cookiecollection.cs
- UInt64.cs
- Exception.cs