Skip to content

Commit 2625d97

Browse files
committed
QuantityParser: Parse using given abbreviations cache
Replace delegates for external unit parsing code with UnitParser.
1 parent ed944c3 commit 2625d97

File tree

8 files changed

+10
-29
lines changed

8 files changed

+10
-29
lines changed

UnitsNet.WindowsRuntimeComponent/GeneratedCode/Quantities/Information.WindowsRuntimeComponent.g.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,6 @@ public static Information Parse(string str, [CanBeNull] string cultureName)
655655
return QuantityParser.Default.Parse<Information, InformationUnit>(
656656
str,
657657
provider,
658-
UnitParser.Default.Parse<InformationUnit>,
659658
From);
660659
}
661660

@@ -688,7 +687,6 @@ public static bool TryParse([CanBeNull] string str, [CanBeNull] string cultureNa
688687
return QuantityParser.Default.TryParse<Information, InformationUnit>(
689688
str,
690689
provider,
691-
UnitParser.Default.TryParse<InformationUnit>,
692690
From,
693691
out result);
694692
}

UnitsNet.WindowsRuntimeComponent/GeneratedCode/Quantities/Length.WindowsRuntimeComponent.g.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,6 @@ public static Length Parse(string str, [CanBeNull] string cultureName)
595595
return QuantityParser.Default.Parse<Length, LengthUnit>(
596596
str,
597597
provider,
598-
UnitParser.Default.Parse<LengthUnit>,
599598
From);
600599
}
601600

@@ -628,7 +627,6 @@ public static bool TryParse([CanBeNull] string str, [CanBeNull] string cultureNa
628627
return QuantityParser.Default.TryParse<Length, LengthUnit>(
629628
str,
630629
provider,
631-
UnitParser.Default.TryParse<LengthUnit>,
632630
From,
633631
out result);
634632
}

UnitsNet.WindowsRuntimeComponent/GeneratedCode/Quantities/Level.WindowsRuntimeComponent.g.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,6 @@ public static Level Parse(string str, [CanBeNull] string cultureName)
295295
return QuantityParser.Default.Parse<Level, LevelUnit>(
296296
str,
297297
provider,
298-
UnitParser.Default.Parse<LevelUnit>,
299298
From);
300299
}
301300

@@ -328,7 +327,6 @@ public static bool TryParse([CanBeNull] string str, [CanBeNull] string cultureNa
328327
return QuantityParser.Default.TryParse<Level, LevelUnit>(
329328
str,
330329
provider,
331-
UnitParser.Default.TryParse<LevelUnit>,
332330
From,
333331
out result);
334332
}

UnitsNet/CustomCode/QuantityParser.cs

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@
3030
// ReSharper disable once CheckNamespace
3131
namespace UnitsNet
3232
{
33-
internal delegate TUnitType ParseUnitDelegate<out TUnitType>(string unitString, IFormatProvider formatProvider) where TUnitType : Enum;
34-
internal delegate bool TryParseUnitDelegate<TUnitType>(string unitString, IFormatProvider formatProvider, out TUnitType unit) where TUnitType : Enum;
3533

3634
#if !WINDOWS_UWP
3735
internal delegate TQuantity QuantityFromDelegate<out TQuantity, in TUnitType>(QuantityValue value, TUnitType fromUnit)
@@ -51,12 +49,14 @@ internal class QuantityParser
5149
private const NumberStyles ParseNumberStyles = NumberStyles.Number | NumberStyles.Float | NumberStyles.AllowExponent;
5250

5351
private readonly UnitAbbreviationsCache _unitAbbreviationsCache;
52+
private UnitParser _unitParser;
5453

5554
public static QuantityParser Default { get; }
5655

5756
public QuantityParser(UnitAbbreviationsCache unitAbbreviationsCache)
5857
{
5958
_unitAbbreviationsCache = unitAbbreviationsCache ?? UnitAbbreviationsCache.Default;
59+
_unitParser = new UnitParser(_unitAbbreviationsCache);
6060
}
6161

6262
static QuantityParser()
@@ -67,13 +67,11 @@ static QuantityParser()
6767
[SuppressMessage("ReSharper", "UseStringInterpolation")]
6868
internal TQuantity Parse<TQuantity, TUnitType>([NotNull] string str,
6969
[CanBeNull] IFormatProvider formatProvider,
70-
[NotNull] ParseUnitDelegate<TUnitType> parseUnit,
7170
[NotNull] QuantityFromDelegate<TQuantity, TUnitType> fromDelegate)
7271
where TQuantity : IQuantity
7372
where TUnitType : Enum
7473
{
7574
if (str == null) throw new ArgumentNullException(nameof(str));
76-
if (parseUnit == null) throw new ArgumentNullException(nameof(parseUnit));
7775

7876
var numFormat = formatProvider != null
7977
? (NumberFormatInfo) formatProvider.GetFormat(typeof(NumberFormatInfo))
@@ -91,13 +89,12 @@ internal TQuantity Parse<TQuantity, TUnitType>([NotNull] string str,
9189
throw ex;
9290
}
9391

94-
return ParseWithRegex(valueString, unitString, parseUnit, fromDelegate, formatProvider);
92+
return ParseWithRegex(valueString, unitString, fromDelegate, formatProvider);
9593
}
9694

9795
[SuppressMessage("ReSharper", "UseStringInterpolation")]
9896
internal bool TryParse<TQuantity, TUnitType>([NotNull] string str,
9997
[CanBeNull] IFormatProvider formatProvider,
100-
[NotNull] TryParseUnitDelegate<TUnitType> parseUnit,
10198
[NotNull] QuantityFromDelegate<TQuantity, TUnitType> fromDelegate,
10299
out TQuantity result)
103100
where TQuantity : IQuantity
@@ -119,7 +116,7 @@ internal bool TryParse<TQuantity, TUnitType>([NotNull] string str,
119116
if (!ExtractValueAndUnit(regex, str, out var valueString, out var unitString))
120117
return false;
121118

122-
return TryParseWithRegex(valueString, unitString, parseUnit, fromDelegate, formatProvider, out result);
119+
return TryParseWithRegex(valueString, unitString, fromDelegate, formatProvider, out result);
123120
}
124121

125122
internal string CreateRegexPatternForUnit<TUnitType>(
@@ -148,26 +145,24 @@ private static string GetRegexPatternForUnitAbbreviations(IEnumerable<string> ab
148145
/// Parse a string given a particular regular expression.
149146
/// </summary>
150147
/// <exception cref="UnitsNetException">Error parsing string.</exception>
151-
private static TQuantity ParseWithRegex<TQuantity, TUnitType>(string valueString,
148+
private TQuantity ParseWithRegex<TQuantity, TUnitType>(string valueString,
152149
string unitString,
153-
ParseUnitDelegate<TUnitType> parseUnit,
154150
QuantityFromDelegate<TQuantity, TUnitType> fromDelegate,
155151
IFormatProvider formatProvider)
156152
where TQuantity : IQuantity
157153
where TUnitType : Enum
158154
{
159155
var value = double.Parse(valueString, ParseNumberStyles, formatProvider);
160-
var parsedUnit = parseUnit(unitString, formatProvider);
156+
var parsedUnit = _unitParser.Parse<TUnitType>(unitString, formatProvider);
161157
return fromDelegate(value, parsedUnit);
162158
}
163159

164160
/// <summary>
165161
/// Parse a string given a particular regular expression.
166162
/// </summary>
167163
/// <exception cref="UnitsNetException">Error parsing string.</exception>
168-
private static bool TryParseWithRegex<TQuantity, TUnitType>(string valueString,
164+
private bool TryParseWithRegex<TQuantity, TUnitType>(string valueString,
169165
string unitString,
170-
TryParseUnitDelegate<TUnitType> tryParseUnit,
171166
QuantityFromDelegate<TQuantity, TUnitType> fromDelegate,
172167
IFormatProvider formatProvider,
173168
out TQuantity result)
@@ -177,10 +172,10 @@ private static bool TryParseWithRegex<TQuantity, TUnitType>(string valueString,
177172
result = default;
178173

179174
if (!double.TryParse(valueString, ParseNumberStyles, formatProvider, out var value))
180-
return false;
175+
return false;
181176

182-
if (!tryParseUnit(unitString, formatProvider, out var parsedUnit))
183-
return false;
177+
if (!_unitParser.TryParse<TUnitType>(unitString, formatProvider, out var parsedUnit))
178+
return false;
184179

185180
result = fromDelegate(value, parsedUnit);
186181
return true;

UnitsNet/GeneratedCode/Quantities/Information.NetFramework.g.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,6 @@ public static Information Parse(string str, [CanBeNull] IFormatProvider provider
611611
return QuantityParser.Default.Parse<Information, InformationUnit>(
612612
str,
613613
provider,
614-
UnitParser.Default.Parse<InformationUnit>,
615614
From);
616615
}
617616

@@ -643,7 +642,6 @@ public static bool TryParse([CanBeNull] string str, [CanBeNull] IFormatProvider
643642
return QuantityParser.Default.TryParse<Information, InformationUnit>(
644643
str,
645644
provider,
646-
UnitParser.Default.TryParse<InformationUnit>,
647645
From,
648646
out result);
649647
}

UnitsNet/GeneratedCode/Quantities/Length.NetFramework.g.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,6 @@ public static Length Parse(string str, [CanBeNull] IFormatProvider provider)
555555
return QuantityParser.Default.Parse<Length, LengthUnit>(
556556
str,
557557
provider,
558-
UnitParser.Default.Parse<LengthUnit>,
559558
From);
560559
}
561560

@@ -587,7 +586,6 @@ public static bool TryParse([CanBeNull] string str, [CanBeNull] IFormatProvider
587586
return QuantityParser.Default.TryParse<Length, LengthUnit>(
588587
str,
589588
provider,
590-
UnitParser.Default.TryParse<LengthUnit>,
591589
From,
592590
out result);
593591
}

UnitsNet/GeneratedCode/Quantities/Level.NetFramework.g.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,6 @@ public static Level Parse(string str, [CanBeNull] IFormatProvider provider)
275275
return QuantityParser.Default.Parse<Level, LevelUnit>(
276276
str,
277277
provider,
278-
UnitParser.Default.Parse<LevelUnit>,
279278
From);
280279
}
281280

@@ -307,7 +306,6 @@ public static bool TryParse([CanBeNull] string str, [CanBeNull] IFormatProvider
307306
return QuantityParser.Default.TryParse<Level, LevelUnit>(
308307
str,
309308
provider,
310-
UnitParser.Default.TryParse<LevelUnit>,
311309
From,
312310
out result);
313311
}

UnitsNet/Scripts/Include-GenerateQuantitySourceCodeNetFramework.ps1

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,6 @@ if ($wrc) {@"
560560
return QuantityParser.Default.Parse<$quantityName, $unitEnumName>(
561561
str,
562562
provider,
563-
UnitParser.Default.Parse<$unitEnumName>,
564563
From);
565564
}
566565
@@ -600,7 +599,6 @@ if ($wrc) {@"
600599
return QuantityParser.Default.TryParse<$quantityName, $unitEnumName>(
601600
str,
602601
provider,
603-
UnitParser.Default.TryParse<$unitEnumName>,
604602
From,
605603
out result);
606604
}

0 commit comments

Comments
 (0)