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
- precedingquery.cs
- TimeoutConverter.cs
- DesignTimeParseData.cs
- TimeManager.cs
- Schema.cs
- CqlBlock.cs
- UIAgentAsyncParams.cs
- SimpleFileLog.cs
- XmlSchemaAnnotation.cs
- GradientBrush.cs
- MatrixTransform.cs
- DoubleAnimation.cs
- DeviceOverridableAttribute.cs
- AQNBuilder.cs
- DataServiceResponse.cs
- CanonicalFormWriter.cs
- DynamicUpdateCommand.cs
- XPathPatternParser.cs
- AlgoModule.cs
- GradientStopCollection.cs
- NetworkInformationPermission.cs
- FieldBuilder.cs
- VBIdentifierDesigner.xaml.cs
- NavigationProperty.cs
- BaseCAMarshaler.cs
- ScriptManager.cs
- TripleDES.cs
- _SecureChannel.cs
- TableProviderWrapper.cs
- TextBoxLine.cs
- DataSourceHelper.cs
- SponsorHelper.cs
- ConnectionsZoneAutoFormat.cs
- SystemIPInterfaceProperties.cs
- CopyOfAction.cs
- StorageEntityContainerMapping.cs
- MethodRental.cs
- UnconditionalPolicy.cs
- XmlSchemaSimpleType.cs
- RuntimeConfigurationRecord.cs
- StrokeCollection.cs
- AuthorizationSection.cs
- SafeMarshalContext.cs
- TdsParserSessionPool.cs
- OutputCacheSection.cs
- TagMapInfo.cs
- VScrollBar.cs
- ListViewCommandEventArgs.cs
- AnnotationResource.cs
- RelationshipDetailsCollection.cs
- ChooseAction.cs
- FrameworkTextComposition.cs
- ParameterElementCollection.cs
- ListViewHitTestInfo.cs
- PaperSize.cs
- ReferencedCollectionType.cs
- ConstantCheck.cs
- VirtualDirectoryMappingCollection.cs
- TypeBuilderInstantiation.cs
- InstanceNormalEvent.cs
- IPipelineRuntime.cs
- ShutDownListener.cs
- CapabilitiesUse.cs
- RandomNumberGenerator.cs
- Operators.cs
- ClientScriptManager.cs
- Soap12FormatExtensions.cs
- HttpRawResponse.cs
- EventProviderBase.cs
- CalendarDateRangeChangingEventArgs.cs
- ErrorProvider.cs
- SQLInt64.cs
- SymmetricCryptoHandle.cs
- CodeCommentStatement.cs
- FigureParagraph.cs
- XmlSchemaInclude.cs
- StreamSecurityUpgradeProvider.cs
- TimeSpanValidatorAttribute.cs
- GiveFeedbackEvent.cs
- Int32Rect.cs
- MailSettingsSection.cs
- ParserHooks.cs
- FontUnit.cs
- Control.cs
- WarningException.cs
- EditorBrowsableAttribute.cs
- BmpBitmapDecoder.cs
- CryptoKeySecurity.cs
- CheckableControlBaseAdapter.cs
- XmlDictionaryString.cs
- TcpConnectionPool.cs
- securitycriticaldata.cs
- RectAnimation.cs
- KeyedHashAlgorithm.cs
- GridViewUpdatedEventArgs.cs
- MemberPath.cs
- EntityDataSourceContainerNameItem.cs
- ClonableStack.cs
- DeferredBinaryDeserializerExtension.cs
- CultureInfoConverter.cs