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
- DotNetATv1WindowsLogEntrySerializer.cs
- UpDownBaseDesigner.cs
- DataPagerFieldCommandEventArgs.cs
- GeometryGroup.cs
- Pkcs7Signer.cs
- App.cs
- TextRange.cs
- Soap12ServerProtocol.cs
- TextOnlyOutput.cs
- TraceContextEventArgs.cs
- PagerSettings.cs
- MulticastDelegate.cs
- MergeFailedEvent.cs
- AliasedSlot.cs
- AppDomainCompilerProxy.cs
- GeneralTransform3DCollection.cs
- CommonGetThemePartSize.cs
- UriScheme.cs
- ICspAsymmetricAlgorithm.cs
- IncrementalHitTester.cs
- XamlUtilities.cs
- GregorianCalendar.cs
- RectAnimation.cs
- glyphs.cs
- TemplatePropertyEntry.cs
- Stylesheet.cs
- HttpCapabilitiesEvaluator.cs
- CollectionConverter.cs
- HostProtectionPermission.cs
- LabelTarget.cs
- HtmlInputImage.cs
- WorkflowServiceBuildProvider.cs
- PassportAuthenticationEventArgs.cs
- GroupBoxRenderer.cs
- FormsAuthenticationEventArgs.cs
- StylusButtonEventArgs.cs
- DescendentsWalker.cs
- ResourceType.cs
- ShaderEffect.cs
- ConditionalExpression.cs
- DirectoryInfo.cs
- RulePatternOps.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- JsonWriter.cs
- XmlStringTable.cs
- PeerHopCountAttribute.cs
- GradientStop.cs
- DateTimeUtil.cs
- AggregatePushdown.cs
- WebPartChrome.cs
- Publisher.cs
- WsatStrings.cs
- BigInt.cs
- FileLoadException.cs
- LayoutUtils.cs
- Rotation3DKeyFrameCollection.cs
- ComponentRenameEvent.cs
- CodeLinePragma.cs
- ImmutableCommunicationTimeouts.cs
- UriSection.cs
- HttpListenerContext.cs
- SafeSystemMetrics.cs
- XmlSchemas.cs
- BinaryObjectReader.cs
- RelatedView.cs
- GenericEnumConverter.cs
- SafeTimerHandle.cs
- ModulesEntry.cs
- DataGridViewEditingControlShowingEventArgs.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- NotificationContext.cs
- DataListItemCollection.cs
- DataControlButton.cs
- Processor.cs
- FunctionCommandText.cs
- StrokeSerializer.cs
- XmlSchemaValidator.cs
- invalidudtexception.cs
- WSSecurityPolicy11.cs
- PropertyTabChangedEvent.cs
- RenderTargetBitmap.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- XmlSchemaAnnotation.cs
- Encoding.cs
- XmlSchemaIdentityConstraint.cs
- ApplicationFileParser.cs
- TypeUtils.cs
- ContextStaticAttribute.cs
- CodeNamespaceCollection.cs
- FrameworkElement.cs
- SectionXmlInfo.cs
- IIS7UserPrincipal.cs
- Inline.cs
- Single.cs
- XmlDesignerDataSourceView.cs
- ApplicationDirectoryMembershipCondition.cs
- ArcSegment.cs
- ClosableStream.cs
- Accessible.cs
- MetadataCache.cs