2 using System.Collections;
9 static private Hashtable pool = new Hashtable ();
11 private class MSymbolData
17 public MSymbolData (string name)
23 private MSymbolData data;
25 public static MSymbol nil = new MSymbol ("nil");
26 public static MSymbol t = new MSymbol ("t");
27 public static MSymbol symbol = new MSymbol ("symbol");
28 public static MSymbol mtext = new MSymbol ("mtext");
29 public static MSymbol plist = new MSymbol ("plist");
30 public static MSymbol integer = new MSymbol ("integer");
32 public MSymbol (string name)
34 if (! pool.ContainsKey (name))
36 data = new MSymbolData (name);
37 pool.Add (name, data);
40 data = (MSymbolData) pool[name];
43 public override string ToString ()
47 foreach (char c in data.name)
49 if (c == '\\' || c == ' ' || c == '\'' || c == '\"' || c == ':')
56 public static bool operator== (MSymbol sym1, MSymbol sym2)
58 if (System.Object.ReferenceEquals(sym1, sym2))
60 if (((object) sym1 == null) || ((object) sym2 == null))
62 return sym1.data == sym2.data;
65 public static bool operator!= (MSymbol sym1, MSymbol sym2)
67 return ! (sym1 == sym2);
70 public override bool Equals (object sym)
74 return (this.data == ((MSymbol) sym).data);
77 public override int GetHashCode ()
79 return (data.name.GetHashCode ());
82 public MPlist Find (MSymbol key)
84 return (data.plist == null ? null : data.plist.Find (key));
87 public object Get (MSymbol key)
89 return (data.plist == null ? null : data.plist.Get (key));
92 public object Put (MSymbol key, object val)
94 if (data.plist == null)
95 data.plist = new MPlist ();
96 return data.plist.Put (key, val);