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
- Container.cs
- COM2FontConverter.cs
- BufferedGenericXmlSecurityToken.cs
- PrintPreviewGraphics.cs
- TemplatePagerField.cs
- IteratorFilter.cs
- EllipseGeometry.cs
- SignatureDescription.cs
- RedirectionProxy.cs
- DataGridViewComboBoxEditingControl.cs
- NoPersistHandle.cs
- CodeTypeConstructor.cs
- DrawItemEvent.cs
- ColorInterpolationModeValidation.cs
- RowUpdatedEventArgs.cs
- RecordConverter.cs
- DataAdapter.cs
- ConfigurationPermission.cs
- Monitor.cs
- RelationshipType.cs
- Contracts.cs
- RootNamespaceAttribute.cs
- UInt64.cs
- ManagementEventArgs.cs
- Floater.cs
- MetadataItem_Static.cs
- ToolStripDropDownClosingEventArgs.cs
- InstalledFontCollection.cs
- Quaternion.cs
- DataListItem.cs
- GZipStream.cs
- TypeSource.cs
- ColumnMap.cs
- SecurityContextCookieSerializer.cs
- WindowsListViewSubItem.cs
- documentation.cs
- ShaderEffect.cs
- SpecialNameAttribute.cs
- PerformanceCounters.cs
- PersonalizationProvider.cs
- DataGridViewColumnCollection.cs
- FileRecordSequenceCompletedAsyncResult.cs
- DrawingVisual.cs
- XmlSecureResolver.cs
- TableHeaderCell.cs
- CompareValidator.cs
- DocumentEventArgs.cs
- TdsParserSafeHandles.cs
- SecurityContext.cs
- OrderedDictionaryStateHelper.cs
- FocusChangedEventArgs.cs
- RuleElement.cs
- XmlUtilWriter.cs
- DataGridViewDesigner.cs
- DSASignatureFormatter.cs
- StaticResourceExtension.cs
- EmbossBitmapEffect.cs
- _CookieModule.cs
- InvalidCommandTreeException.cs
- SHA1.cs
- ListBoxChrome.cs
- WmlTextViewAdapter.cs
- DispatcherSynchronizationContext.cs
- SendSecurityHeader.cs
- FrameworkElement.cs
- IdentityHolder.cs
- ListView.cs
- EdmSchemaAttribute.cs
- GridViewEditEventArgs.cs
- HttpResponseInternalBase.cs
- BackStopAuthenticationModule.cs
- CodeEntryPointMethod.cs
- SelectorAutomationPeer.cs
- SoapElementAttribute.cs
- WorkflowServiceBuildProvider.cs
- LayeredChannelFactory.cs
- Control.cs
- OrderPreservingPipeliningSpoolingTask.cs
- XmlArrayAttribute.cs
- InvalidTimeZoneException.cs
- ScalarType.cs
- DesignerWithHeader.cs
- InfiniteIntConverter.cs
- GroupBox.cs
- Quad.cs
- hresults.cs
- IsolatedStorageFileStream.cs
- mediapermission.cs
- ViewDesigner.cs
- CellQuery.cs
- ToolStripSplitStackLayout.cs
- EntityContainerEmitter.cs
- TextDocumentView.cs
- RequestCacheEntry.cs
- VisualCollection.cs
- LinqDataSourceStatusEventArgs.cs
- WebServiceTypeData.cs
- HealthMonitoringSection.cs
- AQNBuilder.cs
- Model3DGroup.cs