summaryrefslogtreecommitdiff
path: root/src/mscorlib/src/System/StringComparer.cs
diff options
context:
space:
mode:
authorJiyoung Yun <jy910.yun@samsung.com>2017-04-13 14:17:19 +0900
committerJiyoung Yun <jy910.yun@samsung.com>2017-04-13 14:17:19 +0900
commita56e30c8d33048216567753d9d3fefc2152af8ac (patch)
tree7e5d979695fc4a431740982eb1cfecc2898b23a5 /src/mscorlib/src/System/StringComparer.cs
parent4b11dc566a5bbfa1378d6266525c281b028abcc8 (diff)
downloadcoreclr-a56e30c8d33048216567753d9d3fefc2152af8ac.tar.gz
coreclr-a56e30c8d33048216567753d9d3fefc2152af8ac.tar.bz2
coreclr-a56e30c8d33048216567753d9d3fefc2152af8ac.zip
Imported Upstream version 2.0.0.11353upstream/2.0.0.11353
Diffstat (limited to 'src/mscorlib/src/System/StringComparer.cs')
-rw-r--r--src/mscorlib/src/System/StringComparer.cs300
1 files changed, 0 insertions, 300 deletions
diff --git a/src/mscorlib/src/System/StringComparer.cs b/src/mscorlib/src/System/StringComparer.cs
deleted file mode 100644
index cf65c48c2b..0000000000
--- a/src/mscorlib/src/System/StringComparer.cs
+++ /dev/null
@@ -1,300 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-
-namespace System {
- using System.Collections;
- using System.Collections.Generic;
- using System.Globalization;
- using System.Diagnostics.Contracts;
- using System.Runtime.Serialization;
- using System.Runtime.CompilerServices;
-
-
- [Serializable]
- public abstract class StringComparer : IComparer, IEqualityComparer, IComparer<string>, IEqualityComparer<string>{
- private static readonly StringComparer _invariantCulture = new CultureAwareComparer(CultureInfo.InvariantCulture, false);
- private static readonly StringComparer _invariantCultureIgnoreCase = new CultureAwareComparer(CultureInfo.InvariantCulture, true);
- private static readonly StringComparer _ordinal = new OrdinalComparer(false);
- private static readonly StringComparer _ordinalIgnoreCase = new OrdinalComparer(true);
-
- public static StringComparer InvariantCulture {
- get {
- Contract.Ensures(Contract.Result<StringComparer>() != null);
- return _invariantCulture;
- }
- }
-
- public static StringComparer InvariantCultureIgnoreCase {
- get {
- Contract.Ensures(Contract.Result<StringComparer>() != null);
- return _invariantCultureIgnoreCase;
- }
- }
-
- public static StringComparer CurrentCulture {
- get {
- Contract.Ensures(Contract.Result<StringComparer>() != null);
- return new CultureAwareComparer(CultureInfo.CurrentCulture, false);
- }
- }
-
- public static StringComparer CurrentCultureIgnoreCase {
- get {
- Contract.Ensures(Contract.Result<StringComparer>() != null);
- return new CultureAwareComparer(CultureInfo.CurrentCulture, true);
- }
- }
-
- public static StringComparer Ordinal {
- get {
- Contract.Ensures(Contract.Result<StringComparer>() != null);
- return _ordinal;
- }
- }
-
- public static StringComparer OrdinalIgnoreCase {
- get {
- Contract.Ensures(Contract.Result<StringComparer>() != null);
- return _ordinalIgnoreCase;
- }
- }
-
- // Convert a StringComparison to a StringComparer
- public static StringComparer FromComparison(StringComparison comparisonType)
- {
- switch (comparisonType)
- {
- case StringComparison.CurrentCulture:
- return CurrentCulture;
- case StringComparison.CurrentCultureIgnoreCase:
- return CurrentCultureIgnoreCase;
- case StringComparison.InvariantCulture:
- return InvariantCulture;
- case StringComparison.InvariantCultureIgnoreCase:
- return InvariantCultureIgnoreCase;
- case StringComparison.Ordinal:
- return Ordinal;
- case StringComparison.OrdinalIgnoreCase:
- return OrdinalIgnoreCase;
- default:
- throw new ArgumentException(Environment.GetResourceString("NotSupported_StringComparison"), nameof(comparisonType));
- }
- }
-
- public static StringComparer Create(CultureInfo culture, bool ignoreCase) {
- if( culture == null) {
- throw new ArgumentNullException(nameof(culture));
- }
- Contract.Ensures(Contract.Result<StringComparer>() != null);
- Contract.EndContractBlock();
-
- return new CultureAwareComparer(culture, ignoreCase);
- }
-
- public int Compare(object x, object y) {
- if (x == y) return 0;
- if (x == null) return -1;
- if (y == null) return 1;
-
- String sa = x as String;
- if (sa != null) {
- String sb = y as String;
- if( sb != null) {
- return Compare(sa, sb);
- }
- }
-
- IComparable ia = x as IComparable;
- if (ia != null) {
- return ia.CompareTo(y);
- }
-
- throw new ArgumentException(Environment.GetResourceString("Argument_ImplementIComparable"));
- }
-
-
- public new bool Equals(Object x, Object y) {
- if (x == y) return true;
- if (x == null || y == null) return false;
-
- String sa = x as String;
- if (sa != null) {
- String sb = y as String;
- if( sb != null) {
- return Equals(sa, sb);
- }
- }
- return x.Equals(y);
- }
-
- public int GetHashCode(object obj) {
- if( obj == null) {
- throw new ArgumentNullException(nameof(obj));
- }
- Contract.EndContractBlock();
-
- string s = obj as string;
- if( s != null) {
- return GetHashCode(s);
- }
- return obj.GetHashCode();
- }
-
- public abstract int Compare(String x, String y);
- public abstract bool Equals(String x, String y);
- public abstract int GetHashCode(string obj);
- }
-
- [Serializable]
- internal sealed class CultureAwareComparer : StringComparer
-#if FEATURE_RANDOMIZED_STRING_HASHING
- , IWellKnownStringEqualityComparer
-#endif
- {
- private CompareInfo _compareInfo;
- private bool _ignoreCase;
-
- internal CultureAwareComparer(CultureInfo culture, bool ignoreCase) {
- _compareInfo = culture.CompareInfo;
- _ignoreCase = ignoreCase;
- }
-
- public override int Compare(string x, string y) {
- if (Object.ReferenceEquals(x, y)) return 0;
- if (x == null) return -1;
- if (y == null) return 1;
- return _compareInfo.Compare(x, y, _ignoreCase? CompareOptions.IgnoreCase : CompareOptions.None);
- }
-
- public override bool Equals(string x, string y) {
- if (Object.ReferenceEquals(x ,y)) return true;
- if (x == null || y == null) return false;
-
- return (_compareInfo.Compare(x, y, _ignoreCase? CompareOptions.IgnoreCase : CompareOptions.None) == 0);
- }
-
- public override int GetHashCode(string obj) {
- if( obj == null) {
- throw new ArgumentNullException(nameof(obj));
- }
- Contract.EndContractBlock();
-
- CompareOptions options = CompareOptions.None;
-
- if( _ignoreCase) {
- options |= CompareOptions.IgnoreCase;
- }
-
- return _compareInfo.GetHashCodeOfString(obj, options);
- }
-
- // Equals method for the comparer itself.
- public override bool Equals(Object obj){
- CultureAwareComparer comparer = obj as CultureAwareComparer;
- if( comparer == null) {
- return false;
- }
- return (this._ignoreCase == comparer._ignoreCase) && (this._compareInfo.Equals(comparer._compareInfo));
- }
-
- public override int GetHashCode() {
- int hashCode = _compareInfo.GetHashCode() ;
- return _ignoreCase ? (~hashCode) : hashCode;
- }
-
-#if FEATURE_RANDOMIZED_STRING_HASHING
-
- IEqualityComparer IWellKnownStringEqualityComparer.GetEqualityComparerForSerialization() {
- return this;
- }
-#endif
-
- }
-
- // Provide x more optimal implementation of ordinal comparison.
- [Serializable]
- internal sealed class OrdinalComparer : StringComparer
-#if FEATURE_RANDOMIZED_STRING_HASHING
- , IWellKnownStringEqualityComparer
-#endif
- {
- private bool _ignoreCase;
-
- internal OrdinalComparer(bool ignoreCase) {
- _ignoreCase = ignoreCase;
- }
-
- public override int Compare(string x, string y) {
- if (Object.ReferenceEquals(x, y)) return 0;
- if (x == null) return -1;
- if (y == null) return 1;
-
- if( _ignoreCase) {
- return String.Compare(x, y, StringComparison.OrdinalIgnoreCase);
- }
-
- return String.CompareOrdinal(x, y);
- }
-
- public override bool Equals(string x, string y) {
- if (Object.ReferenceEquals(x ,y)) return true;
- if (x == null || y == null) return false;
-
- if( _ignoreCase) {
- if( x.Length != y.Length) {
- return false;
- }
- return (String.Compare(x, y, StringComparison.OrdinalIgnoreCase) == 0);
- }
- return x.Equals(y);
- }
-
- public override int GetHashCode(string obj) {
- if( obj == null) {
- throw new ArgumentNullException(nameof(obj));
- }
- Contract.EndContractBlock();
-
- if( _ignoreCase) {
- return TextInfo.GetHashCodeOrdinalIgnoreCase(obj);
- }
-
- return obj.GetHashCode();
- }
-
- // Equals method for the comparer itself.
- public override bool Equals(Object obj){
- OrdinalComparer comparer = obj as OrdinalComparer;
- if( comparer == null) {
- return false;
- }
- return (this._ignoreCase == comparer._ignoreCase);
- }
-
- public override int GetHashCode() {
- string name = "OrdinalComparer";
- int hashCode = name.GetHashCode();
- return _ignoreCase ? (~hashCode) : hashCode;
- }
-
-#if FEATURE_RANDOMIZED_STRING_HASHING
-
- IEqualityComparer IWellKnownStringEqualityComparer.GetEqualityComparerForSerialization() {
- return this;
- }
-#endif
-
- }
-
-#if FEATURE_RANDOMIZED_STRING_HASHING
-
- // This interface is implemented by string comparers in the framework that can opt into
- // randomized hashing behaviors.
- internal interface IWellKnownStringEqualityComparer {
- // Get an IEqaulityComparer that can be serailzied (e.g., it exists in older versions).
- IEqualityComparer GetEqualityComparerForSerialization();
- }
-#endif
-}