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); }
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); }
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); } }