Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- IndexOutOfRangeException.cs
- MessageContractExporter.cs
- SQLResource.cs
- RecognizedAudio.cs
- ExpressionEditorAttribute.cs
- PropertyFilterAttribute.cs
- CollectionAdapters.cs
- MessageQueuePermissionEntry.cs
- CommentEmitter.cs
- StdValidatorsAndConverters.cs
- XmlDocumentFragment.cs
- RegexReplacement.cs
- Int16AnimationBase.cs
- EditorAttribute.cs
- GiveFeedbackEventArgs.cs
- HMACSHA1.cs
- SchemaDeclBase.cs
- UserControlFileEditor.cs
- RandomNumberGenerator.cs
- ToolStripProgressBar.cs
- PartialArray.cs
- TagNameToTypeMapper.cs
- UnknownWrapper.cs
- XsdValidatingReader.cs
- CancelEventArgs.cs
- Paragraph.cs
- linebase.cs
- PasswordDeriveBytes.cs
- xml.cs
- Variant.cs
- ActivityBindForm.Designer.cs
- CompilerTypeWithParams.cs
- SQLDecimalStorage.cs
- XPathNavigator.cs
- KeyFrames.cs
- TextSegment.cs
- Cursors.cs
- FunctionQuery.cs
- Int64Storage.cs
- ConfigurationElement.cs
- PreviewPrintController.cs
- SolidBrush.cs
- ListViewInsertionMark.cs
- TextHidden.cs
- ProviderBase.cs
- RuntimeConfig.cs
- SourceFileInfo.cs
- ExceptionCollection.cs
- AccessViolationException.cs
- PrinterResolution.cs
- DllNotFoundException.cs
- TextBoxView.cs
- SplashScreenNativeMethods.cs
- DelayedRegex.cs
- WebScriptServiceHostFactory.cs
- SerializableAttribute.cs
- ImageEditor.cs
- SqlTriggerContext.cs
- ParserHooks.cs
- GZipUtils.cs
- AutoResetEvent.cs
- Selection.cs
- ClientEventManager.cs
- _PooledStream.cs
- FlagsAttribute.cs
- DiscoveryReference.cs
- DashStyle.cs
- AxHost.cs
- RuntimeDelegateArgument.cs
- HyperLinkStyle.cs
- ToolBarButtonClickEvent.cs
- CacheMemory.cs
- ParserContext.cs
- InternalDispatchObject.cs
- ChildDocumentBlock.cs
- NamedObject.cs
- ElementHost.cs
- AppSettingsReader.cs
- WebPartHelpVerb.cs
- TimerExtension.cs
- BrowserCapabilitiesFactory35.cs
- ConnectionStringsSection.cs
- DispatcherExceptionFilterEventArgs.cs
- DataKey.cs
- PieceNameHelper.cs
- Number.cs
- SqlFormatter.cs
- SrgsGrammar.cs
- querybuilder.cs
- CommandValueSerializer.cs
- ControlSerializer.cs
- DocumentGridContextMenu.cs
- ClientSettingsSection.cs
- SqlUnionizer.cs
- SpecialFolderEnumConverter.cs
- Triangle.cs
- AccessControlEntry.cs
- TextEditorDragDrop.cs
- DrawingContextDrawingContextWalker.cs
- ExternalFile.cs