public void Test() { var stream = new MemoryStream(); var breader = new BinaryReader(stream, Encoding.UTF8, true); var bwriter = new BinaryWriter(stream, Encoding.UTF8, true); var writer = new DeltaWriter(bwriter); var reader = new DeltaReader(breader); writer.WriteZigZag(10); writer.WriteZigZag(15); writer.WriteZigZag(7); writer.WriteZigZag(12); writer.WriteZigZag(1); bwriter.Flush(); stream.Position = 0; reader.ReadZigZag().Should().Be(10); reader.ReadZigZag().Should().Be(15); reader.ReadZigZag().Should().Be(7); reader.ReadZigZag().Should().Be(12); reader.ReadZigZag().Should().Be(1); }
private void WriteWay(SWay way) { if (waysCount == 0) { writer.Write((byte)0); } waysCount++; wayIdWriter.WriteZigZag(way.Id); writer.Write7BitEncodedInt((ulong)way.WayType); writer.Write7BitEncodedInt((ulong)way.Nodes.Count); wayNodeIdWriter.Reset(); wayLatWriter.Reset(); wayLonWriter.Reset(); foreach (var node in way.Nodes) { wayNodesCount++; wayNodeIdWriter.WriteZigZag((long)node.Id); wayLatWriter.WriteZigZag(node.Lat); wayLonWriter.WriteZigZag(node.Lon); } }
private void WriteNode(SNode node) { if (waysCount > 0) { throw new InvalidOperationException("Can't write node after ways."); } nodesCount++; nodeIdWriter.WriteZigZag(node.Id); nodeLatWriter.WriteZigZag(node.Lat); nodeLonWriter.WriteZigZag(node.Lon); }
public void Add(OsmRelation relation, int typeId, IReadOnlyList <RelationItemInfo> itemInfos, BoundingRect rect) { if (relation == null) { throw new ArgumentNullException(nameof(relation)); } if (itemInfos == null) { throw new ArgumentNullException(nameof(itemInfos)); } if (rect == null) { throw new ArgumentNullException(nameof(rect)); } startPositions.Add(new RelationLocation { Id = relation.Id, Offset = stream.Position }); idWriter.WriteIncrementOnly((ulong)relation.Id); writer.Write7BitEncodedInt((ulong)typeId); rect.WriteTo(writer); writer.Write7BitEncodedInt((ulong)relation.Items.Count); memberIdWriter.Reset(); memberMidLatWriter.Reset(); memberMidLonWriter.Reset(); for (var index = 0; index < relation.Items.Count; index++) { var member = relation.Items[index]; writer.Write((byte)member.MemberType); memberIdWriter.WriteZigZag(member.Id); writer.Write7BitEncodedInt(GetRoleId(member.Role)); var info = itemInfos[index]; memberMidLatWriter.WriteZigZag(info.MidLat); memberMidLonWriter.WriteZigZag(info.MidLon); } }
private void WriteWayData(SWay way) { idWriter.WriteIncrementOnly((ulong)way.Id); var nodes = way.Nodes; waysWriter.Write7BitEncodedInt((ulong)nodes.Count); nodeIdWriter.Reset(); latWriter.Reset(); lonWriter.Reset(); foreach (var node in nodes) { nodeIdWriter.WriteZigZag(node.Id); latWriter.WriteZigZag(node.Lat); lonWriter.WriteZigZag(node.Lon); } }