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
- CompilerParameters.cs
- WebMessageEncodingBindingElement.cs
- UserPreferenceChangedEventArgs.cs
- EditorPartCollection.cs
- ValidationSummary.cs
- MulticastIPAddressInformationCollection.cs
- SID.cs
- HttpHandlerAction.cs
- Calendar.cs
- GridErrorDlg.cs
- WebConvert.cs
- _emptywebproxy.cs
- ContentValidator.cs
- BaseTypeViewSchema.cs
- ListViewHitTestInfo.cs
- dtdvalidator.cs
- BaseDataListComponentEditor.cs
- AttachedAnnotation.cs
- ListDictionary.cs
- OciHandle.cs
- StylusTip.cs
- WebServiceErrorEvent.cs
- CompositeActivityMarkupSerializer.cs
- ParallelTimeline.cs
- Typography.cs
- SafeLocalAllocation.cs
- WaitHandleCannotBeOpenedException.cs
- SoapIncludeAttribute.cs
- ProfileWorkflowElement.cs
- DependencyPropertyDescriptor.cs
- FileNotFoundException.cs
- FixedDocumentSequencePaginator.cs
- PropertyMappingExceptionEventArgs.cs
- BamlResourceDeserializer.cs
- DataServiceConfiguration.cs
- FileDataSourceCache.cs
- UncommonField.cs
- DataGridViewCellStateChangedEventArgs.cs
- DataControlButton.cs
- ToolStripSettings.cs
- WebBrowsableAttribute.cs
- AssemblyBuilder.cs
- SoapCommonClasses.cs
- SystemIPAddressInformation.cs
- NamedPermissionSet.cs
- Rotation3DAnimationBase.cs
- StringUtil.cs
- SQLInt32.cs
- InstanceStore.cs
- MetaForeignKeyColumn.cs
- Transform3D.cs
- SqlConnectionFactory.cs
- StorageBasedPackageProperties.cs
- FrameworkContextData.cs
- XPathException.cs
- DataGridViewCellValidatingEventArgs.cs
- Html32TextWriter.cs
- VisualTreeUtils.cs
- ProviderMetadata.cs
- ArrayConverter.cs
- OleServicesContext.cs
- HuffmanTree.cs
- Trace.cs
- EventListenerClientSide.cs
- ObjectCache.cs
- NativeMethods.cs
- FrameworkTemplate.cs
- GridSplitter.cs
- SystemKeyConverter.cs
- Filter.cs
- LoadWorkflowCommand.cs
- CodeAccessPermission.cs
- MethodBuilder.cs
- MetricEntry.cs
- SmtpDigestAuthenticationModule.cs
- BitmapEffect.cs
- PrinterSettings.cs
- CrossContextChannel.cs
- PenLineCapValidation.cs
- DataGridViewCellCollection.cs
- ManipulationStartingEventArgs.cs
- ToolBarTray.cs
- SchemaTypeEmitter.cs
- UpdatePanelControlTrigger.cs
- Models.cs
- XmlChildNodes.cs
- LiteralText.cs
- UIAgentAsyncParams.cs
- JavascriptCallbackResponseProperty.cs
- SystemSounds.cs
- PersonalizationProviderCollection.cs
- SymbolEqualComparer.cs
- UserUseLicenseDictionaryLoader.cs
- ReadOnlyActivityGlyph.cs
- DependentTransaction.cs
- IdentifierService.cs
- ModulesEntry.cs
- PrintPreviewGraphics.cs
- UInt32Converter.cs
- TextAnchor.cs