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
- PenThreadWorker.cs
- MemoryFailPoint.cs
- StateWorkerRequest.cs
- ICollection.cs
- ContentAlignmentEditor.cs
- DataGridViewHeaderCell.cs
- DocumentReferenceCollection.cs
- HitTestDrawingContextWalker.cs
- Semaphore.cs
- DebugViewWriter.cs
- SettingsSection.cs
- ReplacementText.cs
- ValidationErrorEventArgs.cs
- XmlSchemaInclude.cs
- ViewEvent.cs
- ReadOnlyAttribute.cs
- ParameterCollection.cs
- SafeBitVector32.cs
- AppDomainAttributes.cs
- JoinTreeNode.cs
- WmlTextBoxAdapter.cs
- CustomValidator.cs
- Baml2006KnownTypes.cs
- DBConnectionString.cs
- TCEAdapterGenerator.cs
- SQLInt16.cs
- NativeCompoundFileAPIs.cs
- ImageFormat.cs
- NativeMethods.cs
- NullableBoolConverter.cs
- _ConnectOverlappedAsyncResult.cs
- Rfc2898DeriveBytes.cs
- InvalidEnumArgumentException.cs
- ExclusiveTcpListener.cs
- UnsafeMethods.cs
- RegionIterator.cs
- AttributeData.cs
- ErrorsHelper.cs
- EventBindingService.cs
- LocalizableResourceBuilder.cs
- BaseCodePageEncoding.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- RelationshipConverter.cs
- TypeDescriptor.cs
- EntityDataSourceDataSelection.cs
- DesignerTransaction.cs
- CredentialSelector.cs
- PrefixQName.cs
- OracleException.cs
- EntityParameterCollection.cs
- BuildManagerHost.cs
- AnimationException.cs
- RotateTransform.cs
- DbDataRecord.cs
- ProgressChangedEventArgs.cs
- TextBoxView.cs
- controlskin.cs
- SymmetricKeyWrap.cs
- CounterSample.cs
- FontNamesConverter.cs
- SmtpNegotiateAuthenticationModule.cs
- FormatConvertedBitmap.cs
- DiscoveryRequestHandler.cs
- DisplayMemberTemplateSelector.cs
- HealthMonitoringSection.cs
- CancellationHandlerDesigner.cs
- ConfigurationManagerHelper.cs
- HttpWebResponse.cs
- Canvas.cs
- AuthenticationConfig.cs
- EntityViewGenerationAttribute.cs
- NotFiniteNumberException.cs
- UnsafeNativeMethods.cs
- CommandConverter.cs
- EncryptedKey.cs
- RepeatButton.cs
- WebColorConverter.cs
- SerializationException.cs
- streamingZipPartStream.cs
- DataSourceCacheDurationConverter.cs
- ColumnTypeConverter.cs
- XmlResolver.cs
- Model3DCollection.cs
- CustomCategoryAttribute.cs
- GifBitmapEncoder.cs
- LoadRetryConstantStrategy.cs
- ConfigurationSection.cs
- IPipelineRuntime.cs
- AppSettingsExpressionBuilder.cs
- WebPartUserCapability.cs
- TextPenaltyModule.cs
- TableLayoutColumnStyleCollection.cs
- PointConverter.cs
- _NetRes.cs
- CharConverter.cs
- TypedReference.cs
- SizeF.cs
- SerialPinChanges.cs
- StyleSheet.cs
- Stacktrace.cs