Skip to content

Commit 44a16af

Browse files
committed
updated encoding options, added docs
1 parent adf9f98 commit 44a16af

4 files changed

Lines changed: 86 additions & 4 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace PolylineAlgorithm.Abstraction;
2+
3+
using PolylineAlgorithm.Abstraction.Validation.Abstraction;
4+
5+
public interface IPolylineEncodingOptionsBuilder<TCoordinate> {
6+
IPolylineEncodingOptionsBuilder<TCoordinate> WithBufferSize(int maxBufferSize);
7+
IPolylineEncodingOptionsBuilder<TCoordinate> WithValidator(Validator<TCoordinate> validator);
8+
PolylineEncodingOptions<TCoordinate> Build();
9+
}

src/PolylineAlgorithm.Abstraction/PolylineEncodingOptions.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
namespace PolylineAlgorithm.Abstraction;
77

8-
using PolylineAlgorithm.Abstraction.Validation;
98
using PolylineAlgorithm.Abstraction.Validation.Abstraction;
109

1110
/// <summary>
@@ -16,16 +15,16 @@ public class PolylineEncodingOptions<TCoordinate> {
1615
/// <summary>
1716
/// Gets the maximum buffer size for encoding operations.
1817
/// </summary>
19-
public int MaxBufferSize { get; } = 64_000;
18+
public int BufferSize { get; internal set; }
2019

2120
/// <summary>
2221
/// Gets the maximum number of characters that can be used in the encoding buffer.
2322
/// </summary>
2423
/// <returns>The maximum character count based on the buffer size.</returns>
25-
public int MaxCharCount => MaxBufferSize / sizeof(char);
24+
public int MaxCharCount => BufferSize / sizeof(char);
2625

2726
/// <summary>
2827
/// Gets the validator used to validate coordinates, latitude, and longitude values.
2928
/// </summary>
30-
public Validator<TCoordinate> Validator { get; } = new NullValidator<TCoordinate>();
29+
public Validator<TCoordinate> Validator { get; internal set; }
3130
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//
2+
// Copyright © Pete Sramek. All rights reserved.
3+
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
4+
//
5+
6+
namespace PolylineAlgorithm.Abstraction;
7+
8+
/// <summary>
9+
/// Provides a static factory for creating <see cref="IPolylineEncodingOptionsBuilder{TCoordinate}"/> instances.
10+
/// </summary>
11+
public class PolylineEncodingOptionsBuilder {
12+
/// <summary>
13+
/// Creates a new <see cref="IPolylineEncodingOptionsBuilder{TCoordinate}"/> instance for the specified coordinate type.
14+
/// </summary>
15+
/// <typeparam name="TCoordinate">The type representing a coordinate.</typeparam>
16+
/// <returns>An <see cref="IPolylineEncodingOptionsBuilder{TCoordinate}"/> instance for configuring polyline encoding options.</returns>
17+
public static IPolylineEncodingOptionsBuilder<TCoordinate> Create<TCoordinate>() {
18+
return new PolylineEncodingOptionsBuilder<TCoordinate>();
19+
}
20+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
//
2+
// Copyright © Pete Sramek. All rights reserved.
3+
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
4+
//
5+
6+
namespace PolylineAlgorithm.Abstraction;
7+
8+
using PolylineAlgorithm.Abstraction.Validation;
9+
using PolylineAlgorithm.Abstraction.Validation.Abstraction;
10+
using System;
11+
12+
/// <summary>
13+
/// Provides a builder for configuring <see cref="PolylineEncodingOptions{TCoordinate}"/> instances.
14+
/// </summary>
15+
/// <typeparam name="TCoordinate">The type representing a coordinate.</typeparam>
16+
internal class PolylineEncodingOptionsBuilder<TCoordinate> : IPolylineEncodingOptionsBuilder<TCoordinate> {
17+
private int _bufferSize = 64_000;
18+
private Validator<TCoordinate> _validator = new NullValidator<TCoordinate>();
19+
20+
/// <summary>
21+
/// Builds a new <see cref="PolylineEncodingOptions{TCoordinate}"/> instance using the configured options.
22+
/// </summary>
23+
/// <returns>A configured <see cref="PolylineEncodingOptions{TCoordinate}"/> instance.</returns>
24+
PolylineEncodingOptions<TCoordinate> IPolylineEncodingOptionsBuilder<TCoordinate>.Build() {
25+
return new PolylineEncodingOptions<TCoordinate> {
26+
BufferSize = _bufferSize,
27+
Validator = _validator
28+
};
29+
}
30+
31+
/// <summary>
32+
/// Sets the buffer size for encoding operations.
33+
/// </summary>
34+
/// <param name="maxBufferSize">The maximum buffer size. Must be greater than 11.</param>
35+
/// <returns>The current builder instance.</returns>
36+
/// <exception cref="ArgumentOutOfRangeException">Thrown if <paramref name="maxBufferSize"/> is less than or equal to 11.</exception>
37+
IPolylineEncodingOptionsBuilder<TCoordinate> IPolylineEncodingOptionsBuilder<TCoordinate>.WithBufferSize(int maxBufferSize) {
38+
_bufferSize = maxBufferSize > 11 ? maxBufferSize : throw new ArgumentOutOfRangeException(nameof(maxBufferSize), "Buffer size must be greater than 11.");
39+
40+
return this;
41+
}
42+
43+
/// <summary>
44+
/// Sets the validator to use for coordinate validation.
45+
/// </summary>
46+
/// <param name="validator">The validator instance to use.</param>
47+
/// <returns>The current builder instance.</returns>
48+
/// <exception cref="ArgumentNullException">Thrown if <paramref name="validator"/> is <c>null</c>.</exception>
49+
IPolylineEncodingOptionsBuilder<TCoordinate> IPolylineEncodingOptionsBuilder<TCoordinate>.WithValidator(Validator<TCoordinate> validator) {
50+
_validator = validator ?? throw new ArgumentNullException(nameof(validator));
51+
52+
return this;
53+
}
54+
}

0 commit comments

Comments
 (0)