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
- TextEditorCharacters.cs
- namescope.cs
- DetailsViewPagerRow.cs
- Rect.cs
- CompareInfo.cs
- SortDescription.cs
- IFlowDocumentViewer.cs
- SqlCharStream.cs
- QueryInterceptorAttribute.cs
- TextCompositionEventArgs.cs
- DiagnosticTraceSource.cs
- TypeLibraryHelper.cs
- EventLogPermissionAttribute.cs
- WorkflowShape.cs
- AutoGeneratedFieldProperties.cs
- DesignerActionPropertyItem.cs
- CheckBox.cs
- AnnotationService.cs
- ListViewGroupItemCollection.cs
- QueryStringParameter.cs
- CharacterBufferReference.cs
- Decimal.cs
- ScrollChrome.cs
- Converter.cs
- UserMapPath.cs
- AspProxy.cs
- MeasureItemEvent.cs
- OutputCacheProfile.cs
- WindowsGraphics.cs
- TrailingSpaceComparer.cs
- ApplicationSecurityInfo.cs
- ObjectItemAssemblyLoader.cs
- MDIClient.cs
- AutomationPatternInfo.cs
- PasswordRecoveryAutoFormat.cs
- ProxyHwnd.cs
- EditorZone.cs
- Int32Storage.cs
- ColorBuilder.cs
- ListViewGroupItemCollection.cs
- PropertyExpression.cs
- ColumnMap.cs
- CacheSection.cs
- XmlObjectSerializerWriteContext.cs
- RequestCacheManager.cs
- ListSourceHelper.cs
- StaticTextPointer.cs
- DefaultMemberAttribute.cs
- ConcurrentStack.cs
- ProfessionalColors.cs
- IPipelineRuntime.cs
- EventSinkActivity.cs
- MimeTypePropertyAttribute.cs
- ToolStripPanelRow.cs
- NaturalLanguageHyphenator.cs
- XmlWrappingReader.cs
- VectorAnimationBase.cs
- RemotingSurrogateSelector.cs
- CroppedBitmap.cs
- WeakReferenceList.cs
- InvalidFilterCriteriaException.cs
- FormViewDeletedEventArgs.cs
- HtmlInputRadioButton.cs
- DesignerDataTable.cs
- BookmarkList.cs
- InvalidPrinterException.cs
- RegisteredArrayDeclaration.cs
- SqlCachedBuffer.cs
- DataGridViewComboBoxColumn.cs
- SqlExpressionNullability.cs
- StringCollection.cs
- DataGridAutomationPeer.cs
- Literal.cs
- CompilerResults.cs
- TrustManager.cs
- SecurityCriticalDataForSet.cs
- NativeObjectSecurity.cs
- PagerSettings.cs
- NumberFormatInfo.cs
- InputMethod.cs
- ItemType.cs
- WebPartAddingEventArgs.cs
- Transform3DCollection.cs
- ObjectTag.cs
- EllipseGeometry.cs
- StrokeFIndices.cs
- MemoryFailPoint.cs
- PassportPrincipal.cs
- DifferencingCollection.cs
- MasterPageCodeDomTreeGenerator.cs
- HandleCollector.cs
- RulePatternOps.cs
- WrapPanel.cs
- XmlChoiceIdentifierAttribute.cs
- InheritanceContextHelper.cs
- XmlUnspecifiedAttribute.cs
- Certificate.cs
- TabPanel.cs
- DataGridItemEventArgs.cs
- DetailsViewUpdatedEventArgs.cs