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
- ConfigurationManagerHelperFactory.cs
- BrowserCapabilitiesFactory.cs
- XmlSchemaInfo.cs
- DynamicValidator.cs
- Screen.cs
- CurrentTimeZone.cs
- XmlCDATASection.cs
- ComponentSerializationService.cs
- ByteRangeDownloader.cs
- ProxyManager.cs
- BuilderPropertyEntry.cs
- Native.cs
- HttpCapabilitiesSectionHandler.cs
- MissingManifestResourceException.cs
- SmtpReplyReaderFactory.cs
- sqlpipe.cs
- StaticTextPointer.cs
- BitmapEffectInput.cs
- SafeMILHandle.cs
- Vector3DAnimation.cs
- VisualTreeUtils.cs
- DynamicMetaObject.cs
- LinqExpressionNormalizer.cs
- FixedDocumentSequencePaginator.cs
- CatalogPartChrome.cs
- SerializationException.cs
- ComponentEditorForm.cs
- SafeRegistryHandle.cs
- LocalizabilityAttribute.cs
- VerificationException.cs
- StringDictionary.cs
- SevenBitStream.cs
- Bitmap.cs
- RemoveFromCollection.cs
- ColumnClickEvent.cs
- UIHelper.cs
- CookielessData.cs
- FontFamilyValueSerializer.cs
- Avt.cs
- NodeFunctions.cs
- TextBlockAutomationPeer.cs
- FunctionImportElement.cs
- TextRangeEditTables.cs
- QilUnary.cs
- GroupBox.cs
- ObjectHandle.cs
- Events.cs
- DependencyPropertyChangedEventArgs.cs
- Parser.cs
- CryptoApi.cs
- PopupRootAutomationPeer.cs
- SettingsPropertyWrongTypeException.cs
- MaterializeFromAtom.cs
- SelectionPattern.cs
- XamlValidatingReader.cs
- FieldNameLookup.cs
- UInt16Storage.cs
- DesignerSerializationVisibilityAttribute.cs
- IsolatedStorageFile.cs
- GeometryModel3D.cs
- UpdateTranslator.cs
- SafeHandles.cs
- PropertyMetadata.cs
- SchemaImporterExtensionsSection.cs
- ExpressionBuilderContext.cs
- NonceCache.cs
- LowerCaseStringConverter.cs
- D3DImage.cs
- DataGridColumnCollection.cs
- BrushValueSerializer.cs
- TreeNodeClickEventArgs.cs
- MemberAccessException.cs
- BindingExpression.cs
- ButtonBaseAdapter.cs
- AutomationPatternInfo.cs
- TextRangeBase.cs
- SqlInternalConnectionTds.cs
- OciEnlistContext.cs
- UnmanagedMarshal.cs
- PolyQuadraticBezierSegment.cs
- RegexWriter.cs
- _SingleItemRequestCache.cs
- CharStorage.cs
- ExpressionList.cs
- BasicKeyConstraint.cs
- EmptyStringExpandableObjectConverter.cs
- ToolTipService.cs
- OneToOneMappingSerializer.cs
- ElasticEase.cs
- FunctionImportMapping.cs
- DataGridViewCellStyleChangedEventArgs.cs
- MenuItemStyle.cs
- BuildManagerHost.cs
- HttpCapabilitiesSectionHandler.cs
- ToolStripSettings.cs
- HttpCacheVary.cs
- PageBuildProvider.cs
- mediaclock.cs
- BaseCollection.cs
- SubqueryTrackingVisitor.cs