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
- MailHeaderInfo.cs
- SelectionHighlightInfo.cs
- DrawingDrawingContext.cs
- SystemIPAddressInformation.cs
- RoleServiceManager.cs
- ViewGenerator.cs
- AssemblyNameProxy.cs
- CodeTypeMemberCollection.cs
- PointConverter.cs
- DiagnosticStrings.cs
- MD5Cng.cs
- VisualBasicSettings.cs
- Win32NamedPipes.cs
- ApplicationTrust.cs
- SqlReferenceCollection.cs
- SizeAnimationUsingKeyFrames.cs
- BaseTemplatedMobileComponentEditor.cs
- BaseParagraph.cs
- Rectangle.cs
- SQLDouble.cs
- WindowsFormsSectionHandler.cs
- WindowsSpinner.cs
- LineServices.cs
- DetailsViewCommandEventArgs.cs
- SQLDateTime.cs
- _KerberosClient.cs
- CodeTypeOfExpression.cs
- PerformanceCounterPermission.cs
- JavaScriptString.cs
- BooleanProjectedSlot.cs
- RepeatButton.cs
- EntityDataSourceViewSchema.cs
- NotImplementedException.cs
- MeasureItemEvent.cs
- DispatcherOperation.cs
- GenericUriParser.cs
- WindowsTreeView.cs
- SqlConnection.cs
- CollectionBase.cs
- XmlSerializerAssemblyAttribute.cs
- MaskInputRejectedEventArgs.cs
- KeyInterop.cs
- ButtonFieldBase.cs
- DefaultClaimSet.cs
- CodeSnippetStatement.cs
- PasswordTextContainer.cs
- GeometryValueSerializer.cs
- NoClickablePointException.cs
- CollaborationHelperFunctions.cs
- SQLSingleStorage.cs
- EntitySqlQueryCacheEntry.cs
- XmlTypeAttribute.cs
- TextEditorThreadLocalStore.cs
- EndEvent.cs
- GuidConverter.cs
- Roles.cs
- log.cs
- DeviceContext2.cs
- CqlGenerator.cs
- ListViewGroupItemCollection.cs
- DataGridState.cs
- PeerNameRecord.cs
- XmlNavigatorFilter.cs
- XmlChildNodes.cs
- BamlLocalizableResource.cs
- AssemblyBuilder.cs
- RoleService.cs
- StorageAssociationTypeMapping.cs
- CompiledRegexRunner.cs
- ProfessionalColors.cs
- ComEventsSink.cs
- UserNameServiceElement.cs
- MenuRendererClassic.cs
- TypeResolvingOptionsAttribute.cs
- XPathParser.cs
- FilteredAttributeCollection.cs
- AdapterSwitches.cs
- StatusBarDrawItemEvent.cs
- SessionState.cs
- EnumMemberAttribute.cs
- HostSecurityManager.cs
- DeploymentSectionCache.cs
- HttpException.cs
- DotAtomReader.cs
- Typeface.cs
- PKCS1MaskGenerationMethod.cs
- SocketPermission.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- UnknownBitmapEncoder.cs
- PanelContainerDesigner.cs
- WorkflowServiceOperationListItem.cs
- UpdateProgress.cs
- WorkflowInstanceAbortedRecord.cs
- TdsParserSessionPool.cs
- Floater.cs
- WebPartVerbsEventArgs.cs
- WorkItem.cs
- SystemGatewayIPAddressInformation.cs
- MatrixCamera.cs
- UnionExpr.cs