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
- login.cs
- ProxyAttribute.cs
- MsmqIntegrationOutputChannel.cs
- SspiSecurityTokenProvider.cs
- FontNamesConverter.cs
- RadioButtonAutomationPeer.cs
- Setter.cs
- Properties.cs
- XPathAncestorQuery.cs
- OdbcException.cs
- HashSetEqualityComparer.cs
- ModuleBuilderData.cs
- Popup.cs
- AbstractExpressions.cs
- EncryptedXml.cs
- documentsequencetextpointer.cs
- FormsAuthenticationConfiguration.cs
- BooleanFunctions.cs
- AxisAngleRotation3D.cs
- FormsAuthenticationUserCollection.cs
- CreateUserWizardStep.cs
- SqlRemoveConstantOrderBy.cs
- XPathNodeInfoAtom.cs
- CircleHotSpot.cs
- VirtualPathProvider.cs
- InternalEnumValidatorAttribute.cs
- NativeMethods.cs
- externdll.cs
- _RequestCacheProtocol.cs
- DbgCompiler.cs
- DefaultWorkflowSchedulerService.cs
- MessagePartDescriptionCollection.cs
- ExpressionBuilderCollection.cs
- IsolatedStorageFileStream.cs
- WebBaseEventKeyComparer.cs
- PageMediaType.cs
- DataColumnCollection.cs
- Span.cs
- Int32KeyFrameCollection.cs
- XmlSchemaInferenceException.cs
- QueryContext.cs
- WindowsRegion.cs
- DesignerRegion.cs
- PolicyStatement.cs
- TemplatedMailWebEventProvider.cs
- SortAction.cs
- MethodInfo.cs
- ResolveMatchesMessageCD1.cs
- DbConnectionClosed.cs
- AssemblyUtil.cs
- SplayTreeNode.cs
- wpf-etw.cs
- LinqDataSourceDeleteEventArgs.cs
- OperationCanceledException.cs
- ColorContext.cs
- QilExpression.cs
- SchemaObjectWriter.cs
- RtType.cs
- ConnectionStringEditor.cs
- Debug.cs
- SubMenuStyleCollection.cs
- Button.cs
- Intellisense.cs
- Material.cs
- ShaderEffect.cs
- Pointer.cs
- DnsElement.cs
- CodeIdentifier.cs
- TextBoxBase.cs
- Attributes.cs
- Vector3DConverter.cs
- ToolStripItemRenderEventArgs.cs
- SchemaNotation.cs
- XmlC14NWriter.cs
- MatrixStack.cs
- ObjectCloneHelper.cs
- BitmapEffectOutputConnector.cs
- GroupItem.cs
- LocatorPart.cs
- HitTestWithPointDrawingContextWalker.cs
- BoundColumn.cs
- CodeSnippetStatement.cs
- AuthenticationModulesSection.cs
- XmlQualifiedName.cs
- ListView.cs
- ItemsControlAutomationPeer.cs
- NavigationHelper.cs
- SmtpLoginAuthenticationModule.cs
- Html32TextWriter.cs
- Lasso.cs
- MethodAccessException.cs
- IssuedTokenClientElement.cs
- AnyAllSearchOperator.cs
- CallbackValidatorAttribute.cs
- Rijndael.cs
- ItemType.cs
- UIElement.cs
- Expr.cs
- SQLBoolean.cs
- EntityParameterCollection.cs