Fixed bugs with byte[] sizes
This commit is contained in:
parent
8093ad5dfd
commit
31b2810178
@ -91,11 +91,13 @@ public static class ByteConverter
|
|||||||
|
|
||||||
public static byte[] GetBytes(OsmNode node)
|
public static byte[] GetBytes(OsmNode node)
|
||||||
{
|
{
|
||||||
int totalBytes = 4 + 8; //size + Coordinates
|
int totalBytes = sizeof(int) + 8; //size + Coordinates
|
||||||
HashSet<byte[]> edges = new();
|
HashSet<byte[]> edges = new();
|
||||||
foreach (OsmEdge edge in node.edges)
|
foreach (OsmEdge edge in node.edges)
|
||||||
{
|
{
|
||||||
edges.Add(GetBytes(edge));
|
byte[] edgeBytes = GetBytes(edge);
|
||||||
|
edges.Add(edgeBytes);
|
||||||
|
totalBytes += edgeBytes.Length;
|
||||||
}
|
}
|
||||||
|
|
||||||
byte[] retBytes = new byte[totalBytes];
|
byte[] retBytes = new byte[totalBytes];
|
||||||
@ -158,6 +160,7 @@ public static class ByteConverter
|
|||||||
tagsSize += tagBytes.Length;
|
tagsSize += tagBytes.Length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
totalBytes += tagsSize;
|
||||||
byte[] retBytes = new byte[totalBytes];
|
byte[] retBytes = new byte[totalBytes];
|
||||||
Array.Copy(BitConverter.GetBytes(tagsSize), retBytes, 4);
|
Array.Copy(BitConverter.GetBytes(tagsSize), retBytes, 4);
|
||||||
Array.Copy(GetBytes(edge.neighborCoordinates), 0, retBytes, sizeof(int), 8);
|
Array.Copy(GetBytes(edge.neighborCoordinates), 0, retBytes, sizeof(int), 8);
|
||||||
@ -206,32 +209,37 @@ public static class ByteConverter
|
|||||||
|
|
||||||
public static byte[] GetBytes(KeyValuePair<OsmEdge.tagType, object> tag)
|
public static byte[] GetBytes(KeyValuePair<OsmEdge.tagType, object> tag)
|
||||||
{
|
{
|
||||||
byte[] objectBytes = Array.Empty<byte>();
|
byte[] objectBytes;
|
||||||
if (tag.Value.GetType() == Type.GetType("string"))
|
Type objectType = tag.Value.GetType();
|
||||||
|
if (objectType == Type.GetType("System.String"))
|
||||||
{
|
{
|
||||||
objectBytes = Encoding.ASCII.GetBytes((string)tag.Value);
|
objectBytes = Encoding.ASCII.GetBytes((string)tag.Value);
|
||||||
}
|
}
|
||||||
else if (tag.Value.GetType() == Type.GetType("bool"))
|
else if (objectType == Type.GetType("System.Boolean"))
|
||||||
{
|
{
|
||||||
objectBytes = BitConverter.GetBytes((bool)tag.Value);
|
objectBytes = BitConverter.GetBytes((bool)tag.Value);
|
||||||
}
|
}
|
||||||
else if (tag.Value.GetType() == Type.GetType("int"))
|
else if (objectType == Type.GetType("System.Int32"))
|
||||||
{
|
{
|
||||||
objectBytes = BitConverter.GetBytes((int)tag.Value);
|
objectBytes = BitConverter.GetBytes((int)tag.Value);
|
||||||
}
|
}
|
||||||
else if (tag.Value.GetType() == Type.GetType("ulong"))
|
else if (objectType == Type.GetType("System.UInt64"))
|
||||||
{
|
{
|
||||||
objectBytes = BitConverter.GetBytes((ulong)tag.Value);
|
objectBytes = BitConverter.GetBytes((ulong)tag.Value);
|
||||||
}
|
}
|
||||||
else if (tag.Value.GetType() == Type.GetType("byte"))
|
else if (objectType == Type.GetType("System.Byte") || objectType.Name == "wayType")
|
||||||
{
|
{
|
||||||
objectBytes = new[] { (byte)tag.Value };
|
objectBytes = new[] { (byte)tag.Value };
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new Exception(string.Format("Tag-Bytes object-Type: {0}", tag.Value.GetType()));
|
||||||
|
}
|
||||||
|
|
||||||
byte[] retBytes = new byte[sizeof(int) + 1 + objectBytes.Length];
|
byte[] retBytes = new byte[sizeof(int) + 1 + objectBytes.Length];
|
||||||
Array.Copy(BitConverter.GetBytes(objectBytes.Length), 0, retBytes, 0, sizeof(int));
|
Array.Copy(BitConverter.GetBytes(objectBytes.Length), 0, retBytes, 0, sizeof(int));
|
||||||
retBytes[sizeof(int)] = (byte)tag.Key;
|
retBytes[sizeof(int)] = (byte)tag.Key;
|
||||||
Array.Copy(objectBytes, 0, retBytes, sizeof(int) + 1, retBytes.Length);
|
Array.Copy(objectBytes, 0, retBytes, sizeof(int) + 1, objectBytes.Length);
|
||||||
return retBytes;
|
return retBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user