Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ProxyWebPartConnectionCollection.cs
- GridViewRowCollection.cs
- HttpPostServerProtocol.cs
- SafeHandle.cs
- SettingsPropertyWrongTypeException.cs
- OperatingSystem.cs
- NotFiniteNumberException.cs
- XamlToRtfParser.cs
- DataGridViewColumn.cs
- TypedElement.cs
- ApplicationCommands.cs
- ImagingCache.cs
- ScriptReferenceBase.cs
- XmlSerializationWriter.cs
- ConfigurationConverterBase.cs
- WebPartActionVerb.cs
- InputScope.cs
- PropertyDescriptorGridEntry.cs
- Attributes.cs
- _ContextAwareResult.cs
- GPRECT.cs
- ConfigurationPropertyAttribute.cs
- LinearGradientBrush.cs
- ClientApiGenerator.cs
- ClientTargetCollection.cs
- EditorZoneBase.cs
- IUnknownConstantAttribute.cs
- XpsS0ValidatingLoader.cs
- FontSource.cs
- HyperlinkAutomationPeer.cs
- XamlRtfConverter.cs
- parserscommon.cs
- ToolBar.cs
- SchemaConstraints.cs
- RawAppCommandInputReport.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- XmlCountingReader.cs
- MasterPageParser.cs
- ServiceEndpointElementCollection.cs
- ValueTypePropertyReference.cs
- FaultPropagationRecord.cs
- NativeActivity.cs
- SQLMoney.cs
- KerberosReceiverSecurityToken.cs
- PieceNameHelper.cs
- RightsManagementEncryptionTransform.cs
- ExtensionElement.cs
- SectionXmlInfo.cs
- DynamicVirtualDiscoSearcher.cs
- EventLogPermissionAttribute.cs
- HwndProxyElementProvider.cs
- TaiwanLunisolarCalendar.cs
- TextRunTypographyProperties.cs
- LogicalExpr.cs
- CommandEventArgs.cs
- DeferredTextReference.cs
- TagElement.cs
- GridViewDesigner.cs
- BindingNavigator.cs
- SrgsSubset.cs
- DecoratedNameAttribute.cs
- CodeAttachEventStatement.cs
- CSharpCodeProvider.cs
- ColorMap.cs
- SafeEventHandle.cs
- XmlSerializationWriter.cs
- ApplicationId.cs
- RuntimeHelpers.cs
- FragmentQuery.cs
- Keywords.cs
- DBBindings.cs
- baseaxisquery.cs
- TextControlDesigner.cs
- ConstrainedDataObject.cs
- OdbcConnectionOpen.cs
- FixedHyperLink.cs
- XamlStream.cs
- GenericXmlSecurityTokenAuthenticator.cs
- ActiveXSite.cs
- InkPresenter.cs
- ImageMapEventArgs.cs
- OdbcCommandBuilder.cs
- TextEditorContextMenu.cs
- XmlNode.cs
- SqlBinder.cs
- TextEvent.cs
- SBCSCodePageEncoding.cs
- MarkupExtensionSerializer.cs
- NamespaceInfo.cs
- FolderBrowserDialog.cs
- _FixedSizeReader.cs
- DataGridCellsPresenter.cs
- XmlSerializationReader.cs
- DoubleStorage.cs
- PipelineModuleStepContainer.cs
- DynamicFilterExpression.cs
- XsdDuration.cs
- PageParserFilter.cs
- UrlMappingsModule.cs
- StylusPointPropertyId.cs