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
- CriticalHandle.cs
- DiagnosticEventProvider.cs
- FormattedTextSymbols.cs
- HostTimeoutsElement.cs
- LinqDataSourceDisposeEventArgs.cs
- IISUnsafeMethods.cs
- EntityDataSourceMemberPath.cs
- SchemaImporterExtensionElement.cs
- InvalidEnumArgumentException.cs
- SByte.cs
- Grant.cs
- DependentList.cs
- JsonQNameDataContract.cs
- ConfigurationManager.cs
- LoginUtil.cs
- Matrix3DStack.cs
- CodeCommentStatement.cs
- WebPartEditorApplyVerb.cs
- _CommandStream.cs
- MainMenu.cs
- Base64Stream.cs
- NavigationWindow.cs
- Storyboard.cs
- ClientOptions.cs
- SizeConverter.cs
- QueryStack.cs
- UnaryNode.cs
- RayMeshGeometry3DHitTestResult.cs
- RTLAwareMessageBox.cs
- RepeaterItemEventArgs.cs
- DelegateHelpers.Generated.cs
- ProxyGenerator.cs
- HostingEnvironment.cs
- HuffmanTree.cs
- JsonReader.cs
- TryExpression.cs
- TabletDevice.cs
- ObjectConverter.cs
- ParameterModifier.cs
- CssTextWriter.cs
- UserMapPath.cs
- AssemblyNameProxy.cs
- DetailsViewUpdateEventArgs.cs
- basenumberconverter.cs
- Stack.cs
- MemberInfoSerializationHolder.cs
- EdmPropertyAttribute.cs
- ToolStrip.cs
- DefaultValidator.cs
- InheritanceUI.cs
- TraceHwndHost.cs
- SiteMapHierarchicalDataSourceView.cs
- BamlTreeMap.cs
- SecUtil.cs
- UpnEndpointIdentity.cs
- AssemblyHash.cs
- ColumnPropertiesGroup.cs
- DynamicILGenerator.cs
- ToolboxComponentsCreatingEventArgs.cs
- XmlReturnReader.cs
- BitmapEffectCollection.cs
- DeferredElementTreeState.cs
- itemelement.cs
- TimeSpanSecondsConverter.cs
- ImageKeyConverter.cs
- ManagementDateTime.cs
- XmlAnyElementAttribute.cs
- SqlGatherProducedAliases.cs
- CalendarDayButton.cs
- TextEditorThreadLocalStore.cs
- ValuePatternIdentifiers.cs
- DrawingContextDrawingContextWalker.cs
- SqlConnectionPoolProviderInfo.cs
- JoinCqlBlock.cs
- ContentValidator.cs
- FontStretches.cs
- XmlSchemaDatatype.cs
- DispatchChannelSink.cs
- DataShape.cs
- TraceSwitch.cs
- Resources.Designer.cs
- HttpProfileBase.cs
- SqlClientMetaDataCollectionNames.cs
- XmlSchemaProviderAttribute.cs
- WebReferencesBuildProvider.cs
- AesCryptoServiceProvider.cs
- RC2CryptoServiceProvider.cs
- GcSettings.cs
- ConstructorExpr.cs
- SafeNativeMethodsOther.cs
- SocketPermission.cs
- HttpContextBase.cs
- DataRowComparer.cs
- SerializationEventsCache.cs
- VariableQuery.cs
- DataGridViewDataErrorEventArgs.cs
- ModuleBuilder.cs
- SamlAuthenticationClaimResource.cs
- CodeAssignStatement.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs