Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Globalization / SortKey.cs / 1 / SortKey.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
////////////////////////////////////////////////////////////////////////////
//
// Class: SortKey
//
// Purpose: This class implements a set of methods for retrieving
// sort key information.
//
// Date: August 12, 1998
//
////////////////////////////////////////////////////////////////////////////
namespace System.Globalization {
using System;
using System.Runtime.CompilerServices;
[System.Runtime.InteropServices.ComVisible(true)]
[Serializable] public class SortKey
{
//--------------------------------------------------------------------//
// Internal Information //
//-------------------------------------------------------------------//
//
// Variables.
//
internal int win32LCID; // 32-bit Win32 locale ID. It may contain a 4-bit sort ID.
internal CompareOptions options; // options
internal String m_String; // original string
internal byte[] m_KeyData; // sortkey data
// Mask used to check if the c'tor has the right flags.
private const CompareOptions ValidSortkeyCtorMaskOffFlags = ~(CompareOptions.IgnoreCase | CompareOptions.IgnoreSymbols | CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreWidth | CompareOptions.IgnoreKanaType | CompareOptions.StringSort);
////////////////////////////////////////////////////////////////////////
//
// SortKey Constructor
//
// Implements CultureInfo.CompareInfo.GetSortKey().
// Package access only.
//
////////////////////////////////////////////////////////////////////////
unsafe internal SortKey(void* pSortingFile, int win32LCID, String str, CompareOptions options)
{
if (str==null) {
throw new ArgumentNullException("str");
}
//
// WARNING! WARNING! WARNING! WARNING! WARNING! WARNING! WARNING! WARNING! WARNING!
//
// This parameter check was added in Whidbey prior to Beta 2. We are keeping this
// change in mind in case we hear of any issues with it.
//
// WARNING! WARNING! WARNING! WARNING! WARNING! WARNING! WARNING! WARNING! WARNING!
//
if ((options & ValidSortkeyCtorMaskOffFlags) != 0)
{
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidFlag"), "options");
}
//This takes the sort id from CompareInfo, so we should be able to skip initializing it.
this.win32LCID = win32LCID;
this.options = options;
m_String = str;
//We need an initialized SortTable here, but since we're getting this as an instance
//method off of a CompareInfo, we're guaranteed that that already happened.
m_KeyData = CompareInfo.nativeCreateSortKey(pSortingFile, str, (int)options, win32LCID);
}
#if !FEATURE_PAL
//
// The following constructor is designed to be called from CompareInfo to get the
// the sort key of specific string for synthetic culture
//
//
internal SortKey(int win32LCID, String str, CompareOptions options)
{
if (str==null) { throw new ArgumentNullException("str"); }
if ((options & ValidSortkeyCtorMaskOffFlags) != 0)
{
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidFlag"), "options");
}
if (CultureInfo.GetNativeSortKey(win32LCID, CompareInfo.GetNativeCompareFlags(options), str, str.Length, out m_KeyData) <= 0)
{
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidFlag"), "str");
}
this.win32LCID = win32LCID;
this.options = options;
this.m_String = str;
}
#endif // !FEATURE_PAL
////////////////////////////////////////////////////////////////////////
//
// GetOriginalString
//
// Returns the original string used to create the current instance
// of SortKey.
//
////////////////////////////////////////////////////////////////////////
public virtual String OriginalString
{
get {
return (m_String);
}
}
////////////////////////////////////////////////////////////////////////
//
// GetKeyData
//
// Returns a byte array representing the current instance of the
// sort key.
//
////////////////////////////////////////////////////////////////////////
public virtual byte[] KeyData
{
get {
return (byte[])(m_KeyData.Clone());
}
}
////////////////////////////////////////////////////////////////////////
//
// Compare
//
// Compares the two sort keys. Returns 0 if the two sort keys are
// equal, a number less than 0 if sortkey1 is less than sortkey2,
// and a number greater than 0 if sortkey1 is greater than sortkey2.
//
////////////////////////////////////////////////////////////////////////
public static int Compare(SortKey sortkey1, SortKey sortkey2) {
if (sortkey1==null || sortkey2==null) {
throw new ArgumentNullException((sortkey1==null ? "sortkey1": "sortkey2"));
}
byte[] key1Data = sortkey1.m_KeyData;
byte[] key2Data = sortkey2.m_KeyData;
BCLDebug.Assert(key1Data!=null, "key1Data!=null");
BCLDebug.Assert(key2Data!=null, "key2Data!=null");
if (key1Data.Length == 0) {
if (key2Data.Length == 0) {
return (0);
}
return (-1);
}
if (key2Data.Length == 0) {
return (1);
}
int compLen = (key1Data.Lengthkey2Data[i]) {
return (1);
}
if (key1Data[i]
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CompressionTracing.cs
- Graphics.cs
- SQlBooleanStorage.cs
- SqlCaseSimplifier.cs
- DefaultPrintController.cs
- EditingCoordinator.cs
- WebPartConnectionsEventArgs.cs
- CssClassPropertyAttribute.cs
- XamlSerializer.cs
- XmlSchemaInfo.cs
- FirstMatchCodeGroup.cs
- RadioButtonList.cs
- TypefaceMap.cs
- PathGeometry.cs
- Collection.cs
- DataGridViewCellEventArgs.cs
- DataGridViewImageColumn.cs
- ResXResourceWriter.cs
- MonitoringDescriptionAttribute.cs
- UIElement.cs
- WindowsButton.cs
- DataContractJsonSerializerOperationBehavior.cs
- UpdatePanelTrigger.cs
- ResourceSet.cs
- TextSearch.cs
- Condition.cs
- StyleSelector.cs
- AccessDataSourceDesigner.cs
- HtmlInputSubmit.cs
- AttributeUsageAttribute.cs
- remotingproxy.cs
- DataView.cs
- Rules.cs
- MultiPageTextView.cs
- _emptywebproxy.cs
- SplineKeyFrames.cs
- ActivityCodeDomSerializer.cs
- SchemaManager.cs
- PanelContainerDesigner.cs
- IdentityManager.cs
- ListViewUpdatedEventArgs.cs
- HMACSHA384.cs
- CryptoStream.cs
- TiffBitmapDecoder.cs
- MultilineStringEditor.cs
- Latin1Encoding.cs
- Converter.cs
- CompressEmulationStream.cs
- CopyAction.cs
- PolyBezierSegmentFigureLogic.cs
- Logging.cs
- WinFormsComponentEditor.cs
- RuntimeHandles.cs
- Util.cs
- PropertyRef.cs
- UrlParameterReader.cs
- DictionaryBase.cs
- DependencyPropertyAttribute.cs
- ResXFileRef.cs
- ConfigurationSection.cs
- QuotedStringFormatReader.cs
- SqlConnectionFactory.cs
- MinMaxParagraphWidth.cs
- SequenceQuery.cs
- InstanceStore.cs
- WebResponse.cs
- Exception.cs
- ellipse.cs
- ProviderConnectionPointCollection.cs
- SessionPageStateSection.cs
- DateTimeConverter.cs
- EditingMode.cs
- StreamReader.cs
- StackSpiller.Bindings.cs
- DoWorkEventArgs.cs
- ValidationPropertyAttribute.cs
- PrintDialog.cs
- SqlRetyper.cs
- TemplateControl.cs
- BuilderInfo.cs
- ContentDefinition.cs
- ProcessModuleCollection.cs
- DrawToolTipEventArgs.cs
- TimeIntervalCollection.cs
- DomainUpDown.cs
- XmlSerializerNamespaces.cs
- WindowShowOrOpenTracker.cs
- ToolBarButton.cs
- TransportListener.cs
- HelpInfo.cs
- UserPersonalizationStateInfo.cs
- SQLInt32.cs
- VisualProxy.cs
- LocalsItemDescription.cs
- BindingCompleteEventArgs.cs
- ObjectRef.cs
- Attributes.cs
- COM2IPerPropertyBrowsingHandler.cs
- TextAction.cs
- PageParserFilter.cs