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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ContractListAdapter.cs
- Model3D.cs
- Speller.cs
- AttachmentCollection.cs
- BoundField.cs
- KeyValueConfigurationCollection.cs
- TextCompositionEventArgs.cs
- UpdateCompiler.cs
- FamilyTypeface.cs
- KeyedCollection.cs
- ChangeNode.cs
- RevocationPoint.cs
- TickBar.cs
- RemoveStoryboard.cs
- recordstatescratchpad.cs
- LoginUtil.cs
- HtmlInputCheckBox.cs
- StatusBar.cs
- TailPinnedEventArgs.cs
- DataSysAttribute.cs
- DataGridViewCellMouseEventArgs.cs
- ListDictionaryInternal.cs
- CSharpCodeProvider.cs
- EpmTargetPathSegment.cs
- BinaryFormatter.cs
- Comparer.cs
- NetworkInterface.cs
- WebHttpSecurityModeHelper.cs
- ClickablePoint.cs
- SoapSchemaImporter.cs
- _MultipleConnectAsync.cs
- ApplicationGesture.cs
- Journaling.cs
- M3DUtil.cs
- ExportException.cs
- DynamicDocumentPaginator.cs
- ButtonStandardAdapter.cs
- TagPrefixAttribute.cs
- AuthenticationSection.cs
- XmlValidatingReader.cs
- DataGridViewCellStyleBuilderDialog.cs
- RtfToken.cs
- DrawingContextDrawingContextWalker.cs
- OracleColumn.cs
- MemberInfoSerializationHolder.cs
- TextInfo.cs
- WindowsIPAddress.cs
- TextEditorCharacters.cs
- InputBinder.cs
- MaterialGroup.cs
- Timer.cs
- Monitor.cs
- TraceLog.cs
- CompatibleComparer.cs
- HashAlgorithm.cs
- ActiveXHost.cs
- GeneralTransform.cs
- Function.cs
- UTF32Encoding.cs
- OleDbPropertySetGuid.cs
- KeyboardEventArgs.cs
- OdbcReferenceCollection.cs
- Point3DIndependentAnimationStorage.cs
- TextRangeEditLists.cs
- ProfileEventArgs.cs
- ObjectDataSourceView.cs
- MergeFilterQuery.cs
- TypeConverterHelper.cs
- BindingListCollectionView.cs
- MissingMemberException.cs
- Floater.cs
- WebPartManagerInternals.cs
- HtmlControl.cs
- JsonQueryStringConverter.cs
- ExecutedRoutedEventArgs.cs
- TableSectionStyle.cs
- RSAPKCS1KeyExchangeFormatter.cs
- HttpConfigurationContext.cs
- MarkupCompilePass2.cs
- EntityDesignerUtils.cs
- TypeSystemProvider.cs
- GridViewUpdateEventArgs.cs
- ChangeTracker.cs
- EventLogTraceListener.cs
- SerializationFieldInfo.cs
- StateMachineSubscriptionManager.cs
- DateTimeConverter2.cs
- LazyTextWriterCreator.cs
- SqlMethodTransformer.cs
- XsltException.cs
- GridViewEditEventArgs.cs
- PopOutPanel.cs
- AsmxEndpointPickerExtension.cs
- Sequence.cs
- MetadataCache.cs
- RightsManagementEncryptedStream.cs
- WebScriptServiceHostFactory.cs
- XsltLibrary.cs
- EFAssociationProvider.cs
- XmlNamedNodeMap.cs