Skip to content

Commit b3d1aea

Browse files
author
Petr Sramek
committed
just commit
1 parent becf6e1 commit b3d1aea

File tree

5 files changed

+35
-22
lines changed

5 files changed

+35
-22
lines changed

src/DropoutCoder.PolylineAlgorithm/ICoordinateValidator.cs

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/DropoutCoder.PolylineAlgorithm/Internal/Constants.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ internal static class Coordinate
6666
/// </summary>
6767
public const int MaxLongitude = 180;
6868

69+
/// <summary>
70+
/// Defines the maximum value for latitude
71+
/// </summary>
72+
public const int MinLatitude = -MaxLatitude;
73+
74+
/// <summary>
75+
/// Defines the maximum value for longitude
76+
/// </summary>
77+
public const int MinLongitude = -MaxLongitude;
78+
6979
#endregion
7080
}
7181
}

src/DropoutCoder.PolylineAlgorithm/Internal/CoordinateValidator.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,19 @@ internal class CoordinateValidator
1919
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2020
public bool IsValid((double Latitude, double Longitude) coordinate)
2121
{
22-
return Math.Abs(coordinate.Latitude) <= Constants.Coordinate.MaxLatitude && Math.Abs(coordinate.Longitude) <= Constants.Coordinate.MaxLongitude;
22+
return IsValidLatitude(coordinate.Latitude) && IsValidLongitude(coordinate.Longitude);
23+
}
24+
25+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
26+
public bool IsValidLatitude(double latitude)
27+
{
28+
return latitude >= Constants.Coordinate.MinLatitude && latitude <= Constants.Coordinate.MaxLatitude;
29+
}
30+
31+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
32+
public bool IsValidLongitude(double longitude)
33+
{
34+
return longitude >= Constants.Coordinate.MinLongitude && longitude <= Constants.Coordinate.MaxLongitude;
2335
}
2436

2537
#endregion
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace DropoutCoder.PolylineAlgorithm
2+
{
3+
public static class PolylineAlgorithm
4+
{
5+
}
6+
}

src/DropoutCoder.PolylineAlgorithm/PolylineEncoder.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
namespace DropoutCoder.PolylineAlgorithm
77
{
88
using DropoutCoder.PolylineAlgorithm.Internal;
9-
using Microsoft.Extensions.ObjectPool;
109
using System;
1110
using System.Collections.Generic;
1211
using System.Linq;
@@ -16,7 +15,6 @@ namespace DropoutCoder.PolylineAlgorithm
1615
public sealed class PolylineEncoder : IPolylineEncoder
1716
{
1817
private readonly CoordinateValidator _validator = new CoordinateValidator();
19-
private readonly ObjectPool<StringBuilder> _pool = new DefaultObjectPoolProvider().CreateStringBuilderPool(5, 250);
2018

2119
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2220
public IEnumerable<(double Latitude, double Longitude)> Decode(char[] polyline)
@@ -49,6 +47,7 @@ public sealed class PolylineEncoder : IPolylineEncoder
4947

5048
var coordinate = (GetCoordinate(latitude), GetCoordinate(longitude));
5149

50+
// Validating decoded coordinate. If not valid exception is thrown
5251
if (!_validator.IsValid(coordinate))
5352
{
5453
throw new InvalidOperationException(ExceptionMessageResource.PolylineCharArrayIsMalformed);
@@ -106,7 +105,7 @@ public string Encode(IEnumerable<(double Latitude, double Longitude)> coordinate
106105
// Initializing local variables
107106
int previousLatitude = 0;
108107
int previousLongitude = 0;
109-
var sb = _pool.Get();
108+
var sb = new StringBuilder(coordinates.Count() * 5);
110109

111110
// Looping over coordinates and building encoded result
112111
foreach (var coordinate in coordinates)
@@ -121,13 +120,10 @@ public string Encode(IEnumerable<(double Latitude, double Longitude)> coordinate
121120
previousLongitude = longitude;
122121
}
123122

124-
var result = sb.ToString();
125-
126-
_pool.Return(sb);
127-
128-
return result;
123+
return sb.ToString();
129124

130125
#region Local functions
126+
131127
bool TryValidate(IEnumerable<(double Latitude, double Longitude)> collection, out ICollection<CoordinateValidationException> exceptions)
132128
{
133129
exceptions = new List<CoordinateValidationException>(collection.Count());
@@ -165,7 +161,8 @@ IEnumerable<char> GetSequence(int value)
165161

166162
yield return (char)(rem + Constants.ASCII.QuestionMark);
167163
}
164+
165+
#endregion
168166
}
169-
#endregion
170167
}
171168
}

0 commit comments

Comments
 (0)