Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Util / ObjectSet.cs / 1305376 / ObjectSet.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * ObjectSet class * * Copyright (c) 1999 Microsoft Corporation */ // Generics are causing perf regressions, so don't use them for now until we can figure // it out (VSWhidbey 463572) //#define USEGENERICSET namespace System.Web.Util { using System.Reflection; using System.Collections; using System.Collections.Generic; #if USEGENERICSET /* * Holds a set of unique objects of a specific type */ internal class ObjectSet: ICollection , ICollection { protected const int StartingCapacity = 8; private class EmptyEnumerator : IEnumerator { object IEnumerator.Current { get { return null; } } T IEnumerator .Current { get { return default(T); } } bool IEnumerator.MoveNext() { return false; } void IEnumerator.Reset() { } void IDisposable.Dispose() { } } private static EmptyEnumerator _emptyEnumerator = new EmptyEnumerator(); private Dictionary _objects; protected virtual Dictionary CreateDictionary() { return new Dictionary (StartingCapacity); } public void AddCollection(ICollection c) { foreach (T o in c) { Add(o); } } public void Add(T o) { if (_objects == null) { _objects = CreateDictionary(); } _objects[o] = null; } public bool Remove(T o) { if (_objects == null) return false; return _objects.Remove(o); } public bool Contains(T o) { if (_objects == null) return false; return _objects.ContainsKey(o); } bool ICollection .IsReadOnly { get { return true; } } public void Clear() { if (_objects != null) _objects.Clear(); } IEnumerator IEnumerable .GetEnumerator() { if (_objects == null) return _emptyEnumerator; return _objects.Keys.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { if (_objects == null) return _emptyEnumerator; return _objects.Keys.GetEnumerator(); } public int Count { get { if (_objects == null) return 0; return _objects.Keys.Count; } } void ICollection .CopyTo(T[] array, int index) { if (_objects != null) _objects.Keys.CopyTo(array, index); } bool ICollection.IsSynchronized { get { if (_objects == null) return true; return ((ICollection)_objects.Keys).IsSynchronized; } } object ICollection.SyncRoot { get { if (_objects == null) return this; return ((ICollection)_objects.Keys).SyncRoot; } } public void CopyTo(Array array, int index) { if (_objects != null) ((ICollection)_objects.Keys).CopyTo(array, index); } } internal class StringSet : ObjectSet { } internal class CaseInsensitiveStringSet : StringSet { protected override Dictionary CreateDictionary() { return new Dictionary (StartingCapacity, StringComparer.InvariantCultureIgnoreCase); } } internal class VirtualPathSet : ObjectSet { } internal class AssemblySet : ObjectSet { internal static AssemblySet Create(ICollection c) { AssemblySet objectSet = new AssemblySet(); objectSet.AddCollection(c); return objectSet; } } internal class BuildProviderSet : ObjectSet { } internal class ControlSet : ObjectSet { } #else /* * Holds a set of unique objects */ internal class ObjectSet: ICollection { private class EmptyEnumerator: IEnumerator { public object Current { get { return null; } } public bool MoveNext() { return false; } public void Reset() {} } private static EmptyEnumerator _emptyEnumerator = new EmptyEnumerator(); private IDictionary _objects; internal ObjectSet() {} // By default, it's case sensitive protected virtual bool CaseInsensitive { get { return false; } } public void Add(object o) { if (_objects == null) _objects = new System.Collections.Specialized.HybridDictionary(CaseInsensitive); _objects[o] = null; } public void AddCollection(ICollection c) { foreach (object o in c) { Add(o); } } public void Remove(object o) { if (_objects == null) return; _objects.Remove(o); } public bool Contains(object o) { if (_objects == null) return false; return _objects.Contains(o); } IEnumerator IEnumerable.GetEnumerator() { if (_objects == null) return _emptyEnumerator; return _objects.Keys.GetEnumerator(); } public int Count { get { if (_objects == null) return 0; return _objects.Keys.Count; } } bool ICollection.IsSynchronized { get { if (_objects == null) return true; return _objects.Keys.IsSynchronized; } } object ICollection.SyncRoot { get { if (_objects == null) return this; return _objects.Keys.SyncRoot; } } public void CopyTo(Array array, int index) { if (_objects != null) _objects.Keys.CopyTo(array, index); } } internal class StringSet: ObjectSet { internal StringSet() {} } internal class CaseInsensitiveStringSet: StringSet { protected override bool CaseInsensitive { get { return true; } } } internal class VirtualPathSet : ObjectSet { internal VirtualPathSet() { } } internal class AssemblySet : ObjectSet { internal AssemblySet() { } internal static AssemblySet Create(ICollection c) { AssemblySet objectSet = new AssemblySet(); objectSet.AddCollection(c); return objectSet; } } internal class BuildProviderSet : ObjectSet { internal BuildProviderSet() { } } internal class ControlSet : ObjectSet { internal ControlSet() { } } #endif } // 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
- GetLedgerRequest.cs
- ObjectView.cs
- WindowsIPAddress.cs
- StrongNameUtility.cs
- BrowserCapabilitiesCompiler.cs
- HyperLinkStyle.cs
- PrintPreviewControl.cs
- EventProxy.cs
- HTMLTextWriter.cs
- FamilyMap.cs
- CommandSet.cs
- WebPartEditVerb.cs
- EdgeModeValidation.cs
- SecurityPolicySection.cs
- RenderOptions.cs
- ChameleonKey.cs
- StoragePropertyMapping.cs
- Dispatcher.cs
- DependencyPropertyKey.cs
- WebPartConnectionsConfigureVerb.cs
- OlePropertyStructs.cs
- Subtree.cs
- CounterSample.cs
- Subtree.cs
- DataGridBoundColumn.cs
- WinFormsComponentEditor.cs
- HostingEnvironmentSection.cs
- RadioButtonPopupAdapter.cs
- DataGridColumnHeadersPresenterAutomationPeer.cs
- FixedDSBuilder.cs
- XmlSchemaException.cs
- Zone.cs
- CollectionView.cs
- GeneralTransform3DGroup.cs
- Int16Converter.cs
- CodePropertyReferenceExpression.cs
- TextTreeTextNode.cs
- CodeComment.cs
- CodeBinaryOperatorExpression.cs
- mda.cs
- FunctionUpdateCommand.cs
- ScriptModule.cs
- XPathMultyIterator.cs
- DragEvent.cs
- BulletDecorator.cs
- BaseParser.cs
- SelectionListComponentEditor.cs
- OpenFileDialog.cs
- serverconfig.cs
- JsonGlobals.cs
- CodeAttributeDeclarationCollection.cs
- keycontainerpermission.cs
- TypefaceCollection.cs
- CodeExporter.cs
- ImageMap.cs
- EntityContainerEmitter.cs
- XPathDocument.cs
- HttpFileCollection.cs
- PasswordTextNavigator.cs
- ToolStripCodeDomSerializer.cs
- ListControlStringCollectionEditor.cs
- EntityViewContainer.cs
- connectionpool.cs
- IApplicationTrustManager.cs
- ParseElementCollection.cs
- CustomErrorCollection.cs
- GlobalProxySelection.cs
- FrameworkElementFactory.cs
- TableParaClient.cs
- XhtmlBasicValidatorAdapter.cs
- ResponseBodyWriter.cs
- Currency.cs
- StubHelpers.cs
- WmlLiteralTextAdapter.cs
- ServerIdentity.cs
- ImmutableCollection.cs
- CodeObjectCreateExpression.cs
- DynamicQueryableWrapper.cs
- ReaderWriterLockWrapper.cs
- sapiproxy.cs
- OSFeature.cs
- HttpCapabilitiesSectionHandler.cs
- HMACSHA1.cs
- Application.cs
- ConfigurationStrings.cs
- ZipFileInfoCollection.cs
- HtmlShimManager.cs
- DecoderFallback.cs
- unsafeIndexingFilterStream.cs
- Content.cs
- CqlLexerHelpers.cs
- CollectionChangedEventManager.cs
- DocumentCollection.cs
- SoapReflectionImporter.cs
- SqlProviderServices.cs
- WorkItem.cs
- DockAndAnchorLayout.cs
- ServiceReference.cs
- EntityWithKeyStrategy.cs
- isolationinterop.cs