Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------ // 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 MostlySingletonList where 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
- HandleCollector.cs
- PersonalizationDictionary.cs
- CheckBox.cs
- VectorAnimationUsingKeyFrames.cs
- Transform3DGroup.cs
- ToolStripDropDownClosedEventArgs.cs
- PropertyTabAttribute.cs
- StringReader.cs
- BatchStream.cs
- QilDataSource.cs
- ObjectResult.cs
- BaseCollection.cs
- SamlSecurityToken.cs
- lengthconverter.cs
- activationcontext.cs
- recordstatescratchpad.cs
- RedistVersionInfo.cs
- MembershipUser.cs
- VersionedStream.cs
- _NegoState.cs
- XmlCharType.cs
- HttpRequest.cs
- TextServicesCompartmentEventSink.cs
- ObjectViewQueryResultData.cs
- ReferencedAssemblyResolver.cs
- WriteLineDesigner.xaml.cs
- CommonRemoteMemoryBlock.cs
- IItemContainerGenerator.cs
- RectAnimationBase.cs
- ExportException.cs
- StyleBamlTreeBuilder.cs
- TypographyProperties.cs
- ApplicationHost.cs
- PropertyToken.cs
- CapabilitiesRule.cs
- WebPartCatalogCloseVerb.cs
- ZoneButton.cs
- Predicate.cs
- Unit.cs
- TracingConnectionInitiator.cs
- ConfigLoader.cs
- MimeTypeAttribute.cs
- BmpBitmapDecoder.cs
- CardSpacePolicyElement.cs
- ManagementPath.cs
- BoolExpression.cs
- OdbcParameterCollection.cs
- HashRepartitionEnumerator.cs
- TextTreeTextElementNode.cs
- ColorAnimationUsingKeyFrames.cs
- PerformanceCounter.cs
- SqlGenericUtil.cs
- TableLayoutPanelBehavior.cs
- ThumbAutomationPeer.cs
- XmlAttributeOverrides.cs
- SiteMapSection.cs
- TimeSpanOrInfiniteConverter.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- XmlSchemaComplexContent.cs
- ScriptControl.cs
- XmlTextReaderImplHelpers.cs
- LinkDescriptor.cs
- SQlBooleanStorage.cs
- EnumMember.cs
- GC.cs
- Transform3D.cs
- OnOperation.cs
- XamlToRtfParser.cs
- ButtonColumn.cs
- ContextInformation.cs
- EditingScopeUndoUnit.cs
- CancellationTokenSource.cs
- DataBoundControlAdapter.cs
- ReferentialConstraint.cs
- MemberDescriptor.cs
- SiteMembershipCondition.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- LoadedOrUnloadedOperation.cs
- RotationValidation.cs
- DrawingAttributesDefaultValueFactory.cs
- BaseComponentEditor.cs
- DTCTransactionManager.cs
- RowUpdatingEventArgs.cs
- TemplateColumn.cs
- TextWriterTraceListener.cs
- ObjectComplexPropertyMapping.cs
- PropertySourceInfo.cs
- FrameworkTemplate.cs
- RuntimeEnvironment.cs
- OracleCommandSet.cs
- ClientSponsor.cs
- SqlRowUpdatedEvent.cs
- DataSourceGeneratorException.cs
- tooltip.cs
- SchemaName.cs
- FacetDescription.cs
- AmbientValueAttribute.cs
- WinEventQueueItem.cs
- ComponentCollection.cs
- SafeNativeMethods.cs