Code:
/ FX-1434 / FX-1434 / 1.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
- ImageButton.cs
- ConfigsHelper.cs
- DeclarativeCatalogPartDesigner.cs
- Misc.cs
- Helpers.cs
- FunctionCommandText.cs
- XmlSiteMapProvider.cs
- WindowsIPAddress.cs
- ReadOnlyState.cs
- JoinTreeNode.cs
- Comparer.cs
- TextStore.cs
- ItemTypeToolStripMenuItem.cs
- Underline.cs
- EncodingFallbackAwareXmlTextWriter.cs
- PropertyChangingEventArgs.cs
- AppDomainAttributes.cs
- CheckBox.cs
- ListParagraph.cs
- InputBinder.cs
- NoneExcludedImageIndexConverter.cs
- CryptoConfig.cs
- ConfigXmlSignificantWhitespace.cs
- COM2ExtendedBrowsingHandler.cs
- ToolStripDesigner.cs
- RTLAwareMessageBox.cs
- ObjectDataSourceDisposingEventArgs.cs
- PrintingPermission.cs
- CodeMemberMethod.cs
- UniqueConstraint.cs
- MultipartIdentifier.cs
- DefaultTextStore.cs
- XPathArrayIterator.cs
- QueueException.cs
- AddressingVersion.cs
- InvokeDelegate.cs
- AutoResizedEvent.cs
- MenuItemBinding.cs
- ScrollProperties.cs
- CellIdBoolean.cs
- WorkflowItemPresenter.cs
- Update.cs
- HtmlInputRadioButton.cs
- BindingExpressionUncommonField.cs
- Ref.cs
- XmlSchemaRedefine.cs
- SystemIcmpV6Statistics.cs
- ReferencedCategoriesDocument.cs
- XmlQueryStaticData.cs
- CodeStatement.cs
- MaskInputRejectedEventArgs.cs
- Collection.cs
- SqlFunctions.cs
- CompositeFontParser.cs
- EpmSyndicationContentSerializer.cs
- StorageInfo.cs
- InputReferenceExpression.cs
- FileChangesMonitor.cs
- WorkflowServiceHost.cs
- RuntimeArgumentHandle.cs
- Condition.cs
- XmlNodeList.cs
- VectorCollectionConverter.cs
- CustomExpression.cs
- XmlComplianceUtil.cs
- FixUp.cs
- DataGridCellItemAutomationPeer.cs
- IfAction.cs
- TextViewSelectionProcessor.cs
- DataControlButton.cs
- MailAddressCollection.cs
- TextBoxLine.cs
- SizeChangedEventArgs.cs
- SqlInternalConnectionTds.cs
- SizeChangedInfo.cs
- ContentType.cs
- StickyNoteContentControl.cs
- StringTraceRecord.cs
- NumberSubstitution.cs
- TypeLibConverter.cs
- DynamicResourceExtension.cs
- DetailsViewRowCollection.cs
- ControlOperationInvoker.cs
- RelationalExpressions.cs
- SqlCacheDependencySection.cs
- GZipStream.cs
- CompilerInfo.cs
- WebPartAuthorizationEventArgs.cs
- ClientConfigurationSystem.cs
- Block.cs
- WindowCollection.cs
- DiffuseMaterial.cs
- TextDecorations.cs
- RepeaterCommandEventArgs.cs
- XmlHierarchyData.cs
- FSWPathEditor.cs
- FontWeights.cs
- FormsAuthenticationUser.cs
- HebrewNumber.cs
- XamlFigureLengthSerializer.cs