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
- BindingValueChangedEventArgs.cs
- HostedHttpRequestAsyncResult.cs
- WebPartExportVerb.cs
- ActivityCollectionMarkupSerializer.cs
- DataSourceControlBuilder.cs
- EnumMember.cs
- MobileControlBuilder.cs
- ToolStripSeparator.cs
- RTLAwareMessageBox.cs
- WizardForm.cs
- RestHandlerFactory.cs
- TemplatedMailWebEventProvider.cs
- EnvelopeVersion.cs
- OledbConnectionStringbuilder.cs
- DataGridViewMethods.cs
- XmlImplementation.cs
- Merger.cs
- TextModifierScope.cs
- dataSvcMapFileLoader.cs
- EventKeyword.cs
- CollectionChangeEventArgs.cs
- ModifierKeysConverter.cs
- _HeaderInfo.cs
- DiscoveryMessageSequenceCD1.cs
- FunctionNode.cs
- FormatException.cs
- MultipleViewPattern.cs
- NullRuntimeConfig.cs
- ReachDocumentSequenceSerializerAsync.cs
- FloaterParagraph.cs
- XmlByteStreamWriter.cs
- TextWriter.cs
- SiteMapNode.cs
- SystemResources.cs
- IgnoreFileBuildProvider.cs
- CodeSnippetExpression.cs
- XmlSerializerSection.cs
- Utility.cs
- DeclarativeCatalogPartDesigner.cs
- SqlComparer.cs
- TableItemStyle.cs
- DecimalStorage.cs
- SHA384Managed.cs
- LoopExpression.cs
- EdmItemCollection.OcAssemblyCache.cs
- CryptoProvider.cs
- RtfNavigator.cs
- SHA256Cng.cs
- XsltArgumentList.cs
- UserControlFileEditor.cs
- X509PeerCertificateElement.cs
- GatewayDefinition.cs
- TableLayoutStyleCollection.cs
- SchemaTableColumn.cs
- ObjectDataSourceStatusEventArgs.cs
- SQLSingle.cs
- AttachedProperty.cs
- ListItemsCollectionEditor.cs
- GridViewAutoFormat.cs
- FileSecurity.cs
- EventLogPermission.cs
- TextRangeEditLists.cs
- HtmlShimManager.cs
- DataGridViewButtonCell.cs
- X509Utils.cs
- Bidi.cs
- Transaction.cs
- MouseButton.cs
- FolderLevelBuildProvider.cs
- TransactionFormatter.cs
- DTCTransactionManager.cs
- Color.cs
- Identity.cs
- ModelService.cs
- ClientConfigPaths.cs
- PenContexts.cs
- PlanCompiler.cs
- MimeWriter.cs
- RuntimeHelpers.cs
- VirtualizingPanel.cs
- TreeViewItemAutomationPeer.cs
- ToolStripDropDownButton.cs
- EdmSchemaError.cs
- SmtpSection.cs
- DependsOnAttribute.cs
- StatusBarPanelClickEvent.cs
- Splitter.cs
- GridViewDeletedEventArgs.cs
- ObjectSet.cs
- SharedStatics.cs
- contentDescriptor.cs
- BitVector32.cs
- CertificateManager.cs
- QueryValue.cs
- HMACSHA256.cs
- shaperfactoryquerycacheentry.cs
- RelationshipConverter.cs
- BinaryFormatterWriter.cs
- ForeignConstraint.cs
- WebPartDeleteVerb.cs