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 override bool Equals (object sym)
60 return (this.data == ((MSymbol) sym).data);
63 public override int GetHashCode ()
65 return (data.name.GetHashCode ());
68 public static bool operator== (MSymbol sym1, MSymbol sym2)
70 return (sym1.data == sym2.data);
73 public static bool operator!= (MSymbol sym1, MSymbol sym2)
75 return (sym1.data != sym2.data);
78 public MPlist Find (MSymbol key)
80 return (data.plist == null ? null : data.plist.Find (key));
83 public object Get (MSymbol key)
85 return (data.plist == null ? null : data.plist.Get (key));
88 public object Put (MSymbol key, object val)
90 if (data.plist == null)
91 data.plist = new MPlist ();
92 return data.plist.Put (key, val);