Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- XamlStream.cs
- SqlErrorCollection.cs
- WeakKeyDictionary.cs
- Font.cs
- OneOfElement.cs
- XamlClipboardData.cs
- ExpressionBinding.cs
- VectorAnimationBase.cs
- ValidateNames.cs
- TableRowCollection.cs
- DrawingContext.cs
- CompilerCollection.cs
- MsmqAuthenticationMode.cs
- ParagraphResult.cs
- InkCanvasFeedbackAdorner.cs
- ExpressionVisitor.cs
- MessageProperties.cs
- PassportIdentity.cs
- DynamicRendererThreadManager.cs
- OleDbDataAdapter.cs
- DBSqlParserColumn.cs
- VirtualDirectoryMapping.cs
- XmlCharCheckingWriter.cs
- AssemblyCacheEntry.cs
- ToolstripProfessionalRenderer.cs
- OdbcException.cs
- CodeChecksumPragma.cs
- ElementUtil.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- EdgeProfileValidation.cs
- FontFamilyConverter.cs
- CheckBoxBaseAdapter.cs
- PointLightBase.cs
- CryptoHandle.cs
- Int16Storage.cs
- RtfToXamlReader.cs
- PropertySegmentSerializationProvider.cs
- Collection.cs
- CellRelation.cs
- Container.cs
- PlainXmlDeserializer.cs
- ProcessProtocolHandler.cs
- FormatException.cs
- File.cs
- RenderData.cs
- PartialCachingAttribute.cs
- OletxTransactionHeader.cs
- SchemaCollectionPreprocessor.cs
- ExcCanonicalXml.cs
- EntityDataReader.cs
- TrackingServices.cs
- HeaderUtility.cs
- DataKeyCollection.cs
- DataObjectEventArgs.cs
- ApplicationFileCodeDomTreeGenerator.cs
- SynchronizationScope.cs
- BaseDataListDesigner.cs
- SignatureToken.cs
- StoreItemCollection.cs
- FlowDocumentPage.cs
- _ConnectStream.cs
- ExtenderProvidedPropertyAttribute.cs
- FontDriver.cs
- TypeHelpers.cs
- MailBnfHelper.cs
- ImageMapEventArgs.cs
- RequestCachePolicyConverter.cs
- RichTextBoxConstants.cs
- httpstaticobjectscollection.cs
- CommandDesigner.cs
- CharacterShapingProperties.cs
- GridViewPageEventArgs.cs
- UnmanagedMemoryStream.cs
- CodeTypeParameterCollection.cs
- TextTreeDeleteContentUndoUnit.cs
- DataTableReader.cs
- TargetInvocationException.cs
- RelatedEnd.cs
- GridViewColumnHeaderAutomationPeer.cs
- TextEditorDragDrop.cs
- XamlTreeBuilderBamlRecordWriter.cs
- ProfileGroupSettings.cs
- Int32RectConverter.cs
- InfoCardAsymmetricCrypto.cs
- SR.cs
- ReturnType.cs
- Timer.cs
- XmlSchemas.cs
- AnnotationStore.cs
- XmlWellformedWriter.cs
- TdsParserStateObject.cs
- BrushValueSerializer.cs
- TreeBuilder.cs
- MediaContextNotificationWindow.cs
- AsmxEndpointPickerExtension.cs
- WSTrustDec2005.cs
- CompositionAdorner.cs
- StorageAssociationSetMapping.cs
- UnsafeNativeMethods.cs
- ShaderEffect.cs