Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SamlSubjectStatement.cs
- HwndHostAutomationPeer.cs
- CheckoutException.cs
- BinaryReader.cs
- ExecutionEngineException.cs
- CfgParser.cs
- UIPermission.cs
- SecurityPolicySection.cs
- ContentOnlyMessage.cs
- MoveSizeWinEventHandler.cs
- RC2.cs
- ServiceHttpHandlerFactory.cs
- WaitForChangedResult.cs
- RefType.cs
- LongMinMaxAggregationOperator.cs
- RectAnimationUsingKeyFrames.cs
- translator.cs
- EntityDataSourceState.cs
- SctClaimSerializer.cs
- BooleanStorage.cs
- QuaternionKeyFrameCollection.cs
- WebPartsSection.cs
- BitmapEffectDrawingContextWalker.cs
- ProxyWebPartManagerDesigner.cs
- ClockController.cs
- CompressedStack.cs
- MemberListBinding.cs
- EditorPart.cs
- PopupControlService.cs
- DataGridAutomationPeer.cs
- RuleValidation.cs
- DataGridViewRowCollection.cs
- SortQueryOperator.cs
- PreDigestedSignedInfo.cs
- ControlTemplate.cs
- SelectorItemAutomationPeer.cs
- SoapIncludeAttribute.cs
- ElementHostPropertyMap.cs
- DbQueryCommandTree.cs
- PropertyTabChangedEvent.cs
- SqlInternalConnectionSmi.cs
- ColumnResizeUndoUnit.cs
- XmlValueConverter.cs
- EventDescriptor.cs
- IdleTimeoutMonitor.cs
- SafeFileMappingHandle.cs
- RefreshEventArgs.cs
- HttpCapabilitiesSectionHandler.cs
- HttpListenerContext.cs
- DataListItemEventArgs.cs
- MonikerSyntaxException.cs
- UnmanagedMemoryStream.cs
- categoryentry.cs
- Knowncolors.cs
- ToolBar.cs
- WebServiceAttribute.cs
- CustomErrorsSection.cs
- SizeValueSerializer.cs
- PropertyEmitterBase.cs
- ByteAnimationUsingKeyFrames.cs
- NTAccount.cs
- DiscoveryClientProtocol.cs
- Utils.cs
- LinqToSqlWrapper.cs
- SimpleHandlerBuildProvider.cs
- ArgumentValidation.cs
- BulletChrome.cs
- CaseInsensitiveHashCodeProvider.cs
- OracleCommand.cs
- SqlDelegatedTransaction.cs
- ToolStripDesignerAvailabilityAttribute.cs
- StyleSelector.cs
- Grid.cs
- ClientSettingsSection.cs
- AudioSignalProblemOccurredEventArgs.cs
- SoapAttributeOverrides.cs
- ExcludeFromCodeCoverageAttribute.cs
- RSACryptoServiceProvider.cs
- ConsumerConnectionPoint.cs
- DataReceivedEventArgs.cs
- AuthenticateEventArgs.cs
- WindowsSysHeader.cs
- RemoteWebConfigurationHostServer.cs
- TypeExtensionSerializer.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- StreamGeometryContext.cs
- HostVisual.cs
- VectorAnimationUsingKeyFrames.cs
- TableRow.cs
- Hyperlink.cs
- CompModHelpers.cs
- ApplicationDirectory.cs
- FileDialog_Vista.cs
- DataGridViewElement.cs
- Calendar.cs
- StreamGeometry.cs
- XPathNodeIterator.cs
- RegexRunnerFactory.cs
- Item.cs
- BitmapFrameDecode.cs