using System; using System.Collections; using M17N.Core; namespace M17N.Core { public class MSymbol { static private Hashtable pool = new Hashtable (); internal class MSymbolData { public string name; public Object value; public MPlist plist; public MSymbolData (string name) { this.name = name; } } static public MSymbol nil = new MSymbol ("nil"); static public MSymbol t = new MSymbol ("t"); private MSymbolData data; public MSymbol (string name) { if (! pool.ContainsKey (name)) { data = new MSymbolData (name); pool.Add (name, data); } else data = (MSymbolData) pool[name]; } public override string ToString () { return data.name; } public override bool Equals (Object sym) { return (this.data == ((MSymbol) sym).data); } public override int GetHashCode () { return (data.name.GetHashCode ()); } public static bool operator== (MSymbol sym1, MSymbol sym2) { return ((object) sym1.data == (object) sym2.data); } public static bool operator!= (MSymbol sym1, MSymbol sym2) { return ((object) sym1.data != (object) sym2.data); } public object get (MSymbol key) { return (data.plist == null ? null : data.plist.get (key)); } public object put (MSymbol key, object val) { if (data.plist == null) data.plist = new MPlist (); return data.plist.put (key, val); } } }