public void Visit(TypeMap type) { if (id < 0) { throw new Exception("invalie Variable.Id"); } Types.Type keytype = type.KeyType; Types.Type valuetype = type.ValueType; sw.WriteLine(prefix + bufname + ".WriteInt(Zeze.ByteBuffer.MAP | " + id + " << Zeze.ByteBuffer.TAG_SHIFT);"); sw.WriteLine(prefix + "{"); sw.WriteLine(prefix + " var _state_ = _os_.BeginWriteSegment();"); sw.WriteLine(prefix + " _os_.WriteInt(" + TypeTagName.GetName(keytype) + ");"); sw.WriteLine(prefix + " _os_.WriteInt(" + TypeTagName.GetName(valuetype) + ");"); sw.WriteLine(prefix + " _os_.WriteInt(" + varname + ".size);"); string tmpvarname = Program.GenUniqVarName(); sw.WriteLine(prefix + " for (let " + tmpvarname + " of " + varname + ".entries())"); sw.WriteLine(prefix + " {"); keytype.Accept(new Encode("" + tmpvarname + "[0]", -1, "_os_", sw, prefix + " ")); valuetype.Accept(new Encode("" + tmpvarname + "[1]", -1, "_os_", sw, prefix + " ")); sw.WriteLine(prefix + " }"); sw.WriteLine(prefix + " _os_.EndWriteSegment(_state_); "); sw.WriteLine(prefix + "}"); }
public static string GetName(Types.Type type) { TypeTagName v = new TypeTagName(); type.Accept(v); return(v.Name); }
public void Visit(TypeSet type) { if (id < 0) { throw new Exception("invalie Variable.Id"); } sw.WriteLine(prefix + bufname + ".WriteInt(Zeze.ByteBuffer.SET | " + id + " << Zeze.ByteBuffer.TAG_SHIFT);"); Types.Type vt = type.ValueType; sw.WriteLine(prefix + "{"); sw.WriteLine(prefix + " var _state_ = _os_.BeginWriteSegment();"); sw.WriteLine(prefix + " _os_.WriteInt(" + TypeTagName.GetName(vt) + ");"); sw.WriteLine(prefix + " _os_.WriteInt(" + varname + ".size);"); string tmpvarname = Program.GenUniqVarName(); sw.WriteLine(prefix + " for (let " + tmpvarname + " of " + varname + ")"); sw.WriteLine(prefix + " {"); vt.Accept(new Encode(tmpvarname, -1, "_os_", sw, prefix + " ")); sw.WriteLine(prefix + " }"); sw.WriteLine(prefix + " _os_.EndWriteSegment(_state_); "); sw.WriteLine(prefix + "}"); }