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
- LazyLoadBehavior.cs
- ReaderWriterLockSlim.cs
- CodeSnippetTypeMember.cs
- UserControlCodeDomTreeGenerator.cs
- XmlMtomWriter.cs
- SamlConstants.cs
- autovalidator.cs
- Label.cs
- IndentedTextWriter.cs
- DataGridItem.cs
- DefaultProxySection.cs
- AutomationPropertyInfo.cs
- shaperfactoryquerycachekey.cs
- PathFigure.cs
- SupportingTokenSpecification.cs
- HostingEnvironmentException.cs
- ColorConverter.cs
- BitmapEffectDrawingContextState.cs
- SpeechEvent.cs
- MediaEntryAttribute.cs
- TableLayoutStyle.cs
- XmlSchemaAll.cs
- ObjectQueryState.cs
- Exceptions.cs
- GPPOINT.cs
- SelectionEditor.cs
- SystemUnicastIPAddressInformation.cs
- DoWorkEventArgs.cs
- NotifyIcon.cs
- InspectionWorker.cs
- DateTimeFormatInfoScanner.cs
- TextContainer.cs
- DragCompletedEventArgs.cs
- DecoratedNameAttribute.cs
- Expression.DebuggerProxy.cs
- Bold.cs
- LogRestartAreaEnumerator.cs
- TlsnegoTokenAuthenticator.cs
- ScrollChangedEventArgs.cs
- XPathBinder.cs
- JournalNavigationScope.cs
- ComplexTypeEmitter.cs
- SmtpFailedRecipientsException.cs
- Pen.cs
- ProgressBar.cs
- DecoderNLS.cs
- GlobalItem.cs
- ButtonField.cs
- XmlSchemaCollection.cs
- SqlDataSourceSummaryPanel.cs
- InputScope.cs
- TimeSpanOrInfiniteConverter.cs
- ChunkedMemoryStream.cs
- HtmlAnchor.cs
- InvocationExpression.cs
- TextDataBindingHandler.cs
- AutomationPeer.cs
- xdrvalidator.cs
- ColumnMapTranslator.cs
- Currency.cs
- AliasedSlot.cs
- CapabilitiesUse.cs
- HyperLinkStyle.cs
- ErrorItem.cs
- HtmlUtf8RawTextWriter.cs
- TreeIterator.cs
- Rfc2898DeriveBytes.cs
- ObjectCloneHelper.cs
- ZipPackage.cs
- WmlLinkAdapter.cs
- XmlTextAttribute.cs
- SecurityTokenTypes.cs
- ActivityExecutorSurrogate.cs
- CodeDomDesignerLoader.cs
- ArrayTypeMismatchException.cs
- NetworkInterface.cs
- InputLanguage.cs
- EmptyReadOnlyDictionaryInternal.cs
- SqlFileStream.cs
- ToolboxBitmapAttribute.cs
- BitSet.cs
- DynamicDataManager.cs
- ParameterRetriever.cs
- ProviderUtil.cs
- EventLogReader.cs
- PersonalizationStateInfoCollection.cs
- COM2AboutBoxPropertyDescriptor.cs
- DbConnectionPoolOptions.cs
- ArrayExtension.cs
- BitmapMetadataEnumerator.cs
- BookmarkEventArgs.cs
- ObjectSpanRewriter.cs
- EventMappingSettings.cs
- ServicePoint.cs
- Merger.cs
- HelloOperation11AsyncResult.cs
- UseManagedPresentationBindingElementImporter.cs
- Setter.cs
- ArraySortHelper.cs
- MatchAllMessageFilter.cs