Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Shared / MS / Utility / ItemMap.cs / 1305600 / 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
- ServicePointManager.cs
- SettingsContext.cs
- EntityDesignerBuildProvider.cs
- FixedSOMSemanticBox.cs
- ColorContextHelper.cs
- Variable.cs
- Rijndael.cs
- EncryptedXml.cs
- ConnectionConsumerAttribute.cs
- EntityContainerEmitter.cs
- GeometryDrawing.cs
- ParserExtension.cs
- ImageListStreamer.cs
- WebControlAdapter.cs
- ShapeTypeface.cs
- Permission.cs
- Attributes.cs
- MethodAccessException.cs
- Deflater.cs
- XamlHostingSection.cs
- AdornerPresentationContext.cs
- ProcessMessagesAsyncResult.cs
- IsolatedStorageException.cs
- FileDetails.cs
- EventSinkActivityDesigner.cs
- TextOutput.cs
- ApplicationInfo.cs
- OpenTypeCommon.cs
- XmlSerializationReader.cs
- dataprotectionpermission.cs
- TextEditorLists.cs
- XmlMembersMapping.cs
- ContainerCodeDomSerializer.cs
- PKCS1MaskGenerationMethod.cs
- SMSvcHost.cs
- Authorization.cs
- PointHitTestResult.cs
- IntSecurity.cs
- SmiSettersStream.cs
- ParseChildrenAsPropertiesAttribute.cs
- CacheRequest.cs
- MetadataUtilsSmi.cs
- DeferrableContent.cs
- Effect.cs
- FileFormatException.cs
- ResourceAssociationSet.cs
- HostingEnvironment.cs
- FtpWebResponse.cs
- FilterEventArgs.cs
- SimpleMailWebEventProvider.cs
- DataSourceSelectArguments.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- LineBreakRecord.cs
- FormatSettings.cs
- CategoryValueConverter.cs
- WorkflowInvoker.cs
- ProjectionCamera.cs
- ValueProviderWrapper.cs
- MethodExpr.cs
- ModelMemberCollection.cs
- MemoryPressure.cs
- JournalEntryStack.cs
- querybuilder.cs
- TextUtf8RawTextWriter.cs
- DbgUtil.cs
- LogLogRecordEnumerator.cs
- AppLevelCompilationSectionCache.cs
- WebServiceHost.cs
- ConfigurationStrings.cs
- SuppressMergeCheckAttribute.cs
- CounterCreationDataCollection.cs
- ClientTarget.cs
- XmlSchemaSimpleTypeList.cs
- ServiceOperation.cs
- SymLanguageVendor.cs
- Application.cs
- Registry.cs
- XmlSchema.cs
- DispatcherSynchronizationContext.cs
- Rfc2898DeriveBytes.cs
- UrlAuthorizationModule.cs
- XamlNamespaceHelper.cs
- DbDataSourceEnumerator.cs
- Size3D.cs
- HandlerFactoryCache.cs
- ChangeConflicts.cs
- AnimatedTypeHelpers.cs
- TargetPerspective.cs
- GridEntry.cs
- HyperLinkStyle.cs
- FreeFormDesigner.cs
- Mutex.cs
- DictionaryCustomTypeDescriptor.cs
- ContentPresenter.cs
- DataBindEngine.cs
- TreeViewDesigner.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- MD5.cs
- FontConverter.cs
- SplitterDesigner.cs