Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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 ( 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlByteStreamReader.cs
- TextElement.cs
- FullTextBreakpoint.cs
- bindurihelper.cs
- BooleanSwitch.cs
- ArgumentNullException.cs
- CodeSnippetTypeMember.cs
- CellQuery.cs
- SystemWebExtensionsSectionGroup.cs
- CryptoProvider.cs
- HttpListenerPrefixCollection.cs
- MetadataItemEmitter.cs
- CngAlgorithm.cs
- RoleService.cs
- AdapterDictionary.cs
- Rule.cs
- DataKeyCollection.cs
- SqlParameterCollection.cs
- PDBReader.cs
- SchemaImporter.cs
- XmlSchemaObject.cs
- RadioButtonFlatAdapter.cs
- UInt16Converter.cs
- UntrustedRecipientException.cs
- MailWebEventProvider.cs
- XmlILConstructAnalyzer.cs
- UntypedNullExpression.cs
- AutomationFocusChangedEventArgs.cs
- SchemaLookupTable.cs
- CharEntityEncoderFallback.cs
- RubberbandSelector.cs
- UserControl.cs
- Rijndael.cs
- LockedActivityGlyph.cs
- DependencyObjectType.cs
- NavigationPropertyEmitter.cs
- DbConnectionOptions.cs
- PeerCollaboration.cs
- ConfigXmlElement.cs
- CaseCqlBlock.cs
- ItemPager.cs
- SevenBitStream.cs
- AssemblyAttributesGoHere.cs
- DbParameterCollection.cs
- WizardPanel.cs
- DependencyPropertyHelper.cs
- ParallelQuery.cs
- XmlSerializationWriter.cs
- ExceptionUtil.cs
- BaseUriHelper.cs
- BuildManager.cs
- MachineSettingsSection.cs
- AssociationType.cs
- DefinitionBase.cs
- GridViewColumnCollectionChangedEventArgs.cs
- TaskForm.cs
- FormViewDeletedEventArgs.cs
- WebPartExportVerb.cs
- ParallelActivityDesigner.cs
- DnsPermission.cs
- ButtonRenderer.cs
- PeerTransportListenAddressValidator.cs
- CustomValidator.cs
- XmlSigningNodeWriter.cs
- _ProxyRegBlob.cs
- querybuilder.cs
- Overlapped.cs
- ListenerServiceInstallComponent.cs
- GeneralTransform3DCollection.cs
- LambdaCompiler.Address.cs
- PngBitmapEncoder.cs
- ScaleTransform.cs
- Command.cs
- MaskedTextBox.cs
- NativeMethods.cs
- ClientOptions.cs
- Menu.cs
- SqlDataSourceFilteringEventArgs.cs
- DataGridViewRowPostPaintEventArgs.cs
- OleDbError.cs
- KeyEventArgs.cs
- ZipIORawDataFileBlock.cs
- ComponentManagerBroker.cs
- QilLoop.cs
- HostingEnvironmentSection.cs
- HexParser.cs
- CodeChecksumPragma.cs
- Msec.cs
- IsolatedStorageFile.cs
- ReturnEventArgs.cs
- TransportSecurityBindingElement.cs
- TaskScheduler.cs
- EntityDataSourceState.cs
- ContentPosition.cs
- WebHttpElement.cs
- CqlErrorHelper.cs
- TypeConverterHelper.cs
- ActivityExecutor.cs
- DesignBindingValueUIHandler.cs
- ParsedRoute.cs