internal long WriteTo(Stream stream) { var p = stream.Position; // write header and version. stream.WriteWithSize($"{nameof(Graph)}"); stream.WriteByte(1); // writes zoom and edge data size. stream.WriteByte((byte)_zoom); stream.WriteByte((byte)_edgeDataSize); // write tile index. stream.WriteByte((byte)TileSizeInIndex); _tiles.CopyToWithHeader(stream); // write vertices. stream.WriteByte((byte)CoordinateSizeInBytes); stream.Write(BitConverter.GetBytes((long)_vertexPointer), 0, 8); _vertices.CopyToWithSize(stream); _edgePointers.CopyToWithSize(stream); // write edges. stream.Write(BitConverter.GetBytes((long)_edgePointer), 0, 8); _edges.CopyToWithSize(stream); // write shapes. _shapes.CopyTo(stream); return(stream.Position - p); }