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
- CharUnicodeInfo.cs
- TcpChannelHelper.cs
- ViewStateException.cs
- RootNamespaceAttribute.cs
- PopupEventArgs.cs
- FloaterParagraph.cs
- WpfPayload.cs
- SerializationAttributes.cs
- StoreItemCollection.Loader.cs
- X509Certificate2.cs
- AvTraceFormat.cs
- TCPListener.cs
- SerializationException.cs
- DocumentViewer.cs
- SectionUpdates.cs
- GiveFeedbackEvent.cs
- StringFunctions.cs
- ObjectViewQueryResultData.cs
- OLEDB_Enum.cs
- IndexOutOfRangeException.cs
- XmlAggregates.cs
- DbBuffer.cs
- UserUseLicenseDictionaryLoader.cs
- GcHandle.cs
- EventInfo.cs
- PtsHelper.cs
- IndexedString.cs
- Condition.cs
- HtmlInputFile.cs
- TextInfo.cs
- PagedDataSource.cs
- DataRowExtensions.cs
- DiscoveryMessageSequenceGenerator.cs
- TableRowGroup.cs
- ImageBrush.cs
- Array.cs
- CodeTypeParameter.cs
- QueryReaderSettings.cs
- JulianCalendar.cs
- NameScope.cs
- SystemInformation.cs
- FontSource.cs
- BulletDecorator.cs
- BinaryObjectWriter.cs
- TcpTransportSecurity.cs
- MessageSmuggler.cs
- HttpCapabilitiesBase.cs
- PrintDialog.cs
- DesignerTextViewAdapter.cs
- DrawingState.cs
- AttributeData.cs
- DBConnectionString.cs
- Decimal.cs
- LocatorGroup.cs
- StorageEntityTypeMapping.cs
- DateTimeOffsetAdapter.cs
- ComboBox.cs
- CodeGenerator.cs
- SpecialFolderEnumConverter.cs
- Win32.cs
- CompositeFontParser.cs
- MetadataItemSerializer.cs
- DataObjectFieldAttribute.cs
- RequestCachePolicy.cs
- EdmComplexTypeAttribute.cs
- TreeNodeEventArgs.cs
- Duration.cs
- ScriptResourceHandler.cs
- FontWeight.cs
- LabelDesigner.cs
- FocusWithinProperty.cs
- ConfigurationManager.cs
- TextTreeTextNode.cs
- DataStreamFromComStream.cs
- MultiSelectRootGridEntry.cs
- Monitor.cs
- DefaultProxySection.cs
- ObjectViewEntityCollectionData.cs
- HitTestFilterBehavior.cs
- ByteKeyFrameCollection.cs
- EnumerableRowCollectionExtensions.cs
- SessionEndingEventArgs.cs
- RNGCryptoServiceProvider.cs
- FormsAuthenticationTicket.cs
- SingleObjectCollection.cs
- TraceSource.cs
- AggregateNode.cs
- OpCodes.cs
- DataColumnChangeEvent.cs
- XPathNode.cs
- X509Certificate2.cs
- PeerToPeerException.cs
- XmlResolver.cs
- StaticTextPointer.cs
- URL.cs
- TextEditorContextMenu.cs
- SystemNetHelpers.cs
- VScrollBar.cs
- _PooledStream.cs
- LessThanOrEqual.cs