Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Shared / MS / Utility / ItemMap.cs / 1 / ItemMap.cs
using System; using System.Collections; using System.Diagnostics; namespace MS.Utility { // // ItemStructMap// // Disable warnings about fields never being assigned to // This struct is designed to function with its fields starting at // their default values and without the need of surfacing a constructor // other than the deafult #pragma warning disable 649 internal struct ItemStructMap { public int EnsureEntry(int key) { int index = Search(key); if (index < 0) { // Not found, add Entry // Create initial capacity, if necessary if (Entries == null) { Entries = new Entry[SearchTypeThreshold]; } // Convert not-found index to insertion point index = ~index; Entry[] destEntries = Entries; // Increase capacity, if necessary if ((Count + 1) > Entries.Length) { destEntries = new Entry[Entries.Length * 2]; // Initialize start of new array Array.Copy(Entries, 0, destEntries, 0, index); } // Shift entries to make room for new key at provided insertion point Array.Copy(Entries, index, destEntries, index + 1, Count - index); // Ensure Source and Destination arrays are the same Entries = destEntries; // Clear new entry Entries[index] = EmptyEntry; // Set Entries[index].Key = key; Count++; } return index; } public int Search(int key) { int keyPv = Int32.MaxValue; int iPv = 0; // Use fastest search based on size if (Count > SearchTypeThreshold) { // Binary Search int iLo = 0; int iHi = Count - 1; while (iLo <= iHi) { iPv = (iHi + iLo) / 2; keyPv = Entries[iPv].Key; if (key == keyPv) { return iPv; } if (key < keyPv) { iHi = iPv - 1; } else { iLo = iPv + 1; } } } else { // Linear search for (int i = 0; i < Count; i++) { iPv = i; keyPv = Entries[iPv].Key; if (key == keyPv) { return iPv; } if (key < keyPv) { break; } } } // iPv and keyPv will match and have the last pivot check // Return a negative value whose bitwise compliment // is this index of the first Entry that is greater // than the key passed in (sorted insertion point) if (key > keyPv) { iPv++; } return ~iPv; } private const int SearchTypeThreshold = 4; public Entry[] Entries; public int Count; public struct Entry { public int Key; public T Value; } private static Entry EmptyEntry; } #pragma warning restore 649 } // 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
- SafeProcessHandle.cs
- MessageBox.cs
- SiteMapDataSourceView.cs
- FieldTemplateFactory.cs
- AnnotationObservableCollection.cs
- LocalizabilityAttribute.cs
- LineServices.cs
- UnsafeNativeMethods.cs
- MobileCategoryAttribute.cs
- ToolStripItemImageRenderEventArgs.cs
- ISessionStateStore.cs
- TextElementAutomationPeer.cs
- TextRangeSerialization.cs
- WebPermission.cs
- ListChangedEventArgs.cs
- MergeFailedEvent.cs
- DataFieldConverter.cs
- PaintValueEventArgs.cs
- AlternateView.cs
- SerializerWriterEventHandlers.cs
- SchemaImporterExtensionsSection.cs
- HistoryEventArgs.cs
- AmbientProperties.cs
- EventTrigger.cs
- SchemaHelper.cs
- StaticFileHandler.cs
- WebRequestModulesSection.cs
- AudioDeviceOut.cs
- BuildProvider.cs
- TypeUtil.cs
- DefaultAssemblyResolver.cs
- CompilerWrapper.cs
- objectquery_tresulttype.cs
- ControlCachePolicy.cs
- XmlSchemaParticle.cs
- AssemblyLoader.cs
- Profiler.cs
- RuntimeWrappedException.cs
- AcceleratedTokenAuthenticator.cs
- Error.cs
- MILUtilities.cs
- InheritanceRules.cs
- AudioLevelUpdatedEventArgs.cs
- HttpCapabilitiesBase.cs
- SafeNativeMethodsMilCoreApi.cs
- TreeViewImageKeyConverter.cs
- CoTaskMemSafeHandle.cs
- TemplateBindingExtension.cs
- RowToParametersTransformer.cs
- PropertyIDSet.cs
- ArcSegment.cs
- Rect3DConverter.cs
- CollectionViewGroupInternal.cs
- XmlSchemaDatatype.cs
- DesignerDataStoredProcedure.cs
- WindowsImpersonationContext.cs
- ImageCodecInfo.cs
- RtfToXamlReader.cs
- DiscoveryDocumentLinksPattern.cs
- SpotLight.cs
- OutputCacheProfileCollection.cs
- SettingsProperty.cs
- TdsEnums.cs
- UnSafeCharBuffer.cs
- PerformanceCounterNameAttribute.cs
- ToolStripDropDownClosingEventArgs.cs
- XPathNavigatorKeyComparer.cs
- DateTimeFormatInfo.cs
- CompilationRelaxations.cs
- SplineQuaternionKeyFrame.cs
- LiteralControl.cs
- MouseActionValueSerializer.cs
- DataMember.cs
- AsyncOperationManager.cs
- DiscardableAttribute.cs
- ConversionContext.cs
- Sorting.cs
- XslCompiledTransform.cs
- RepeatBehavior.cs
- assemblycache.cs
- ExpressionEditorAttribute.cs
- SchemeSettingElementCollection.cs
- CaseInsensitiveOrdinalStringComparer.cs
- DataStorage.cs
- ParseNumbers.cs
- Stacktrace.cs
- Schedule.cs
- DesignerCategoryAttribute.cs
- AsyncInvokeOperation.cs
- WindowsSolidBrush.cs
- CharacterMetrics.cs
- ConfigurationValue.cs
- XLinq.cs
- QuaternionRotation3D.cs
- ProcessHostFactoryHelper.cs
- COMException.cs
- Separator.cs
- DockPatternIdentifiers.cs
- ToolboxItemCollection.cs
- DataServiceOperationContext.cs