Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- _AutoWebProxyScriptEngine.cs
- PersonalizationDictionary.cs
- DataColumnMappingCollection.cs
- SecurityNegotiationException.cs
- MissingSatelliteAssemblyException.cs
- SpStreamWrapper.cs
- DataGridRelationshipRow.cs
- SafeCryptHandles.cs
- Grid.cs
- HtmlTextViewAdapter.cs
- ToolboxComponentsCreatedEventArgs.cs
- UpdatePanelTriggerCollection.cs
- ToolStripGripRenderEventArgs.cs
- ErrorEventArgs.cs
- MatrixValueSerializer.cs
- TypeResolver.cs
- _SslStream.cs
- Aggregates.cs
- CheckedPointers.cs
- SpoolingTaskBase.cs
- SelectionProcessor.cs
- _SpnDictionary.cs
- XPathBinder.cs
- HitTestParameters.cs
- DiagnosticsConfigurationHandler.cs
- TreeViewImageIndexConverter.cs
- ButtonChrome.cs
- DataServiceContext.cs
- WorkflowRuntimeService.cs
- PersistChildrenAttribute.cs
- HttpPostClientProtocol.cs
- WindowsFormsHost.cs
- CompiledIdentityConstraint.cs
- ClientBuildManagerCallback.cs
- Atom10FormatterFactory.cs
- MetadataCollection.cs
- LinkLabelLinkClickedEvent.cs
- IdentityVerifier.cs
- SQLDoubleStorage.cs
- PlainXmlSerializer.cs
- SqlUdtInfo.cs
- PropertiesTab.cs
- WebServicesInteroperability.cs
- XmlCharacterData.cs
- StorageEntityContainerMapping.cs
- Matrix3D.cs
- TraceListeners.cs
- RegexMatch.cs
- EntityClientCacheEntry.cs
- RelationshipConverter.cs
- PropertyBuilder.cs
- AutomationProperty.cs
- AudioSignalProblemOccurredEventArgs.cs
- DeobfuscatingStream.cs
- baseaxisquery.cs
- PageContentAsyncResult.cs
- WebPartEditVerb.cs
- ParameterCollection.cs
- Vector3DCollectionConverter.cs
- OciEnlistContext.cs
- ExcCanonicalXml.cs
- MonthChangedEventArgs.cs
- DeadCharTextComposition.cs
- SqlXml.cs
- ErrorFormatter.cs
- EntityDataSourceSelectingEventArgs.cs
- CorrelationManager.cs
- TemplatedMailWebEventProvider.cs
- DesignerAutoFormatStyle.cs
- SessionConnectionReader.cs
- Wizard.cs
- BitmapData.cs
- SkipQueryOptionExpression.cs
- ExceptionUtil.cs
- TextTreeFixupNode.cs
- StringAnimationBase.cs
- RoutedPropertyChangedEventArgs.cs
- ButtonFieldBase.cs
- SecurityNegotiationException.cs
- TypeDescriptionProviderAttribute.cs
- EndpointConfigContainer.cs
- SqlColumnizer.cs
- MULTI_QI.cs
- StorageScalarPropertyMapping.cs
- OleDbEnumerator.cs
- EqualityComparer.cs
- TextTrailingCharacterEllipsis.cs
- FlowLayout.cs
- LayoutEvent.cs
- _CookieModule.cs
- LinqTreeNodeEvaluator.cs
- SyntaxCheck.cs
- ErrorEventArgs.cs
- ContextMenuService.cs
- EncoderFallback.cs
- shaper.cs
- RepeaterDataBoundAdapter.cs
- DBSqlParser.cs
- QueryContext.cs
- HierarchicalDataBoundControlAdapter.cs