Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / Util / ObjectSet.cs / 1 / 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 }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WebPartDeleteVerb.cs
- PerformanceCounterPermissionAttribute.cs
- ApplicationId.cs
- Viewport3DVisual.cs
- TemplateControlBuildProvider.cs
- FunctionOverloadResolver.cs
- WizardSideBarListControlItem.cs
- TransformerConfigurationWizardBase.cs
- validationstate.cs
- SoapIncludeAttribute.cs
- ISO2022Encoding.cs
- ChtmlImageAdapter.cs
- newinstructionaction.cs
- PackWebResponse.cs
- Filter.cs
- ArcSegment.cs
- COM2ExtendedUITypeEditor.cs
- ErrorHandlerFaultInfo.cs
- TypeUnloadedException.cs
- ConnectionStringsSection.cs
- Variable.cs
- HtmlControl.cs
- UserNamePasswordServiceCredential.cs
- RectangleHotSpot.cs
- FlowLayout.cs
- TreeViewEvent.cs
- SessionState.cs
- Math.cs
- DataGridViewSelectedCellCollection.cs
- MethodMessage.cs
- WebFormsRootDesigner.cs
- NotificationContext.cs
- HtmlInputFile.cs
- DiscoveryDocument.cs
- ConditionalAttribute.cs
- StateChangeEvent.cs
- APCustomTypeDescriptor.cs
- CLSCompliantAttribute.cs
- _BasicClient.cs
- AttributeCollection.cs
- QualificationDataItem.cs
- AnonymousIdentificationSection.cs
- LayoutEngine.cs
- Attributes.cs
- RenderingEventArgs.cs
- HttpResponse.cs
- XamlGridLengthSerializer.cs
- MultipleViewProviderWrapper.cs
- CharEnumerator.cs
- ModuleElement.cs
- DoubleAnimationUsingPath.cs
- SecureConversationServiceCredential.cs
- SchemaObjectWriter.cs
- SchemaHelper.cs
- DataGridDetailsPresenter.cs
- EditingCommands.cs
- ImageFormatConverter.cs
- SHA512.cs
- ContainerSelectorBehavior.cs
- DataTableTypeConverter.cs
- MissingMemberException.cs
- CacheVirtualItemsEvent.cs
- ObjectMemberMapping.cs
- SingleAnimationUsingKeyFrames.cs
- ChannelDispatcher.cs
- EntityClientCacheEntry.cs
- _UriTypeConverter.cs
- XmlSubtreeReader.cs
- TemplateField.cs
- HMACRIPEMD160.cs
- HTMLTagNameToTypeMapper.cs
- SiteMapProvider.cs
- DrawListViewColumnHeaderEventArgs.cs
- GridViewUpdateEventArgs.cs
- ItemsChangedEventArgs.cs
- TimeoutConverter.cs
- UpdateProgress.cs
- Rect3D.cs
- MutexSecurity.cs
- XmlCollation.cs
- OptimisticConcurrencyException.cs
- XmlSchemaInclude.cs
- DefaultEvaluationContext.cs
- IdentitySection.cs
- Sentence.cs
- RankException.cs
- NumberFormatter.cs
- PrivateFontCollection.cs
- CachingHintValidation.cs
- BufferedMessageWriter.cs
- CompareValidator.cs
- SqlSelectStatement.cs
- MULTI_QI.cs
- LogAppendAsyncResult.cs
- TextChange.cs
- KeySpline.cs
- loginstatus.cs
- DoubleConverter.cs
- CompilationUtil.cs
- UserControl.cs