Code:
/ DotNET / DotNET / 8.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
- AvTrace.cs
- BackStopAuthenticationModule.cs
- ConnectionPoolManager.cs
- TraceSection.cs
- WindowShowOrOpenTracker.cs
- EmptyCollection.cs
- AdRotatorDesigner.cs
- SqlDataSourceStatusEventArgs.cs
- TracedNativeMethods.cs
- WindowsListViewItem.cs
- PersonalizationEntry.cs
- CheckBox.cs
- InstallerTypeAttribute.cs
- ExpressionBuilder.cs
- PagePropertiesChangingEventArgs.cs
- ScopelessEnumAttribute.cs
- OdbcException.cs
- Queue.cs
- DataDocumentXPathNavigator.cs
- UnSafeCharBuffer.cs
- RootNamespaceAttribute.cs
- OrderByQueryOptionExpression.cs
- LambdaCompiler.Binary.cs
- WriteableBitmap.cs
- TrustManagerMoreInformation.cs
- BuiltInPermissionSets.cs
- HtmlFormParameterWriter.cs
- Range.cs
- ComponentFactoryHelpers.cs
- ContentHostHelper.cs
- DynamicEntity.cs
- Page.cs
- RoleGroupCollection.cs
- EntitySetBase.cs
- QuaternionConverter.cs
- BamlBinaryWriter.cs
- ParameterEditorUserControl.cs
- StringBuilder.cs
- VolatileEnlistmentState.cs
- ColorTransform.cs
- RadioButtonDesigner.cs
- MobileControlsSectionHandler.cs
- OracleDataReader.cs
- UserNameServiceElement.cs
- SaveFileDialog.cs
- NegotiateStream.cs
- ListenerBinder.cs
- XmlTypeAttribute.cs
- Int32AnimationUsingKeyFrames.cs
- SmiRequestExecutor.cs
- ZipPackagePart.cs
- Attributes.cs
- PagesSection.cs
- CompilerInfo.cs
- OdbcConnectionOpen.cs
- ObjectViewQueryResultData.cs
- CalendarDateChangedEventArgs.cs
- UserMapPath.cs
- DataControlLinkButton.cs
- Calendar.cs
- DeclarativeCatalogPart.cs
- ProtocolsSection.cs
- SpecialNameAttribute.cs
- CustomPopupPlacement.cs
- RegistryPermission.cs
- BinaryOperationBinder.cs
- StructuredType.cs
- AesManaged.cs
- GetPageNumberCompletedEventArgs.cs
- OutputCacheModule.cs
- SHA1CryptoServiceProvider.cs
- MissingMemberException.cs
- TextureBrush.cs
- Dictionary.cs
- CompilationUtil.cs
- QueryContinueDragEventArgs.cs
- CollectionMarkupSerializer.cs
- DateTimeConstantAttribute.cs
- EntityModelSchemaGenerator.cs
- ScriptServiceAttribute.cs
- InstanceCompleteException.cs
- HtmlProps.cs
- LocalizationComments.cs
- AutomationPatternInfo.cs
- CallContext.cs
- ObjectHandle.cs
- ResXBuildProvider.cs
- MappingItemCollection.cs
- DataGridViewCellStyleChangedEventArgs.cs
- WSUtilitySpecificationVersion.cs
- DataGridViewSortCompareEventArgs.cs
- EasingFunctionBase.cs
- ImmutableObjectAttribute.cs
- ModuleConfigurationInfo.cs
- SplayTreeNode.cs
- ChangeNode.cs
- _NTAuthentication.cs
- DefaultAsyncDataDispatcher.cs
- OleDbWrapper.cs
- SocketElement.cs