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
- RankException.cs
- SessionSwitchEventArgs.cs
- TreeNodeBinding.cs
- CustomExpression.cs
- DurableMessageDispatchInspector.cs
- CodeAttributeArgument.cs
- EntityDataSourceContextCreatedEventArgs.cs
- CornerRadius.cs
- Barrier.cs
- DebugInfoExpression.cs
- Symbol.cs
- FrameworkContentElement.cs
- X509CertificateTokenFactoryCredential.cs
- VariableExpressionConverter.cs
- ValueType.cs
- DataGridViewElement.cs
- NotSupportedException.cs
- EntityDataSourceSelectingEventArgs.cs
- InfiniteIntConverter.cs
- AsyncOperationManager.cs
- WindowsHyperlink.cs
- Boolean.cs
- DynamicControlParameter.cs
- listitem.cs
- RangeValuePattern.cs
- Fault.cs
- RangeValidator.cs
- NodeCounter.cs
- FontCacheLogic.cs
- SafeWaitHandle.cs
- XmlTextReaderImpl.cs
- AutomationElementCollection.cs
- SQLDecimalStorage.cs
- WebServicesInteroperability.cs
- TemplateField.cs
- FolderBrowserDialog.cs
- FacetValues.cs
- SecurityKeyIdentifier.cs
- AgileSafeNativeMemoryHandle.cs
- Size.cs
- COM2FontConverter.cs
- HttpCookie.cs
- TypeDescriptionProviderAttribute.cs
- CookieParameter.cs
- Floater.cs
- DataControlCommands.cs
- XsltInput.cs
- OleAutBinder.cs
- InertiaExpansionBehavior.cs
- UserControlAutomationPeer.cs
- OledbConnectionStringbuilder.cs
- WindowsTab.cs
- SystemIPGlobalStatistics.cs
- SqlDataSourceConfigureSelectPanel.cs
- PageRequestManager.cs
- InheritablePropertyChangeInfo.cs
- AttributeCollection.cs
- ScriptResourceInfo.cs
- InvalidOleVariantTypeException.cs
- LinkUtilities.cs
- SqlStatistics.cs
- QilCloneVisitor.cs
- RelationalExpressions.cs
- EncryptedData.cs
- ChangeProcessor.cs
- TransformDescriptor.cs
- DoubleAnimationClockResource.cs
- Merger.cs
- DbProviderFactoriesConfigurationHandler.cs
- FileSystemEventArgs.cs
- FileUpload.cs
- InstalledVoice.cs
- LambdaCompiler.Logical.cs
- CheckBoxRenderer.cs
- DynamicQueryableWrapper.cs
- SqlStream.cs
- SiblingIterators.cs
- IImplicitResourceProvider.cs
- SqlClientMetaDataCollectionNames.cs
- EventDriven.cs
- Primitive.cs
- AuthenticationService.cs
- WinInetCache.cs
- Int32Rect.cs
- EntityReference.cs
- CellConstantDomain.cs
- SQLDecimal.cs
- ProcessInfo.cs
- BasicDesignerLoader.cs
- ExpressionQuoter.cs
- _TimerThread.cs
- OdbcConnectionFactory.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- LinkedResourceCollection.cs
- AccessDataSourceView.cs
- ObjectDataSourceFilteringEventArgs.cs
- FragmentQueryKB.cs
- PropertyRef.cs
- StrongNameMembershipCondition.cs
- SqlConnectionStringBuilder.cs