public void Encode(BinaryOutput stream) { stream.Write(Name); stream.Write(Tokens.Count); NamedVariableIO io = new NamedVariableIO(stream); foreach (IEncodable token in Tokens) { if (token is NamedVariable) { io.Write(token as NamedVariable); } else { stream.Write(-1); stream.Write(token); } } }
public static NamedCompound DecodeCompound(BinaryInput stream, List<Tuple<string, Type>> GenericChute) { NamedCompound result = new NamedCompound(); result.Name = stream.ReadString(); int c = stream.ReadInt32(); NamedVariableIO io = new NamedVariableIO(stream); for (int i = 0; i < c; i++) { NamedVariable varag= io.Read(); if (varag != null) result.Tokens.Add(varag); else { string n = stream.ReadString(); Type type = null; foreach (Tuple<string, Type> t in GenericChute.Where(t => n == t.Item1)) { type = t.Item2; } if (type != null) { } } } return result; }