2003-03-19 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
[mono.git] / mcs / class / System.XML / System.Xml.Serialization / CodeIdentifiers.cs
1 // \r
2 // System.Xml.Serialization.CodeIdentifiers \r
3 //\r
4 // Author:\r
5 //   Tim Coleman (tim@timcoleman.com)\r
6 //\r
7 // Copyright (C) Tim Coleman, 2002\r
8 //\r
9 \r
10 using System;\r
11 using System.Collections;\r
12 \r
13 namespace System.Xml.Serialization {\r
14         public class CodeIdentifiers {\r
15 \r
16                 #region Fields\r
17 \r
18                 bool useCamelCasing;\r
19                 Hashtable table = new Hashtable ();\r
20                 Hashtable reserved = new Hashtable ();\r
21 \r
22                 #endregion\r
23 \r
24                 #region Constructors\r
25 \r
26                 public CodeIdentifiers ()\r
27                 {\r
28                 }\r
29 \r
30                 #endregion // Constructors\r
31 \r
32                 #region Properties\r
33 \r
34                 public bool UseCamelCasing {\r
35                         get { return useCamelCasing; }\r
36                         set { useCamelCasing = value; }\r
37                 }\r
38 \r
39                 #endregion // Properties\r
40 \r
41                 #region Methods\r
42 \r
43                 public void Add (string identifier, object value)\r
44                 {\r
45                         table.Add (identifier, value);\r
46                 }\r
47 \r
48                 public void AddReserved (string identifier)\r
49                 {\r
50                         reserved.Add (identifier, identifier);\r
51                 }\r
52 \r
53                 public string AddUnique (string identifier, object value)\r
54                 {\r
55                         string unique = MakeUnique (identifier);\r
56                         Add (unique, value);\r
57                         return unique;\r
58                 }\r
59 \r
60                 public void Clear ()\r
61                 {\r
62                         table.Clear ();\r
63                 }\r
64 \r
65                 public bool IsInUse (string identifier)\r
66                 {\r
67                         return (table.ContainsKey (identifier) || reserved.ContainsKey (identifier));\r
68                 }\r
69 \r
70                 public string MakeRightCase (string identifier)\r
71                 {\r
72                         if (UseCamelCasing)\r
73                                 return CodeIdentifier.MakeCamel (identifier);\r
74                         else\r
75                                 return CodeIdentifier.MakePascal (identifier);\r
76                 }\r
77 \r
78                 public string MakeUnique (string identifier)\r
79                 {\r
80                         string uniqueIdentifier = identifier;\r
81                         int i = 1;\r
82 \r
83                         while (IsInUse (uniqueIdentifier)) {\r
84                                 uniqueIdentifier = String.Format ("{0}{1}", identifier, i.ToString ());\r
85                                 i += 1;\r
86                         }\r
87 \r
88                         return uniqueIdentifier;\r
89                 }\r
90 \r
91                 public void Remove (string identifier)\r
92                 {\r
93                         table.Remove (identifier);\r
94                 }\r
95 \r
96                 public void RemoveReserved (string identifier)\r
97                 {\r
98                         reserved.Remove (identifier);\r
99                 }\r
100 \r
101                 public object ToArray (Type type)\r
102                 {\r
103                         Array list = Array.CreateInstance (type, table.Count);\r
104                         table.CopyTo (list, 0);\r
105                         return list;\r
106                 }\r
107 \r
108                 #endregion // Methods\r
109         }\r
110 }\r