2005-01-31 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / corlib / System.Globalization / CompareInfo.cs
index cddb32c450a96601dea66ff3394b6fa345370b83..94d1800146fcfd2f494ab709f1978607dc84a62f 100644 (file)
@@ -8,6 +8,29 @@
 // (C) Ximian, Inc. 2002
 //
 
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
 using System.Reflection;
 using System.Runtime.Serialization;
 using System.Runtime.CompilerServices;
@@ -17,8 +40,13 @@ namespace System.Globalization
        [Serializable]
        public class CompareInfo : IDeserializationCallback
        {
-               private int lcid;
+               // Keep in synch with MonoCompareInfo in the runtime. 
+               private int culture;
+               [NonSerialized]
+               private string icu_name;
+               [NonSerialized]
                private IntPtr ICU_collator;
+               private int win32LCID;  // Unused, but MS.NET serializes this
                
                /* Hide the .ctor() */
                CompareInfo() {}
@@ -26,10 +54,11 @@ namespace System.Globalization
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
                private extern void construct_compareinfo (string locale);
                
-               internal CompareInfo (int lcid)
+               internal CompareInfo (CultureInfo ci)
                {
-                       this.lcid=lcid;
-                       this.construct_compareinfo (CultureInfo.CultureMap.lcid_to_icuname (lcid));
+                       this.culture = ci.LCID;
+                       this.icu_name = ci.IcuName;
+                       this.construct_compareinfo (icu_name);
                }
                
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
@@ -275,7 +304,7 @@ namespace System.Globalization
                                return(false);
                        }
                        
-                       return(other.lcid==lcid);
+                       return(other.culture==culture);
                }
 
                public static CompareInfo GetCompareInfo(int culture)
@@ -343,7 +372,7 @@ namespace System.Globalization
                public virtual SortKey GetSortKey(string source,
                                                  CompareOptions options)
                {
-                       SortKey key=new SortKey (lcid, source, options);
+                       SortKey key=new SortKey (culture, source, options);
 
                        /* Need to do the icall here instead of in the
                         * SortKey constructor, as we need access to
@@ -690,7 +719,7 @@ namespace System.Globalization
 
                public override string ToString()
                {
-                       return("CompareInfo - "+lcid);
+                       return("CompareInfo - "+culture);
                }
 
                void IDeserializationCallback.OnDeserialization(object sender)
@@ -699,7 +728,7 @@ namespace System.Globalization
                         * the pointer in ICU_collator
                         */
                        try {
-                               this.construct_compareinfo (CultureInfo.CultureMap.lcid_to_icuname (lcid));
+                               this.construct_compareinfo (icu_name);
                        } catch {
                                ICU_collator=IntPtr.Zero;
                        }
@@ -712,7 +741,7 @@ namespace System.Globalization
                public int LCID
                {
                        get {
-                               return(lcid);
+                               return(culture);
                        }
                }
        }