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 static public MSymbol nil = new MSymbol ("nil");
26 static public MSymbol t = new MSymbol ("t");
28 public MSymbol (string name)
30 if (! pool.ContainsKey (name))
32 data = new MSymbolData (name);
33 pool.Add (name, data);
36 data = (MSymbolData) pool[name];
39 public override string ToString ()
43 foreach (char c in data.name)
45 if (c == '\\' || c == ' ' || c == '\'' || c == '\"' || c == ':')
52 public override bool Equals (Object sym)
54 return (this.data == ((MSymbol) sym).data);
57 public override int GetHashCode ()
59 return (data.name.GetHashCode ());
62 public static bool operator== (MSymbol sym1, MSymbol sym2)
64 return ((object) sym1.data == (object) sym2.data);
67 public static bool operator!= (MSymbol sym1, MSymbol sym2)
69 return ((object) sym1.data != (object) sym2.data);
72 public object get (MSymbol key)
74 return (data.plist == null ? null : data.plist.get (key));
77 public object put (MSymbol key, object val)
79 if (data.plist == null)
80 data.plist = new MPlist ();
81 return data.plist.put (key, val);