private class MSymbolData
{
public string name;
- public Object value;
+ public object value;
public MPlist plist;
public MSymbolData (string name)
private MSymbolData data;
- static public MSymbol nil = new MSymbol ("nil");
- static public MSymbol t = new MSymbol ("t");
+ public static MSymbol nil = new MSymbol ("nil");
+ public static MSymbol t = new MSymbol ("t");
+ public static MSymbol symbol = new MSymbol ("symbol");
+ public static MSymbol mtext = new MSymbol ("mtext");
+ public static MSymbol plist = new MSymbol ("plist");
+ public static MSymbol integer = new MSymbol ("integer");
public MSymbol (string name)
{
data = (MSymbolData) pool[name];
}
- public override string ToString () { return data.name; }
+ public override string ToString ()
+ {
+ string str = "";
+
+ foreach (char c in data.name)
+ {
+ if (c == '\\' || c == ' ' || c == '\'' || c == '\"' || c == ':')
+ str += "\\";
+ str += c;
+ }
+ return str;
+ }
- public override bool Equals (Object sym)
+ public static bool operator== (MSymbol sym1, MSymbol sym2)
{
- return (this.data == ((MSymbol) sym).data);
+ if (System.Object.ReferenceEquals(sym1, sym2))
+ return true;
+ if (((object) sym1 == null) || ((object) sym2 == null))
+ return false;
+ return sym1.data == sym2.data;
}
- public override int GetHashCode ()
+ public static bool operator!= (MSymbol sym1, MSymbol sym2)
{
- return (data.name.GetHashCode ());
+ return ! (sym1 == sym2);
}
- public static bool operator== (MSymbol sym1, MSymbol sym2)
+ public override bool Equals (object sym)
{
- return ((object) sym1.data == (object) sym2.data);
+ if (sym == null)
+ return false;
+ return (this.data == ((MSymbol) sym).data);
}
- public static bool operator!= (MSymbol sym1, MSymbol sym2)
+ public override int GetHashCode ()
+ {
+ return (data.name.GetHashCode ());
+ }
+
+ public MPlist Find (MSymbol key)
{
- return ((object) sym1.data != (object) sym2.data);
+ return (data.plist == null ? null : data.plist.Find (key));
}
- public object get (MSymbol key)
+ public object Get (MSymbol key)
{
- return (data.plist == null ? null : data.plist.get (key));
+ return (data.plist == null ? null : data.plist.Get (key));
}
- public object put (MSymbol key, object val)
+ public object Put (MSymbol key, object val)
{
if (data.plist == null)
data.plist = new MPlist ();
- return data.plist.put (key, val);
+ return data.plist.Put (key, val);
}
}
}