Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Resources / __FastResourceComparer.cs / 1 / __FastResourceComparer.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: FastResourceComparer ** ** ** Purpose: A collection of quick methods for comparing ** resource keys (strings) ** ** ===========================================================*/ namespace System.Resources { using System; using System.Collections; using System.Collections.Generic; internal sealed class FastResourceComparer : IComparer, IEqualityComparer, IComparer, IEqualityComparer { internal static readonly FastResourceComparer Default = new FastResourceComparer(); // Implements IHashCodeProvider too, due to Hashtable requirements. public int GetHashCode(Object key) { String s = (String) key; return FastResourceComparer.HashFunction(s); } public int GetHashCode(String key) { return FastResourceComparer.HashFunction(key); } // This hash function MUST be publically documented with the resource // file format, AND we may NEVER change this hash function's return // value (without changing the file format). internal static int HashFunction(String key) { // Never change this hash function. We must standardize it so that // others can read & write our .resources files. Additionally, we // have a copy of it in InternalResGen as well. uint hash = 5381; for(int i=0; i bCharLength) numChars = bCharLength; if (bCharLength == 0) // Can't use fixed on a 0-element array. return (a.Length == 0) ? 0 : -1; fixed(byte* pb = bytes) { byte *pChar = pb; while (i < numChars && r == 0) { // little endian format int b = pChar[0] | pChar[1] << 8; r = a[i++] - b; pChar += sizeof(char); } } if (r != 0) return r; return a.Length - bCharLength; } public static int CompareOrdinal(byte[] bytes, int aCharLength, String b) { return -CompareOrdinal(b, bytes, aCharLength); } // This method is to handle potentially misaligned data accesses. // The byte* must point to little endian Unicode characters. internal unsafe static int CompareOrdinal(byte* a, int byteLen, String b) { BCLDebug.Assert((byteLen & 1) == 0, "CompareOrdinal is expecting a UTF-16 string length, which must be even!"); BCLDebug.Assert(a != null && b != null, "Null args not allowed."); BCLDebug.Assert(byteLen >= 0, "byteLen must be non-negative."); int r = 0; int i = 0; // Compare the min length # of characters, then return length diffs. int numChars = byteLen >> 1; if (numChars > b.Length) numChars = b.Length; while(i < numChars && r == 0) { // Must compare character by character, not byte by byte. char aCh = (char) (*a++ | (*a++ << 8)); r = aCh - b[i++]; } if (r != 0) return r; return byteLen - b.Length * 2; } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AdRotator.cs
- LocatorBase.cs
- validation.cs
- DataSet.cs
- XmlSchemaAll.cs
- PageAdapter.cs
- CellPartitioner.cs
- TemplatePartAttribute.cs
- WindowsStatic.cs
- StringAnimationUsingKeyFrames.cs
- WindowsSecurityToken.cs
- XXXInfos.cs
- ModuleBuilderData.cs
- DBParameter.cs
- TextBox.cs
- UrlMappingCollection.cs
- EntryPointNotFoundException.cs
- PageThemeBuildProvider.cs
- WebPartZone.cs
- Menu.cs
- OdbcReferenceCollection.cs
- EffectiveValueEntry.cs
- LinearGradientBrush.cs
- BitmapEffectRenderDataResource.cs
- ShapeTypeface.cs
- Point.cs
- ConfigXmlWhitespace.cs
- RowUpdatedEventArgs.cs
- SystemTcpConnection.cs
- ConsumerConnectionPoint.cs
- CustomError.cs
- HtmlTableCellCollection.cs
- NavigationWindowAutomationPeer.cs
- AccessViolationException.cs
- GroupItemAutomationPeer.cs
- ExceptionRoutedEventArgs.cs
- CommonProperties.cs
- ScaleTransform3D.cs
- HandlerElementCollection.cs
- SinglePhaseEnlistment.cs
- RepeaterItemCollection.cs
- figurelengthconverter.cs
- UniqueIdentifierService.cs
- TextTreeUndoUnit.cs
- EntityDescriptor.cs
- ProgressBar.cs
- SafePEFileHandle.cs
- ConfigurationManagerInternalFactory.cs
- ContractNamespaceAttribute.cs
- DataConnectionHelper.cs
- ComponentEvent.cs
- _UncName.cs
- RepeatButton.cs
- WebPartConnectionsConnectVerb.cs
- RowUpdatedEventArgs.cs
- EntityDataSourceSelectedEventArgs.cs
- WindowsStatusBar.cs
- StrokeRenderer.cs
- SafeNativeMethods.cs
- filewebrequest.cs
- CoordinationService.cs
- XmlExtensionFunction.cs
- tabpagecollectioneditor.cs
- XmlException.cs
- PropertyValueChangedEvent.cs
- Tablet.cs
- MatrixUtil.cs
- GridItemCollection.cs
- ZipIOLocalFileDataDescriptor.cs
- XmlMemberMapping.cs
- AppDomain.cs
- CodeCompiler.cs
- FormsAuthenticationUserCollection.cs
- BooleanFacetDescriptionElement.cs
- WindowsToolbarItemAsMenuItem.cs
- DropShadowBitmapEffect.cs
- Encoder.cs
- XmlQueryContext.cs
- MimePart.cs
- DebugTraceHelper.cs
- InputProcessorProfilesLoader.cs
- bidPrivateBase.cs
- ManualResetEvent.cs
- PKCS1MaskGenerationMethod.cs
- Composition.cs
- X509ScopedServiceCertificateElement.cs
- RootBrowserWindow.cs
- Menu.cs
- ParameterCollection.cs
- GridViewColumnHeader.cs
- XPathDocumentBuilder.cs
- MaskedTextProvider.cs
- UndoManager.cs
- SmtpException.cs
- sqlinternaltransaction.cs
- IteratorDescriptor.cs
- PeerApplicationLaunchInfo.cs
- ReadOnlyAttribute.cs
- FixedDSBuilder.cs
- MailSettingsSection.cs