Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // 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; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SettingsPropertyValue.cs
- SafeCryptHandles.cs
- CancellationHandler.cs
- MoveSizeWinEventHandler.cs
- CriticalHandle.cs
- StaticTextPointer.cs
- SqlTypesSchemaImporter.cs
- ViewBase.cs
- TextTreeTextNode.cs
- XPathArrayIterator.cs
- DocumentPaginator.cs
- Hex.cs
- SubpageParaClient.cs
- StorageEntityContainerMapping.cs
- StorageRoot.cs
- ColorAnimationBase.cs
- FrameSecurityDescriptor.cs
- Rect3DConverter.cs
- MailMessageEventArgs.cs
- UriWriter.cs
- AssemblyUtil.cs
- ReadOnlyDictionary.cs
- DataControlImageButton.cs
- MobileListItem.cs
- XmlSigningNodeWriter.cs
- StylusDevice.cs
- Int16Storage.cs
- HideDisabledControlAdapter.cs
- SqlCommand.cs
- _TimerThread.cs
- Size3DValueSerializer.cs
- SecurityKeyIdentifierClause.cs
- XhtmlBasicTextViewAdapter.cs
- _TimerThread.cs
- SafeWaitHandle.cs
- KeySpline.cs
- ELinqQueryState.cs
- UpnEndpointIdentityExtension.cs
- EntityConnectionStringBuilder.cs
- SqlDataAdapter.cs
- RNGCryptoServiceProvider.cs
- TextBounds.cs
- PasswordBoxAutomationPeer.cs
- BitmapEffectDrawingContent.cs
- EncodingDataItem.cs
- querybuilder.cs
- SQLInt32.cs
- EntityDataSourceDataSelectionPanel.cs
- ModulesEntry.cs
- VerificationAttribute.cs
- QueryStringParameter.cs
- FullTextLine.cs
- SchemaCollectionPreprocessor.cs
- BitmapEffectrendercontext.cs
- ManipulationCompletedEventArgs.cs
- SimpleWebHandlerParser.cs
- ValidateNames.cs
- ObjectIDGenerator.cs
- OutputWindow.cs
- StatusBarDesigner.cs
- COM2FontConverter.cs
- ProjectionCamera.cs
- PropertyDescriptorComparer.cs
- SwitchLevelAttribute.cs
- SetterBaseCollection.cs
- XmlCompatibilityReader.cs
- BitmapSizeOptions.cs
- PopupControlService.cs
- FrameworkContentElement.cs
- CommonRemoteMemoryBlock.cs
- _TLSstream.cs
- DataServiceQuery.cs
- TransactionContext.cs
- DataControlLinkButton.cs
- HelpFileFileNameEditor.cs
- FileDialog_Vista.cs
- GlobalProxySelection.cs
- SmtpNegotiateAuthenticationModule.cs
- FieldNameLookup.cs
- EntityClientCacheEntry.cs
- XmlComplianceUtil.cs
- SponsorHelper.cs
- DefaultWorkflowSchedulerService.cs
- PartialTrustHelpers.cs
- CustomPopupPlacement.cs
- TextMarkerSource.cs
- FragmentNavigationEventArgs.cs
- MSAANativeProvider.cs
- ListManagerBindingsCollection.cs
- TrackingLocationCollection.cs
- NameValueCollection.cs
- EUCJPEncoding.cs
- WindowsPrincipal.cs
- Misc.cs
- ChildrenQuery.cs
- Identity.cs
- externdll.cs
- NumberEdit.cs
- PenThreadWorker.cs
- Registry.cs