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
- CalendarTable.cs
- RIPEMD160Managed.cs
- CroppedBitmap.cs
- ScriptComponentDescriptor.cs
- X509LogoTypeExtension.cs
- GridViewPageEventArgs.cs
- RecordBuilder.cs
- SamlEvidence.cs
- UnmanagedMemoryStreamWrapper.cs
- StringDictionary.cs
- WebPartDesigner.cs
- PlainXmlSerializer.cs
- cookiecontainer.cs
- JournalNavigationScope.cs
- EnterpriseServicesHelper.cs
- TextMetrics.cs
- ColumnBinding.cs
- SoapIgnoreAttribute.cs
- TrackPointCollection.cs
- DesignDataSource.cs
- MouseWheelEventArgs.cs
- WebDescriptionAttribute.cs
- KeyEvent.cs
- ProtectedConfiguration.cs
- SerializationObjectManager.cs
- Menu.cs
- BmpBitmapEncoder.cs
- XmlQueryStaticData.cs
- WsdlContractConversionContext.cs
- OutputCacheSection.cs
- CompilerGlobalScopeAttribute.cs
- Trigger.cs
- TreeViewEvent.cs
- InternalDispatchObject.cs
- XmlChildEnumerator.cs
- HtmlCommandAdapter.cs
- ServicePointManager.cs
- DynamicResourceExtension.cs
- LayoutTableCell.cs
- EventHandlerList.cs
- PartitionedStream.cs
- Rules.cs
- SecurityException.cs
- ScrollChrome.cs
- GetPageCompletedEventArgs.cs
- BrowserTree.cs
- BinaryObjectWriter.cs
- SingleSelectRootGridEntry.cs
- LZCodec.cs
- GeneralTransform2DTo3D.cs
- MonitorWrapper.cs
- SubstitutionList.cs
- AppDomainManager.cs
- TreeNodeMouseHoverEvent.cs
- EventBindingService.cs
- IdentifierCreationService.cs
- SqlDelegatedTransaction.cs
- RecordsAffectedEventArgs.cs
- TreeNodeMouseHoverEvent.cs
- StreamWithDictionary.cs
- ItemCheckEvent.cs
- MiniConstructorInfo.cs
- MsmqIntegrationBindingCollectionElement.cs
- DocumentPageTextView.cs
- DiagnosticSection.cs
- DebugHandleTracker.cs
- FormViewDeleteEventArgs.cs
- FacetValueContainer.cs
- SqlBulkCopyColumnMappingCollection.cs
- DeviceContexts.cs
- AdornerHitTestResult.cs
- DynamicQueryableWrapper.cs
- ServiceDebugElement.cs
- NavigationCommands.cs
- ListViewDeletedEventArgs.cs
- CodeDomComponentSerializationService.cs
- CorrelationQueryBehavior.cs
- SecurityElement.cs
- FixedFlowMap.cs
- ExecutionEngineException.cs
- SubMenuStyleCollectionEditor.cs
- OperandQuery.cs
- CurrentTimeZone.cs
- Base64Stream.cs
- ActivitiesCollection.cs
- RectAnimation.cs
- HyperLinkColumn.cs
- BitFlagsGenerator.cs
- HMAC.cs
- ContentElement.cs
- MetadataElement.cs
- Pool.cs
- ThreadStartException.cs
- FrameworkTemplate.cs
- StylusLogic.cs
- HttpsTransportBindingElement.cs
- DataContract.cs
- MaskedTextProvider.cs
- DataTemplateSelector.cs
- _SingleItemRequestCache.cs