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
- XmlSchemaCollection.cs
- DefaultSection.cs
- DbgUtil.cs
- Typography.cs
- MultiSelectRootGridEntry.cs
- DesignerObjectListAdapter.cs
- SmtpNegotiateAuthenticationModule.cs
- MultiPropertyDescriptorGridEntry.cs
- RangeContentEnumerator.cs
- ActivityExecutorDelegateInfo.cs
- ScrollEventArgs.cs
- WindowsEditBoxRange.cs
- CapabilitiesState.cs
- SqlFormatter.cs
- Metafile.cs
- assertwrapper.cs
- ProgressBarRenderer.cs
- ADMembershipUser.cs
- ExtensionQuery.cs
- Helpers.cs
- dtdvalidator.cs
- SearchForVirtualItemEventArgs.cs
- SqlDataSourceCache.cs
- CodeStatement.cs
- ArgIterator.cs
- CombinedGeometry.cs
- GorillaCodec.cs
- PeerTransportElement.cs
- PerfCounterSection.cs
- XNodeValidator.cs
- SqlXml.cs
- MenuCommand.cs
- EventProperty.cs
- IndexerNameAttribute.cs
- ChannelManager.cs
- CollectionViewSource.cs
- ValidatorUtils.cs
- OleServicesContext.cs
- RoleGroupCollection.cs
- GridViewRowPresenterBase.cs
- CacheAxisQuery.cs
- IPAddress.cs
- SqlRowUpdatingEvent.cs
- TextDpi.cs
- DataSetMappper.cs
- XmlAttributeCollection.cs
- ParserStack.cs
- CurrencyManager.cs
- InheritablePropertyChangeInfo.cs
- StylusCollection.cs
- SqlNotificationEventArgs.cs
- UTF8Encoding.cs
- TypeDelegator.cs
- DesignerVerbToolStripMenuItem.cs
- ListItemConverter.cs
- GroupItem.cs
- NativeActivityFaultContext.cs
- ListViewCancelEventArgs.cs
- Calendar.cs
- StaticTextPointer.cs
- ValidationContext.cs
- UInt16.cs
- ServiceHost.cs
- IsolatedStoragePermission.cs
- AssociatedControlConverter.cs
- _NegotiateClient.cs
- RadioButtonStandardAdapter.cs
- HtmlElementErrorEventArgs.cs
- TreeViewImageKeyConverter.cs
- AsyncOperationManager.cs
- AppDomainCompilerProxy.cs
- pingexception.cs
- SBCSCodePageEncoding.cs
- MainMenu.cs
- CollectionBuilder.cs
- DataColumnPropertyDescriptor.cs
- GenericTextProperties.cs
- MultiDataTrigger.cs
- TraceHandlerErrorFormatter.cs
- StylusPointDescription.cs
- GridViewUpdateEventArgs.cs
- ExpressionNormalizer.cs
- HttpEncoderUtility.cs
- SafeLibraryHandle.cs
- Binding.cs
- ParserExtension.cs
- LessThanOrEqual.cs
- WebRequestModulesSection.cs
- EntityParameter.cs
- BitmapEffectDrawingContextState.cs
- DbgCompiler.cs
- ClientSponsor.cs
- DispatcherTimer.cs
- EventLogPropertySelector.cs
- EntryIndex.cs
- AssemblyBuilder.cs
- ElementHostPropertyMap.cs
- Lasso.cs
- ToggleButton.cs
- FormViewPageEventArgs.cs