示例#1
0
        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 + "}");
        }
示例#2
0
        public static string GetName(Types.Type type)
        {
            TypeTagName v = new TypeTagName();

            type.Accept(v);
            return(v.Name);
        }
示例#3
0
        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 + "}");
        }