Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / 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. 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
- QilDataSource.cs
- CmsUtils.cs
- Span.cs
- SynchronizedInputProviderWrapper.cs
- Page.cs
- WebPartManager.cs
- UpdatePanel.cs
- OrderedDictionary.cs
- Underline.cs
- DataGridViewRowCollection.cs
- BrushValueSerializer.cs
- QueryAccessibilityHelpEvent.cs
- MemberNameValidator.cs
- ImageList.cs
- MSAANativeProvider.cs
- DelegatingStream.cs
- ThreadStateException.cs
- MetadataException.cs
- DataGridViewImageCell.cs
- ZoneIdentityPermission.cs
- Focus.cs
- DataTemplateKey.cs
- MenuItem.cs
- Accessors.cs
- RowCache.cs
- FtpRequestCacheValidator.cs
- AttachedPropertyBrowsableAttribute.cs
- StringReader.cs
- HashHelper.cs
- BasicExpandProvider.cs
- MDIClient.cs
- SafeRegistryHandle.cs
- ToolStripAdornerWindowService.cs
- FormClosingEvent.cs
- FlowDocumentScrollViewer.cs
- FixedSOMTableRow.cs
- CompoundFileStreamReference.cs
- ModelItemDictionaryImpl.cs
- CharacterBuffer.cs
- NamespaceQuery.cs
- WmpBitmapEncoder.cs
- _NTAuthentication.cs
- SynchronizedInputPattern.cs
- TemplatingOptionsDialog.cs
- RSAPKCS1KeyExchangeFormatter.cs
- DbResourceAllocator.cs
- MemoryMappedView.cs
- TableLayoutStyle.cs
- CaseCqlBlock.cs
- UIInitializationException.cs
- TextEndOfSegment.cs
- ProtocolsSection.cs
- JumpList.cs
- CompoundFileDeflateTransform.cs
- Touch.cs
- QilGeneratorEnv.cs
- RestHandlerFactory.cs
- XmlC14NWriter.cs
- ToolStripTextBox.cs
- DataKey.cs
- Transform3DGroup.cs
- UInt64Storage.cs
- RegularExpressionValidator.cs
- TimeoutTimer.cs
- DataGridViewRowsAddedEventArgs.cs
- WrappedIUnknown.cs
- ContainsRowNumberChecker.cs
- XPathChildIterator.cs
- MarkupWriter.cs
- DataProviderNameConverter.cs
- TextServicesProperty.cs
- ServiceBehaviorAttribute.cs
- FontStyle.cs
- FrameworkTextComposition.cs
- VarRemapper.cs
- TextInfo.cs
- Int32Animation.cs
- ObjectIDGenerator.cs
- CaseCqlBlock.cs
- FixedFlowMap.cs
- BinaryMethodMessage.cs
- HostingEnvironmentException.cs
- XmlIncludeAttribute.cs
- EntityDataSourceWizardForm.cs
- FontUnit.cs
- BuildDependencySet.cs
- ItemsPanelTemplate.cs
- LambdaCompiler.ControlFlow.cs
- CodeBlockBuilder.cs
- ToolStripScrollButton.cs
- AppearanceEditorPart.cs
- ColumnMapVisitor.cs
- DesignColumnCollection.cs
- InstanceCollisionException.cs
- URL.cs
- NestedContainer.cs
- MonitorWrapper.cs
- ArgIterator.cs
- UseAttributeSetsAction.cs
- PageContentCollection.cs