예제 #1
0
        public int WriteBinary(byte[] buf, int ofs)
        {
            int p = 0;

            p           += ProtoBuf.WriteVarInt(buf, ofs + p, (ulong)id);
            buf[ofs + p] = (byte)type; p++;
            p           += ProtoBuf.WriteString(buf, ofs + p, role);
            return(p);
        }
예제 #2
0
        public int WriteBinary(byte[] buf, int ofs)
        {
            int p = 0;

            p += ProtoBuf.WriteVarInt(buf, ofs + p, (ulong)id);
            p += ProtoBuf.WriteVarInt(buf, ofs + p, ProtoBuf.UnsignedInt32(latCode));
            p += ProtoBuf.WriteVarInt(buf, ofs + p, ProtoBuf.UnsignedInt32(lonCode));
            p += ProtoBuf.WriteVarInt(buf, ofs + p, (uint)values.Length);
            foreach (var val in values)
            {
                p += ProtoBuf.WriteString(buf, ofs + p, val.Key);
                p += ProtoBuf.WriteString(buf, ofs + p, val.Value);
            }
            return(p);
        }
예제 #3
0
        public int WriteBinary(byte[] buf, int ofs)
        {
            int p = 0;

            p += ProtoBuf.WriteVarInt(buf, ofs + p, (ulong)id);
            p += ProtoBuf.WriteVarInt(buf, ofs + p, (uint)values.Length);
            foreach (var val in values)
            {
                p += ProtoBuf.WriteString(buf, ofs + p, val.Key);
                p += ProtoBuf.WriteString(buf, ofs + p, val.Value);
            }
            p += ProtoBuf.WriteVarInt(buf, ofs + p, (uint)members.Length);
            foreach (var member in members)
            {
                p += member.WriteBinary(buf, ofs + p);
            }
            return(p);
        }
        static void WriteNodeBlock(Dictionary <string, int> keyDict, Dictionary <string, int> valDict, List <int> outputValues, List <DecodeNodeBlockValue> outputNodes, long lastId)
        {
            Func <Stream, byte[], int, int> write = (writeStream, buffer, len) =>
            {
                if (len > 0)
                {
                    writeStream.Write(buffer, 0, len);
                }
                return(-len);
            };

            using (var wdat = File.Create("../tmp/node_sorted_" + lastId + ".dat"))
            {
                var buf = new byte[1048576];
                int p   = 8;

                p += ProtoBuf.WriteVarInt(buf, p, (uint)keyDict.Count);
                foreach (var k in keyDict.OrderBy(x => x.Value).Select(x => x.Key))
                {
                    p += ProtoBuf.WriteString(buf, p, k);
                    if (p > 1000000)
                    {
                        p += write(wdat, buf, p);
                    }
                }
                p += ProtoBuf.WriteVarInt(buf, p, (uint)valDict.Count);
                foreach (var k in valDict.OrderBy(x => x.Value).Select(x => x.Key))
                {
                    p += ProtoBuf.WriteString(buf, p, k);
                    if (p > 1000000)
                    {
                        p += write(wdat, buf, p);
                    }
                }
                p            += write(wdat, buf, p);
                wdat.Position = 0;
                wdat.Write(BitConverter.GetBytes((int)wdat.Length), 0, sizeof(int));
                wdat.Position = wdat.Length;

                p += ProtoBuf.WriteVarInt(buf, p, (uint)(outputValues.Count / 2));
                foreach (var v in outputValues)
                {
                    p += ProtoBuf.WriteVarInt(buf, p, (uint)v);
                    if (p > 1000000)
                    {
                        p += write(wdat, buf, p);
                    }
                }
                p            += write(wdat, buf, p);
                wdat.Position = 4;
                wdat.Write(BitConverter.GetBytes((int)wdat.Length), 0, sizeof(int));
                wdat.Position = wdat.Length;

                p += ProtoBuf.WriteVarInt(buf, p, (uint)outputNodes.Count);
                long pos      = 0;
                long id       = 0;
                int  valuePos = 0;
                foreach (var n in outputNodes)
                {
                    p       += ProtoBuf.WriteVarInt(buf, p, ProtoBuf.UnsignedInt64(n.pos - pos));
                    pos      = n.pos;
                    p       += ProtoBuf.WriteVarInt(buf, p, ProtoBuf.UnsignedInt64(n.id - id));
                    id       = n.id;
                    p       += ProtoBuf.WriteVarInt(buf, p, ProtoBuf.UnsignedInt64(n.valuePos - valuePos));
                    valuePos = n.valuePos;
                    p       += ProtoBuf.WriteVarInt(buf, p, (uint)n.valueCount);
                    if (p > 1000000)
                    {
                        p += write(wdat, buf, p);
                    }
                }
                write(wdat, buf, p);
            }
        }