Code:
/ FX-1434 / FX-1434 / 1.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
- UpdateRecord.cs
- DesignerValidationSummaryAdapter.cs
- DataSourceXmlSubItemAttribute.cs
- WpfSharedXamlSchemaContext.cs
- CodeCastExpression.cs
- XmlMapping.cs
- HtmlInputControl.cs
- LayoutDump.cs
- storepermission.cs
- GroupByExpressionRewriter.cs
- AnnotationObservableCollection.cs
- InvalidPrinterException.cs
- MetadataArtifactLoader.cs
- WindowInteropHelper.cs
- EventManager.cs
- BreadCrumbTextConverter.cs
- MimeTypePropertyAttribute.cs
- BatchStream.cs
- newinstructionaction.cs
- SchemaMerger.cs
- Pair.cs
- PersistenceTypeAttribute.cs
- PartialCachingControl.cs
- CacheForPrimitiveTypes.cs
- TabItemAutomationPeer.cs
- PhysicalOps.cs
- TTSVoice.cs
- DataServiceKeyAttribute.cs
- FontFamily.cs
- DataBindingHandlerAttribute.cs
- Adorner.cs
- BufferedResponseStream.cs
- ConnectionManagementSection.cs
- ConnectionPoolManager.cs
- SqlTypesSchemaImporter.cs
- WindowsSspiNegotiation.cs
- DoubleLinkListEnumerator.cs
- XmlChildNodes.cs
- FixedSOMElement.cs
- StylusPointDescription.cs
- PageCatalogPart.cs
- WindowsListViewGroup.cs
- XmlSecureResolver.cs
- QilInvoke.cs
- UndoUnit.cs
- PerformanceCounterPermissionEntry.cs
- DataSourceCacheDurationConverter.cs
- ProjectionPruner.cs
- LabelLiteral.cs
- Helpers.cs
- SrgsRulesCollection.cs
- BoundColumn.cs
- ThemeDirectoryCompiler.cs
- ImageFormat.cs
- ByteStream.cs
- StatusStrip.cs
- DBSchemaRow.cs
- DesignerActionMethodItem.cs
- LogRecordSequence.cs
- BamlResourceContent.cs
- Stacktrace.cs
- IDQuery.cs
- EventData.cs
- SafeArrayTypeMismatchException.cs
- CapabilitiesAssignment.cs
- PolicyManager.cs
- ConnectionPoolManager.cs
- Internal.cs
- FilteredXmlReader.cs
- RawUIStateInputReport.cs
- MethodBody.cs
- LambdaCompiler.cs
- cookiecollection.cs
- ErrorHandler.cs
- ILGenerator.cs
- TreeView.cs
- XmlSerializationGeneratedCode.cs
- ScrollBar.cs
- DataListAutoFormat.cs
- Dispatcher.cs
- TypedRowGenerator.cs
- HashAlgorithm.cs
- ScrollViewer.cs
- FirstMatchCodeGroup.cs
- CodeRegionDirective.cs
- SearchExpression.cs
- SectionInput.cs
- LoginUtil.cs
- UIElement.cs
- MemoryPressure.cs
- SettingsBindableAttribute.cs
- Registry.cs
- CommonDialog.cs
- RepeaterCommandEventArgs.cs
- CalendarDesigner.cs
- CommunicationObjectAbortedException.cs
- PartitionResolver.cs
- FixUp.cs
- ObjectList.cs
- Panel.cs