Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Resources / __FastResourceComparer.cs / 1305376 / __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; using System.Diagnostics.Contracts; 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; } [System.Security.SecurityCritical] // auto-generated 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. [System.Security.SecurityCritical] // auto-generated internal unsafe static int CompareOrdinal(byte* a, int byteLen, String b) { Contract.Assert((byteLen & 1) == 0, "CompareOrdinal is expecting a UTF-16 string length, which must be even!"); Contract.Assert(a != null && b != null, "Null args not allowed."); Contract.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; using System.Diagnostics.Contracts; 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; } [System.Security.SecurityCritical] // auto-generated 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. [System.Security.SecurityCritical] // auto-generated internal unsafe static int CompareOrdinal(byte* a, int byteLen, String b) { Contract.Assert((byteLen & 1) == 0, "CompareOrdinal is expecting a UTF-16 string length, which must be even!"); Contract.Assert(a != null && b != null, "Null args not allowed."); Contract.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
- Highlights.cs
- CacheRequest.cs
- SafeNativeMethods.cs
- FormView.cs
- SetStoryboardSpeedRatio.cs
- FixedHighlight.cs
- DataGridPageChangedEventArgs.cs
- SQLDateTimeStorage.cs
- MemberRestriction.cs
- ControlType.cs
- SByteStorage.cs
- Update.cs
- HitTestWithPointDrawingContextWalker.cs
- XmlSchemaInfo.cs
- GrammarBuilderBase.cs
- WindowsEditBox.cs
- CryptoStream.cs
- StringFunctions.cs
- WebSysDescriptionAttribute.cs
- Menu.cs
- SQLConvert.cs
- CheckBoxField.cs
- DataSourceView.cs
- SubstitutionResponseElement.cs
- EditorAttribute.cs
- ImageIndexConverter.cs
- IgnoreFlushAndCloseStream.cs
- Privilege.cs
- ScriptingSectionGroup.cs
- DrawingState.cs
- SafeHandles.cs
- EntityDataSourceWrapper.cs
- DirectoryGroupQuery.cs
- IndexOutOfRangeException.cs
- DecoderNLS.cs
- PathStreamGeometryContext.cs
- PriorityBindingExpression.cs
- InteropAutomationProvider.cs
- DataListComponentEditor.cs
- ResourceKey.cs
- AssemblyAttributesGoHere.cs
- XmlTypeMapping.cs
- BookmarkWorkItem.cs
- ErrorHandlerFaultInfo.cs
- XPathArrayIterator.cs
- HttpSysSettings.cs
- CaretElement.cs
- OleDbDataAdapter.cs
- RuntimeHelpers.cs
- DataSourceXmlElementAttribute.cs
- DataGridViewRowPostPaintEventArgs.cs
- DropShadowBitmapEffect.cs
- PhotoPrintingIntent.cs
- SpnEndpointIdentityExtension.cs
- ClientScriptManagerWrapper.cs
- TimeoutHelper.cs
- XmlUtil.cs
- FloatAverageAggregationOperator.cs
- FormatVersion.cs
- Pair.cs
- Rect3D.cs
- UnsafeNativeMethods.cs
- XmlAutoDetectWriter.cs
- DeviceSpecificDesigner.cs
- LoadGrammarCompletedEventArgs.cs
- RadioButtonAutomationPeer.cs
- HwndPanningFeedback.cs
- HandlerWithFactory.cs
- CssTextWriter.cs
- shaper.cs
- CommandValueSerializer.cs
- Maps.cs
- QilLoop.cs
- EntityCommandCompilationException.cs
- RSAOAEPKeyExchangeFormatter.cs
- DomainConstraint.cs
- MergePropertyDescriptor.cs
- BindingContext.cs
- PolicyUnit.cs
- HttpListenerRequestUriBuilder.cs
- NaturalLanguageHyphenator.cs
- ZoneLinkButton.cs
- FrameworkReadOnlyPropertyMetadata.cs
- ValidationError.cs
- DataMember.cs
- EncoderExceptionFallback.cs
- DescendantOverDescendantQuery.cs
- ComPlusContractBehavior.cs
- IpcClientChannel.cs
- MsmqMessageSerializationFormat.cs
- QuerySafeNavigator.cs
- Walker.cs
- TransactionTraceIdentifier.cs
- ParseChildrenAsPropertiesAttribute.cs
- FilterException.cs
- FileRecordSequenceHelper.cs
- RepeaterCommandEventArgs.cs
- DataServiceCollectionOfT.cs
- SqlException.cs
- PropertyChangeTracker.cs