Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- BooleanConverter.cs
- AnnotationComponentManager.cs
- RSAPKCS1SignatureFormatter.cs
- EditorAttribute.cs
- SspiSecurityToken.cs
- CodeIterationStatement.cs
- DataBoundLiteralControl.cs
- FontUnitConverter.cs
- OuterGlowBitmapEffect.cs
- ProjectionCamera.cs
- ModifyActivitiesPropertyDescriptor.cs
- IIS7WorkerRequest.cs
- SmiContext.cs
- ContainerUIElement3D.cs
- MimeBasePart.cs
- DataServiceHost.cs
- Rect.cs
- DataObjectPastingEventArgs.cs
- DataGridViewRowStateChangedEventArgs.cs
- FullTextState.cs
- CapabilitiesState.cs
- ByteAnimationBase.cs
- WinFormsUtils.cs
- BookmarkNameHelper.cs
- SqlStream.cs
- XPathParser.cs
- CalloutQueueItem.cs
- ParameterCollection.cs
- ProfileSettings.cs
- CompositeScriptReference.cs
- TextTreeRootNode.cs
- BaseTypeViewSchema.cs
- DynamicValidatorEventArgs.cs
- EntryWrittenEventArgs.cs
- VoiceSynthesis.cs
- InvokePatternIdentifiers.cs
- SByteConverter.cs
- ComponentResourceKey.cs
- JoinElimination.cs
- ObjectParameter.cs
- COM2ComponentEditor.cs
- RemoteWebConfigurationHostStream.cs
- SessionSymmetricMessageSecurityProtocolFactory.cs
- TransactionState.cs
- DataGridViewRowsRemovedEventArgs.cs
- TypeBrowserDialog.cs
- Permission.cs
- EntityDataSourceMemberPath.cs
- BindingExpressionUncommonField.cs
- NamespaceMapping.cs
- CompilationUnit.cs
- FillBehavior.cs
- ChannelRequirements.cs
- FixedTextPointer.cs
- ContextMenuService.cs
- GetPageNumberCompletedEventArgs.cs
- RectangleHotSpot.cs
- ContentValidator.cs
- MailMessage.cs
- TabletDevice.cs
- ListViewDataItem.cs
- SchemaCollectionCompiler.cs
- StoreConnection.cs
- ProfileService.cs
- DateTimeConverter2.cs
- SupportsEventValidationAttribute.cs
- List.cs
- TreeViewBindingsEditorForm.cs
- DetailsViewActionList.cs
- EventTrigger.cs
- LocationUpdates.cs
- FontStretchConverter.cs
- SystemBrushes.cs
- InternalSafeNativeMethods.cs
- HwndTarget.cs
- EventPropertyMap.cs
- HttpApplicationStateBase.cs
- SafeReadContext.cs
- DesignerCommandSet.cs
- Point3DCollectionValueSerializer.cs
- MetadataFile.cs
- GraphicsPath.cs
- BlurEffect.cs
- Grant.cs
- DetailsViewInsertEventArgs.cs
- GeneralTransform3DCollection.cs
- NameObjectCollectionBase.cs
- AxHost.cs
- XPathScanner.cs
- XmlWriterTraceListener.cs
- Soap.cs
- StylusShape.cs
- ThrowHelper.cs
- SystemResources.cs
- SafePEFileHandle.cs
- XmlMembersMapping.cs
- XmlChildNodes.cs
- WizardPanelChangingEventArgs.cs
- PropertyIDSet.cs
- NumericExpr.cs