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
- BindingMemberInfo.cs
- ActivityFunc.cs
- ObjectReaderCompiler.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- DataGridViewSelectedColumnCollection.cs
- SimpleColumnProvider.cs
- WindowsGraphics.cs
- Misc.cs
- ImportContext.cs
- mediaclock.cs
- WindowsAuthenticationModule.cs
- MetadataPropertyvalue.cs
- Win32PrintDialog.cs
- MediaContext.cs
- SQLDouble.cs
- PaintEvent.cs
- MultipleViewPatternIdentifiers.cs
- XmlSchemaComplexType.cs
- WebBrowserSiteBase.cs
- ToolStripRenderer.cs
- CaseInsensitiveOrdinalStringComparer.cs
- MsmqIntegrationReceiveParameters.cs
- DataGridViewColumnTypeEditor.cs
- SymbolType.cs
- CheckPair.cs
- ApplicationBuildProvider.cs
- SoapIncludeAttribute.cs
- HtmlString.cs
- PropertyTabAttribute.cs
- ImageResources.Designer.cs
- EarlyBoundInfo.cs
- SmtpReplyReaderFactory.cs
- EntityClientCacheEntry.cs
- ListViewContainer.cs
- DesignerHelpers.cs
- SafeBitVector32.cs
- GridViewRowEventArgs.cs
- EdmComplexTypeAttribute.cs
- FormViewUpdatedEventArgs.cs
- ConfigurationSettings.cs
- XmlSchemaAppInfo.cs
- CallSite.cs
- NamedPermissionSet.cs
- AssemblyNameUtility.cs
- EncodingDataItem.cs
- DataGridViewColumnDesignTimeVisibleAttribute.cs
- PropertyMapper.cs
- SystemInfo.cs
- ObsoleteAttribute.cs
- CryptographicAttribute.cs
- baseaxisquery.cs
- XmlLanguageConverter.cs
- RenderContext.cs
- OdbcReferenceCollection.cs
- NavigationWindow.cs
- LicFileLicenseProvider.cs
- AxHostDesigner.cs
- MethodMessage.cs
- MSG.cs
- ListViewPagedDataSource.cs
- DataServiceClientException.cs
- TypeUsageBuilder.cs
- ScriptModule.cs
- BufferedReadStream.cs
- SecurityKeyType.cs
- AnimationStorage.cs
- XmlDataSourceView.cs
- TextComposition.cs
- MdiWindowListStrip.cs
- ProfileServiceManager.cs
- Environment.cs
- ProgressPage.cs
- PageAsyncTaskManager.cs
- XsltInput.cs
- ValidatorCompatibilityHelper.cs
- EntityType.cs
- SmtpNegotiateAuthenticationModule.cs
- ObjectListComponentEditor.cs
- GridViewRow.cs
- UnderstoodHeaders.cs
- LeftCellWrapper.cs
- XmlILIndex.cs
- LineVisual.cs
- RightsManagementSuppressedStream.cs
- Brush.cs
- WorkflowExecutor.cs
- PasswordPropertyTextAttribute.cs
- MultipartContentParser.cs
- RangeValuePatternIdentifiers.cs
- ZoneButton.cs
- CatalogPart.cs
- ChannelSinkStacks.cs
- InvokePattern.cs
- StreamGeometry.cs
- NamespaceQuery.cs
- JsonReader.cs
- Aggregates.cs
- Switch.cs
- ImageDrawing.cs
- SmiSettersStream.cs