Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------------------------ // // 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
- TimeIntervalCollection.cs
- SplitterPanelDesigner.cs
- RepeatButtonAutomationPeer.cs
- ExpressionPrefixAttribute.cs
- DateTimeFormatInfoScanner.cs
- RelativeSource.cs
- DefaultAsyncDataDispatcher.cs
- EntityClientCacheKey.cs
- LinkedResource.cs
- ObjectDataSource.cs
- StrokeCollection2.cs
- selecteditemcollection.cs
- AnonymousIdentificationModule.cs
- EntityContainerEntitySet.cs
- FacetValues.cs
- XmlSchemaSimpleContentRestriction.cs
- SrgsText.cs
- _AutoWebProxyScriptWrapper.cs
- PortCache.cs
- ListViewUpdateEventArgs.cs
- DesignerDataTable.cs
- BamlLocalizableResource.cs
- MimeMultiPart.cs
- COAUTHINFO.cs
- TextParaLineResult.cs
- Validator.cs
- ConnectionManagementElement.cs
- Baml2006ReaderSettings.cs
- ScrollContentPresenter.cs
- EventMappingSettings.cs
- QilName.cs
- TypeLibConverter.cs
- CompensatableTransactionScopeActivity.cs
- GridViewUpdatedEventArgs.cs
- SettingsSavedEventArgs.cs
- TextEditorSpelling.cs
- MyContact.cs
- DateTimeAutomationPeer.cs
- HttpStreamFormatter.cs
- FileAuthorizationModule.cs
- StorageSetMapping.cs
- TypedDataSetSchemaImporterExtension.cs
- ImmutableDispatchRuntime.cs
- SafeMILHandleMemoryPressure.cs
- ListItemCollection.cs
- KeyProperty.cs
- GreenMethods.cs
- CreateUserWizard.cs
- AppDomainFactory.cs
- DbConnectionStringBuilder.cs
- HtmlElementEventArgs.cs
- HtmlTableCell.cs
- UnionExpr.cs
- GenericEnumConverter.cs
- FrameworkElementFactory.cs
- FileClassifier.cs
- MultipartContentParser.cs
- DbDeleteCommandTree.cs
- DrawingImage.cs
- MetadataCache.cs
- PartitionedStreamMerger.cs
- ChtmlCommandAdapter.cs
- XPathDocumentIterator.cs
- X509ChainPolicy.cs
- AsmxEndpointPickerExtension.cs
- ImageMap.cs
- ResourceCategoryAttribute.cs
- DocumentCollection.cs
- FilterElement.cs
- Odbc32.cs
- ConvertEvent.cs
- precedingquery.cs
- PingOptions.cs
- LongValidator.cs
- BatchParser.cs
- EditorZoneBase.cs
- StylusPointProperties.cs
- CodeDomSerializer.cs
- RequestCacheManager.cs
- TCPListener.cs
- DataSourceIDConverter.cs
- DefaultValueTypeConverter.cs
- Nodes.cs
- DataSourceSerializationException.cs
- SafeNativeMethods.cs
- PersonalizationStateInfo.cs
- SqlXml.cs
- ListViewHitTestInfo.cs
- PrintDialogException.cs
- TableStyle.cs
- UpdateExpressionVisitor.cs
- SqlTypeSystemProvider.cs
- SqlInternalConnectionSmi.cs
- MessageQueuePermissionEntry.cs
- ToolStripMenuItem.cs
- AsyncOperationManager.cs
- Point3DConverter.cs
- EnumBuilder.cs
- XamlFxTrace.cs
- WindowInteractionStateTracker.cs