Skip to content

Commit c287fbf

Browse files
committed
update
1 parent 4c1ce5d commit c287fbf

File tree

4 files changed

+19
-24
lines changed

4 files changed

+19
-24
lines changed

src/PolylineAlgorithm/Coordinate.cs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,6 @@ public bool IsValid()
6363
=> ICoordinateValidator.Default.Latitude.IsInRange(Latitude)
6464
&& ICoordinateValidator.Default.Longitude.IsInRange(Longitude);
6565

66-
/// <summary>
67-
/// Deconstructs this instance into its latitude and longitude components.
68-
/// </summary>
69-
/// <param name="latitude">The latitude component.</param>
70-
/// <param name="longitude">The longitude component.</param>
71-
public readonly void Deconstruct(out double latitude, out double longitude) {
72-
latitude = Latitude;
73-
longitude = Longitude;
74-
}
75-
7666
#region Overrides
7767

7868
/// <inheritdoc />

src/PolylineAlgorithm/Internal/CoordinateVariance.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
[DebuggerDisplay($"{{{nameof(ToString)}(),nq}}")]
99
[StructLayout(LayoutKind.Auto)]
10-
public struct CoordinateVariance {
10+
internal struct CoordinateVariance {
1111
private (int Latitude, int Longitude) _current = (0, 0);
1212

1313
private CoordinateVariance(int latitude, int longitude) {
@@ -20,11 +20,11 @@ private CoordinateVariance(int latitude, int longitude) {
2020
public int Longitude { get; private set; }
2121

2222
[MethodImpl(MethodImplOptions.AggressiveInlining)]
23-
public void Next((int Latitude, int Longitude) next) {
24-
Latitude = Variance(_current.Latitude, next.Latitude);
25-
Longitude = Variance(_current.Longitude, next.Longitude);
23+
public void Next(int latitude, int longitude) {
24+
Latitude = Variance(_current.Latitude, latitude);
25+
Longitude = Variance(_current.Longitude, longitude);
2626

27-
_current = next;
27+
_current = (latitude, longitude);
2828
}
2929

3030
[MethodImpl(MethodImplOptions.AggressiveInlining)]

src/PolylineAlgorithm/PolylineDecoder.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ namespace PolylineAlgorithm;
99
using PolylineAlgorithm.Properties;
1010
using System;
1111
using System.Buffers;
12-
using System.Runtime.CompilerServices;
1312

1413

1514
/// <summary>
@@ -31,21 +30,21 @@ public IEnumerable<Coordinate> Decode(Polyline polyline) {
3130
ReadOnlySequence<char>.Enumerator enumerator = polyline.GetEnumerator();
3231

3332
int position;
34-
ReadOnlyMemory<char> buffer = enumerator.Current;
33+
ReadOnlyMemory<char> sequence = enumerator.Current;
3534

3635
while (enumerator.MoveNext()) {
3736
position = 0;
38-
buffer = enumerator.Current;
37+
sequence = enumerator.Current;
3938

40-
while (PolylineEncoding.Default.TryReadValue(ref latitude, ref buffer, ref position)
41-
&& PolylineEncoding.Default.TryReadValue(ref longitude, ref buffer, ref position)
39+
while (PolylineEncoding.Default.TryReadValue(ref latitude, ref sequence, ref position)
40+
&& PolylineEncoding.Default.TryReadValue(ref longitude, ref sequence, ref position)
4241
) {
4342
yield return new(PolylineEncoding.Default.Denormalize(latitude), PolylineEncoding.Default.Denormalize(longitude));
4443
}
4544

4645
consumed += position;
4746

48-
if (buffer.Length != position) {
47+
if (sequence.Length != position) {
4948
InvalidPolylineException.Throw(consumed);
5049
}
5150
}

src/PolylineAlgorithm/PolylineEncoder.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ public Polyline Encode(IEnumerable<Coordinate> coordinates) {
5050

5151
while (enumerator.MoveNext()) {
5252
variance
53-
.Next((PolylineEncoding.Default.Normalize(enumerator.Current.Latitude), PolylineEncoding.Default.Normalize(enumerator.Current.Longitude)));
54-
53+
.Next(PolylineEncoding.Default.Normalize(enumerator.Current.Latitude), PolylineEncoding.Default.Normalize(enumerator.Current.Longitude));
54+
5555
if (asMultiSegment
56-
&& buffer.Length - position < PolylineEncoding.Default.GetCharCount(variance.Latitude) + PolylineEncoding.Default.GetCharCount(variance.Longitude)) {
56+
&& GetRemainingBufferSize(position, buffer.Length) < GetRequiredLength(variance)) {
5757
builder
5858
.Append(buffer[..position].ToString().AsMemory());
5959

@@ -96,5 +96,11 @@ public Polyline Encode(IEnumerable<Coordinate> coordinates) {
9696
IEnumerable<Coordinate> enumerable => enumerable.Count(),
9797
_ => -1,
9898
};
99+
100+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
101+
static int GetRequiredLength(CoordinateVariance variance) => PolylineEncoding.Default.GetCharCount(variance.Latitude) + PolylineEncoding.Default.GetCharCount(variance.Longitude);
102+
103+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
104+
static int GetRemainingBufferSize(int position, int length) => length - position;
99105
}
100106
}

0 commit comments

Comments
 (0)