Wed May 1 17:05:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
[mono.git] / mcs / class / corlib / System.Collections / CaseInsensitiveHashCodeProvider.cs
1 //\r
2 // System.Collections.CaseInsensitiveHashCodeProvider\r
3 //\r
4 // Author:\r
5 //   Sergey Chaban (serge@wildwestsoftware.com)\r
6 //\r
7 \r
8 \r
9 \r
10 using System;\r
11 using System.Collections;\r
12 \r
13 \r
14 \r
15 namespace System.Collections {\r
16 \r
17         [Serializable]\r
18         public class CaseInsensitiveHashCodeProvider : IHashCodeProvider {\r
19 \r
20                 private static CaseInsensitiveHashCodeProvider singleton;\r
21 \r
22 \r
23                 // Class constructor\r
24 \r
25                 static CaseInsensitiveHashCodeProvider ()\r
26                 {\r
27                         singleton=new CaseInsensitiveHashCodeProvider ();\r
28                 }\r
29 \r
30 \r
31 \r
32                 // Public instance constructor\r
33 \r
34                 public CaseInsensitiveHashCodeProvider ()\r
35                 {\r
36                 }\r
37 \r
38 \r
39 \r
40                 //\r
41                 // Public static properties\r
42                 //\r
43 \r
44                 public static CaseInsensitiveHashCodeProvider Default {\r
45                         get {\r
46                                 return singleton;\r
47                         }\r
48                 }\r
49 \r
50 \r
51                 //\r
52                 // Instance methods\r
53                 //\r
54 \r
55                 //\r
56                 // IHashCodeProvider\r
57                 //\r
58 \r
59                 [MonoTODO]\r
60                 public int GetHashCode (object obj)\r
61                 {\r
62                         if (obj == null) {\r
63                                 throw new ArgumentNullException ("obj is null");\r
64                         }\r
65 \r
66                         string str = obj as string;\r
67 \r
68                         if (str == null) {\r
69                                 // FIXME:\r
70                                 return 0;\r
71                         }\r
72 \r
73                         int h = 0;\r
74                         char c;\r
75 \r
76                         if (str.Length > 0) {\r
77                                 for (int i = 0;i<str.Length;i++) {\r
78                                         c = str [i];\r
79 \r
80                                         if (Char.IsLetter (c))\r
81                                                 c = Char.ToLower (c);\r
82 \r
83                                         h = h * 31 + c;\r
84                                 }\r
85                         }\r
86 \r
87                         return h;\r
88                 }\r
89 \r
90         } // CaseInsensitiveHashCodeProvider\r
91 }\r
92 \r