X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FSystem.Globalization%2FCompareInfo.cs;h=3f589ca124d78c0598ecfccd80604783bc5af9c0;hb=e0a389372196b4082a414bf987e015683585c6b6;hp=9cdee5fab7a070126ebf08fa8678bd0f684f7d1c;hpb=0443306d611d0830e27327e1f0a3ef3457dfa535;p=mono.git diff --git a/mcs/class/corlib/System.Globalization/CompareInfo.cs b/mcs/class/corlib/System.Globalization/CompareInfo.cs index 9cdee5fab7a..3f589ca124d 100644 --- a/mcs/class/corlib/System.Globalization/CompareInfo.cs +++ b/mcs/class/corlib/System.Globalization/CompareInfo.cs @@ -43,10 +43,10 @@ namespace System.Globalization { static readonly bool useManagedCollation = Environment.internalGetEnvironmentVariable ("MONO_DISABLE_MANAGED_COLLATION") - != "yes"; + != "yes" && MSCompatUnicodeTable.IsReady; internal static bool UseManagedCollation { - get { return useManagedCollation && MSCompatUnicodeTable.IsReady; } + get { return useManagedCollation; } } // Keep in synch with MonoCompareInfo in the runtime. @@ -56,6 +56,9 @@ namespace System.Globalization [NonSerialized] private IntPtr ICU_collator; private int win32LCID; // Unused, but MS.NET serializes this +#if NET_2_0 + private string m_name; // Unused, but MS.NET serializes this +#endif [NonSerialized] SimpleCollator collator; @@ -241,7 +244,6 @@ namespace System.Globalization CompareOptions.None)); } - [MonoTODO("Add support for CompareOptions.OrdinalIgnoreCase")] public virtual int Compare (string string1, int offset1, int length1, string string2, int offset2, int length2, @@ -361,6 +363,13 @@ namespace System.Globalization public virtual SortKey GetSortKey(string source, CompareOptions options) { +#if NET_2_0 + switch (options) { + case CompareOptions.Ordinal: + case CompareOptions.OrdinalIgnoreCase: + throw new ArgumentException ("Now allowed CompareOptions.", "options"); + } +#endif if (UseManagedCollation) return collator.GetSortKey (source, options); SortKey key=new SortKey (culture, source, options); @@ -465,18 +474,15 @@ namespace System.Globalization int count, char c, CompareOptions opt, bool first) { - return UseManagedCollation && -#if NET_2_0 - ((CompareOptions.Ordinal & opt) == 0 || - (CompareOptions.OrdinalIgnoreCase & opt) == 0) ? -#else - (CompareOptions.Ordinal & opt) == 0 ? -#endif + // - forward IndexOf() icall is much faster than + // manged version, so always use icall. However, + // it does not work for OrdinalIgnoreCase, so + // do not avoid managed collator for that option. + return UseManagedCollation && ! (first && opt == CompareOptions.Ordinal) ? internal_index_managed (s, sindex, count, c, opt, first) : internal_index (s, sindex, count, c, opt, first); } - [MonoTODO("Add support for CompareOptions.OrdinalIgnoreCase")] public virtual int IndexOf (string source, char value, int startIndex, int count, CompareOptions options) @@ -533,18 +539,15 @@ namespace System.Globalization int count, string s2, CompareOptions opt, bool first) { - return UseManagedCollation && -#if NET_2_0 - ((CompareOptions.Ordinal & opt) == 0 || - (CompareOptions.OrdinalIgnoreCase & opt) == 0) ? -#else - (CompareOptions.Ordinal & opt) == 0 ? -#endif + // - forward IndexOf() icall is much faster than + // manged version, so always use icall. However, + // it does not work for OrdinalIgnoreCase, so + // do not avoid managed collator for that option. + return UseManagedCollation && ! (first && opt == CompareOptions.Ordinal) ? internal_index_managed (s1, sindex, count, s2, opt, first) : internal_index (s1, sindex, count, s2, opt, first); } - [MonoTODO("Add support for CompareOptions.OrdinalIgnoreCase")] public virtual int IndexOf (string source, string value, int startIndex, int count, CompareOptions options) @@ -698,7 +701,6 @@ namespace System.Globalization CompareOptions.None)); } - [MonoTODO("Add support for CompareOptions.OrdinalIgnoreCase")] public virtual int LastIndexOf(string source, char value, int startIndex, int count, CompareOptions options)