Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- RectangleGeometry.cs
- SourceSwitch.cs
- SymLanguageType.cs
- BlockUIContainer.cs
- HtmlForm.cs
- JsonUriDataContract.cs
- XmlDataImplementation.cs
- LambdaCompiler.Statements.cs
- SerializationAttributes.cs
- PaperSource.cs
- StringInfo.cs
- NumericUpDown.cs
- ImageConverter.cs
- DataChangedEventManager.cs
- ReadWriteObjectLock.cs
- MissingFieldException.cs
- DbParameterCollectionHelper.cs
- CharacterBuffer.cs
- HTTPNotFoundHandler.cs
- TransformPatternIdentifiers.cs
- FileDialog.cs
- WindowsListViewItemCheckBox.cs
- WhereQueryOperator.cs
- Pens.cs
- SimpleNameService.cs
- SmiTypedGetterSetter.cs
- AssemblyInfo.cs
- TransformGroup.cs
- StorageConditionPropertyMapping.cs
- XmlSchemaSimpleTypeRestriction.cs
- UInt32Converter.cs
- VectorCollectionConverter.cs
- CodeMethodReturnStatement.cs
- XmlSchemaAny.cs
- MultiView.cs
- InstanceValue.cs
- WebControl.cs
- Rule.cs
- ParserExtension.cs
- XmlSchemaIdentityConstraint.cs
- NGCPageContentSerializerAsync.cs
- URLBuilder.cs
- StringStorage.cs
- Page.cs
- InternalBufferOverflowException.cs
- DeferredTextReference.cs
- MembershipPasswordException.cs
- SqlCacheDependencyDatabase.cs
- DataGridHeaderBorder.cs
- IApplicationTrustManager.cs
- UrlUtility.cs
- PersonalizationStateQuery.cs
- BooleanAnimationUsingKeyFrames.cs
- InternalRelationshipCollection.cs
- ServiceModelConfigurationElementCollection.cs
- ComponentResourceKey.cs
- DeploymentSectionCache.cs
- Vector3DCollectionConverter.cs
- _ProxyRegBlob.cs
- Rect3DValueSerializer.cs
- FlowDocumentReader.cs
- ObjectListFieldsPage.cs
- UserMapPath.cs
- TableSectionStyle.cs
- HierarchicalDataBoundControl.cs
- complextypematerializer.cs
- XmlSchemaSimpleTypeRestriction.cs
- VariableDesigner.xaml.cs
- ReturnEventArgs.cs
- BindingCompleteEventArgs.cs
- LineProperties.cs
- HttpMethodConstraint.cs
- ObjectPersistData.cs
- _DigestClient.cs
- PopupEventArgs.cs
- ErrorInfoXmlDocument.cs
- PathNode.cs
- SystemIPInterfaceProperties.cs
- HealthMonitoringSection.cs
- RootCodeDomSerializer.cs
- _AutoWebProxyScriptWrapper.cs
- RowToParametersTransformer.cs
- RelationshipEntry.cs
- SBCSCodePageEncoding.cs
- IChannel.cs
- BasicDesignerLoader.cs
- CalendarDayButton.cs
- SkewTransform.cs
- SqlNotificationRequest.cs
- ConfigXmlAttribute.cs
- CheckedPointers.cs
- columnmapfactory.cs
- FeatureManager.cs
- SafeSystemMetrics.cs
- WebBrowserEvent.cs
- InvalidOperationException.cs
- ObjectDataSourceView.cs
- DesignerAdapterAttribute.cs
- FontSizeConverter.cs
- HTTPNotFoundHandler.cs