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
- PeerCustomResolverBindingElement.cs
- DescriptionAttribute.cs
- UnknownBitmapEncoder.cs
- LineSegment.cs
- EasingKeyFrames.cs
- WebBrowserBase.cs
- WorkflowPersistenceService.cs
- InstanceDataCollectionCollection.cs
- StatusBarDesigner.cs
- SessionPageStatePersister.cs
- ContentPosition.cs
- FunctionGenerator.cs
- TextRangeEdit.cs
- TimeSpanMinutesConverter.cs
- FormatConvertedBitmap.cs
- TemplateBindingExpressionConverter.cs
- CmsInterop.cs
- FileNameEditor.cs
- SmtpTransport.cs
- ImpersonationContext.cs
- SiteMapNodeItemEventArgs.cs
- ReferenceEqualityComparer.cs
- ManagementPath.cs
- ControlLocalizer.cs
- HttpFileCollection.cs
- BamlStream.cs
- XsdCachingReader.cs
- GridSplitterAutomationPeer.cs
- DataSourceCollectionBase.cs
- InternalBufferOverflowException.cs
- ExpressionContext.cs
- TrackingDataItem.cs
- LoadWorkflowAsyncResult.cs
- WebConfigurationManager.cs
- EncodingNLS.cs
- ObjectMaterializedEventArgs.cs
- ResourcesChangeInfo.cs
- ButtonBaseAdapter.cs
- GlobalProxySelection.cs
- DefaultEventAttribute.cs
- DefaultMemberAttribute.cs
- HtmlAnchor.cs
- EntityProxyTypeInfo.cs
- SafeHandles.cs
- ContextMenuAutomationPeer.cs
- CssClassPropertyAttribute.cs
- OdbcEnvironmentHandle.cs
- ZipPackage.cs
- EntityKeyElement.cs
- MdImport.cs
- _CacheStreams.cs
- GeometryDrawing.cs
- NativeActivityFaultContext.cs
- DataServiceRequestOfT.cs
- _NativeSSPI.cs
- Journaling.cs
- DBCSCodePageEncoding.cs
- InheritanceAttribute.cs
- TypeUsageBuilder.cs
- WpfXamlLoader.cs
- FixedSOMGroup.cs
- CorrelationResolver.cs
- UpdateRecord.cs
- HandlerFactoryCache.cs
- LambdaValue.cs
- TypeForwardedToAttribute.cs
- WebHttpSecurityElement.cs
- RichTextBoxAutomationPeer.cs
- DependencyObjectPropertyDescriptor.cs
- MemoryMappedFileSecurity.cs
- FixedElement.cs
- ApplicationSecurityInfo.cs
- ScrollBarRenderer.cs
- ScriptBehaviorDescriptor.cs
- CommonDialog.cs
- DirectionalLight.cs
- InfoCardArgumentException.cs
- Point3DIndependentAnimationStorage.cs
- TypeFieldSchema.cs
- AxisAngleRotation3D.cs
- ListManagerBindingsCollection.cs
- Size3D.cs
- SizeLimitedCache.cs
- EntityParameter.cs
- DefaultParameterValueAttribute.cs
- Propagator.JoinPropagator.cs
- TextReader.cs
- SecurityCriticalDataForSet.cs
- ParseNumbers.cs
- CssClassPropertyAttribute.cs
- DataGridSortCommandEventArgs.cs
- xdrvalidator.cs
- DATA_BLOB.cs
- EdmComplexTypeAttribute.cs
- Point3D.cs
- DataGridViewCellParsingEventArgs.cs
- UrlAuthFailedErrorFormatter.cs
- SqlMetaData.cs
- UnicodeEncoding.cs
- CompoundFileReference.cs