Code:
/ DotNET / DotNET / 8.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
- BypassElement.cs
- SmtpNtlmAuthenticationModule.cs
- FormsAuthenticationCredentials.cs
- Source.cs
- WindowsFormsHostPropertyMap.cs
- Int32Rect.cs
- EventSinkHelperWriter.cs
- ClientRuntimeConfig.cs
- MaterializeFromAtom.cs
- ZoomPercentageConverter.cs
- ContentControl.cs
- ToolStripDropDownItem.cs
- NamedPipeTransportSecurity.cs
- PerfCounters.cs
- Int32AnimationBase.cs
- CallSiteOps.cs
- PersonalizationDictionary.cs
- CellParaClient.cs
- MailDefinition.cs
- DecoderBestFitFallback.cs
- FileNotFoundException.cs
- LoginUtil.cs
- TreeNodeClickEventArgs.cs
- DataGridRow.cs
- FlowDocumentView.cs
- EmptyEnumerator.cs
- SapiRecoContext.cs
- _OverlappedAsyncResult.cs
- GenericTypeParameterBuilder.cs
- MessageFormatterConverter.cs
- JulianCalendar.cs
- LogAppendAsyncResult.cs
- SharedStream.cs
- PointLightBase.cs
- CurrentChangedEventManager.cs
- X509SubjectKeyIdentifierClause.cs
- ProjectionPruner.cs
- WebPartUserCapability.cs
- IdleTimeoutMonitor.cs
- StaticSiteMapProvider.cs
- UriExt.cs
- DrawTreeNodeEventArgs.cs
- ColumnCollection.cs
- ConfigsHelper.cs
- SafeMILHandle.cs
- Tokenizer.cs
- XmlSchemaElement.cs
- ListControlStringCollectionEditor.cs
- _ConnectOverlappedAsyncResult.cs
- WebPartZone.cs
- CodeNamespaceCollection.cs
- EntityConnectionStringBuilderItem.cs
- FlowLayoutPanelDesigner.cs
- XamlSerializerUtil.cs
- StrongNameMembershipCondition.cs
- IgnoreSectionHandler.cs
- BuilderPropertyEntry.cs
- RegistrySecurity.cs
- Configuration.cs
- SQLMoneyStorage.cs
- AuthenticationException.cs
- SafeFileMappingHandle.cs
- XomlCompilerResults.cs
- DateTimeValueSerializer.cs
- XPathNodeInfoAtom.cs
- DiffuseMaterial.cs
- EnumDataContract.cs
- Rotation3D.cs
- ExeConfigurationFileMap.cs
- ServiceObjectContainer.cs
- Events.cs
- safesecurityhelperavalon.cs
- WpfSharedBamlSchemaContext.cs
- MSAANativeProvider.cs
- DBCommandBuilder.cs
- UDPClient.cs
- ProxyWebPartManagerDesigner.cs
- BigInt.cs
- CssTextWriter.cs
- LocalFileSettingsProvider.cs
- ParallelDesigner.cs
- BufferedStream2.cs
- XsltCompileContext.cs
- DataGridViewCellConverter.cs
- HttpCookieCollection.cs
- ConnectionStringSettingsCollection.cs
- WebRequestModuleElement.cs
- SoapObjectInfo.cs
- PerformanceCounterManager.cs
- KnownTypes.cs
- DataAdapter.cs
- EntityDataSourceSelectingEventArgs.cs
- DecimalConverter.cs
- DropTarget.cs
- __Filters.cs
- Duration.cs
- ConfigurationElement.cs
- XmlWellformedWriterHelpers.cs
- MimeMultiPart.cs
- WebPartVerbsEventArgs.cs