1fdd4acd7fc709037f96ffdb42e4371f56470261
[m17n/m17n-lib-cs.git] / MSymbol.cs
1 using System;
2 using System.Collections;
3 using M17N.Core;
4
5 namespace M17N.Core
6 {
7   public class MSymbol
8   {
9     static private Hashtable pool = new Hashtable ();
10
11     private class MSymbolData
12     {
13       public string name;
14       public Object value;
15       public MPlist plist;
16
17       public MSymbolData (string name)
18       {
19         this.name = name;
20       }
21     }
22
23     private MSymbolData data;
24
25     static public MSymbol nil = new MSymbol ("nil");
26     static public MSymbol t = new MSymbol ("t");
27
28     public MSymbol (string name)
29     {
30       if (! pool.ContainsKey (name))
31         {
32           data = new MSymbolData (name);
33           pool.Add (name, data);
34         }
35       else
36         data = (MSymbolData) pool[name];
37     }
38
39     public override string ToString ()
40     {
41       string str = "";
42
43       foreach (char c in data.name)
44         {
45           if (c == '\\' || c == ' ' || c == '\'' || c == '\"' || c == ':')
46             str += "\\";
47           str += c;
48         }
49       return str;
50     }
51
52     public override bool Equals (Object sym)
53     {
54       return (this.data == ((MSymbol) sym).data);
55     }
56
57     public override int GetHashCode ()
58     {
59       return (data.name.GetHashCode ());
60     }
61
62     public static bool operator== (MSymbol sym1, MSymbol sym2)
63     {
64       return ((object) sym1.data == (object) sym2.data);
65     }
66
67     public static bool operator!= (MSymbol sym1, MSymbol sym2)
68     {
69       return ((object) sym1.data != (object) sym2.data);
70     }
71
72     public object get (MSymbol key)
73     {
74       return (data.plist == null ? null : data.plist.get (key));
75     }
76
77     public object put (MSymbol key, object val)
78     {
79       if (data.plist == null)
80         data.plist = new MPlist ();
81       return data.plist.put (key, val);
82     }
83   }
84 }