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
- EncodingNLS.cs
- HttpClientProtocol.cs
- XmlNodeChangedEventArgs.cs
- AssemblyGen.cs
- PolyLineSegment.cs
- UnsafeNativeMethods.cs
- SoapAttributeAttribute.cs
- M3DUtil.cs
- CompilationSection.cs
- RootBuilder.cs
- BasePattern.cs
- PieceNameHelper.cs
- ExtensionQuery.cs
- EntityProxyFactory.cs
- CoTaskMemHandle.cs
- UrlPath.cs
- WaitHandleCannotBeOpenedException.cs
- MetaModel.cs
- MenuItemBinding.cs
- Ray3DHitTestResult.cs
- NodeInfo.cs
- LinkClickEvent.cs
- ValidationSummary.cs
- UrlParameterWriter.cs
- DataGridViewAccessibleObject.cs
- UxThemeWrapper.cs
- XdrBuilder.cs
- RecognizedPhrase.cs
- TextFormatterImp.cs
- GatewayDefinition.cs
- ValueConversionAttribute.cs
- ParameterToken.cs
- DataGridBoundColumn.cs
- SafeLibraryHandle.cs
- NetTcpSectionData.cs
- PointLightBase.cs
- DataGridViewAccessibleObject.cs
- DataListItem.cs
- CommonProperties.cs
- ListItemDetailViewAttribute.cs
- MenuItemStyle.cs
- WorkflowInspectionServices.cs
- TrackingMemoryStream.cs
- RangeExpression.cs
- Timer.cs
- BitmapEffectGroup.cs
- UserNameSecurityToken.cs
- autovalidator.cs
- ISFClipboardData.cs
- InOutArgument.cs
- ToolStripSystemRenderer.cs
- ApplicationServiceHelper.cs
- RectangleHotSpot.cs
- ErrorEventArgs.cs
- XmlILModule.cs
- Accessible.cs
- SafeNativeMethods.cs
- TextTreeFixupNode.cs
- MaterialGroup.cs
- ExponentialEase.cs
- HtmlTableRowCollection.cs
- XmlName.cs
- UrlMappingsModule.cs
- CheckableControlBaseAdapter.cs
- FixedTextSelectionProcessor.cs
- PersonalizationStateInfo.cs
- LockedAssemblyCache.cs
- UdpConstants.cs
- ThreadAbortException.cs
- EntityDesignerUtils.cs
- SqlCacheDependencyDatabaseCollection.cs
- CharUnicodeInfo.cs
- SqlComparer.cs
- ObjectTypeMapping.cs
- AssertFilter.cs
- Frame.cs
- DesignTimeDataBinding.cs
- HtmlMeta.cs
- PropertyItemInternal.cs
- PermissionListSet.cs
- JournalNavigationScope.cs
- InputLangChangeRequestEvent.cs
- AdapterUtil.cs
- RemotingAttributes.cs
- ChineseLunisolarCalendar.cs
- TabRenderer.cs
- TableLayoutStyle.cs
- CodeNamespaceImportCollection.cs
- DependencyObjectPropertyDescriptor.cs
- VBCodeProvider.cs
- TraceSwitch.cs
- BitVector32.cs
- MatrixIndependentAnimationStorage.cs
- OrderedParallelQuery.cs
- SqlTrackingService.cs
- VisualBrush.cs
- Constants.cs
- ServiceObjectContainer.cs
- DesignerActionHeaderItem.cs
- SuppressIldasmAttribute.cs