Skip to content

Commit 193849a

Browse files
committed
QuantityParser: Parse using given abbreviations cache
Replace delegates for external unit parsing code with UnitParser.
1 parent 49c99c7 commit 193849a

8 files changed

+8
-27
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
(x, y) => From(x.Bits + y.Bits, BaseUnit));
661660
}
@@ -689,7 +688,6 @@ public static bool TryParse([CanBeNull] string str, [CanBeNull] string cultureNa
689688
return QuantityParser.Default.TryParse<Information, InformationUnit>(
690689
str,
691690
provider,
692-
UnitParser.Default.TryParse<InformationUnit>,
693691
From,
694692
(x, y) => From(x.Bits + y.Bits, BaseUnit), out result);
695693
}

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
(x, y) => From(x.Meters + y.Meters, BaseUnit));
601600
}
@@ -629,7 +628,6 @@ public static bool TryParse([CanBeNull] string str, [CanBeNull] string cultureNa
629628
return QuantityParser.Default.TryParse<Length, LengthUnit>(
630629
str,
631630
provider,
632-
UnitParser.Default.TryParse<LengthUnit>,
633631
From,
634632
(x, y) => From(x.Meters + y.Meters, BaseUnit), out result);
635633
}

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
(x, y) => From(x.Decibels + y.Decibels, BaseUnit));
301300
}
@@ -329,7 +328,6 @@ public static bool TryParse([CanBeNull] string str, [CanBeNull] string cultureNa
329328
return QuantityParser.Default.TryParse<Level, LevelUnit>(
330329
str,
331330
provider,
332-
UnitParser.Default.TryParse<LevelUnit>,
333331
From,
334332
(x, y) => From(x.Decibels + y.Decibels, BaseUnit), out result);
335333
}

UnitsNet/CustomCode/QuantityParser.cs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +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;
35-
3633
#if !WINDOWS_UWP
3734
internal delegate TQuantity QuantityFromDelegate<out TQuantity, TUnitType>(QuantityValue value, TUnitType fromUnit)
3835
where TQuantity : IQuantity
@@ -46,12 +43,14 @@ internal delegate TQuantity QuantityFromDelegate<out TQuantity, TUnitType>(doubl
4643
internal class QuantityParser
4744
{
4845
private readonly UnitAbbreviationsCache unitAbbreviationsCache;
46+
private UnitParser _unitParser;
4947

5048
public static QuantityParser Default { get; }
5149

5250
public QuantityParser(UnitAbbreviationsCache unitAbbreviationsCache)
5351
{
5452
this.unitAbbreviationsCache = unitAbbreviationsCache ?? UnitAbbreviationsCache.Default;
53+
this._unitParser = new UnitParser(this.unitAbbreviationsCache);
5554
}
5655

5756
static QuantityParser()
@@ -62,14 +61,12 @@ static QuantityParser()
6261
[SuppressMessage("ReSharper", "UseStringInterpolation")]
6362
internal TQuantity Parse<TQuantity, TUnitType>([NotNull] string str,
6463
[CanBeNull] IFormatProvider formatProvider,
65-
[NotNull] ParseUnitDelegate<TUnitType> parseUnit,
6664
[NotNull] QuantityFromDelegate<TQuantity, TUnitType> fromDelegate,
6765
[NotNull] Func<TQuantity, TQuantity, TQuantity> add)
6866
where TQuantity : IQuantity
6967
where TUnitType : Enum
7068
{
7169
if (str == null) throw new ArgumentNullException(nameof(str));
72-
if (parseUnit == null) throw new ArgumentNullException(nameof(parseUnit));
7370
if (add == null) throw new ArgumentNullException(nameof(add));
7471

7572
var numFormat = formatProvider != null
@@ -101,7 +98,7 @@ internal TQuantity Parse<TQuantity, TUnitType>([NotNull] string str,
10198
@"(and)?,?", // allow "and" & "," separators between quantities
10299
@"(?<invalid>[a-z]*)?"); // capture invalid input
103100

104-
var quantities = ParseWithRegex(regexString, str, parseUnit, fromDelegate, formatProvider);
101+
var quantities = ParseWithRegex(regexString, str, fromDelegate, formatProvider);
105102
if (quantities.Count == 0)
106103
{
107104
throw new ArgumentException(
@@ -116,7 +113,7 @@ internal TQuantity Parse<TQuantity, TUnitType>([NotNull] string str,
116113
/// Parse a string given a particular regular expression.
117114
/// </summary>
118115
/// <exception cref="UnitsNetException">Error parsing string.</exception>
119-
private static List<TQuantity> ParseWithRegex<TQuantity, TUnitType>(string regexString, string str, ParseUnitDelegate<TUnitType> parseUnit,
116+
private List<TQuantity> ParseWithRegex<TQuantity, TUnitType>(string regexString, string str,
120117
QuantityFromDelegate<TQuantity, TUnitType> fromDelegate, IFormatProvider formatProvider = null)
121118
where TQuantity : IQuantity
122119
where TUnitType : Enum
@@ -147,7 +144,7 @@ private static List<TQuantity> ParseWithRegex<TQuantity, TUnitType>(string regex
147144
try
148145
{
149146
var value = double.Parse(valueString, formatProvider);
150-
var parsedUnit = parseUnit(unitString, formatProvider);
147+
var parsedUnit = _unitParser.Parse<TUnitType>(unitString, formatProvider);
151148
var quantity = fromDelegate(value, parsedUnit);
152149

153150
converted.Add(quantity);
@@ -173,7 +170,6 @@ private static List<TQuantity> ParseWithRegex<TQuantity, TUnitType>(string regex
173170
[SuppressMessage("ReSharper", "UseStringInterpolation")]
174171
internal bool TryParse<TQuantity, TUnitType>([NotNull] string str,
175172
[CanBeNull] IFormatProvider formatProvider,
176-
[NotNull] TryParseUnitDelegate<TUnitType> parseUnit,
177173
[NotNull] QuantityFromDelegate<TQuantity, TUnitType> fromDelegate,
178174
[NotNull] Func<TQuantity, TQuantity, TQuantity> add, out TQuantity value)
179175
where TQuantity : IQuantity
@@ -182,7 +178,6 @@ internal bool TryParse<TQuantity, TUnitType>([NotNull] string str,
182178
value = default(TQuantity);
183179

184180
if(string.IsNullOrWhiteSpace(str)) return false;
185-
if(parseUnit == null) return false;
186181
if(add == null) return false;
187182

188183
var numFormat = formatProvider != null
@@ -214,7 +209,7 @@ internal bool TryParse<TQuantity, TUnitType>([NotNull] string str,
214209
@"(and)?,?", // allow "and" & "," separators between quantities
215210
@"(?<invalid>[a-z]*)?"); // capture invalid input
216211

217-
if(!TryParseWithRegex<TQuantity, TUnitType>(regexString, str, parseUnit, fromDelegate, formatProvider, out var quantities))
212+
if(!TryParseWithRegex<TQuantity, TUnitType>(regexString, str, fromDelegate, formatProvider, out var quantities))
218213
return false;
219214

220215
value = quantities.Aggregate(add);
@@ -225,7 +220,7 @@ internal bool TryParse<TQuantity, TUnitType>([NotNull] string str,
225220
/// Parse a string given a particular regular expression.
226221
/// </summary>
227222
/// <exception cref="UnitsNetException">Error parsing string.</exception>
228-
private static bool TryParseWithRegex<TQuantity, TUnitType>(string regexString, string str, TryParseUnitDelegate<TUnitType> tryParseUnit,
223+
private bool TryParseWithRegex<TQuantity, TUnitType>(string regexString, string str,
229224
QuantityFromDelegate<TQuantity, TUnitType> fromDelegate, IFormatProvider formatProvider, out List<TQuantity> converted)
230225
where TQuantity : IQuantity
231226
where TUnitType : Enum
@@ -250,7 +245,7 @@ private static bool TryParseWithRegex<TQuantity, TUnitType>(string regexString,
250245
if(!double.TryParse(valueString, NumberStyles.Any, formatProvider, out var value))
251246
return false;
252247

253-
if(!tryParseUnit(unitString, formatProvider, out var parsedUnit))
248+
if(!_unitParser.TryParse<TUnitType>(unitString, formatProvider, out var parsedUnit))
254249
return false;
255250

256251
var quantity = fromDelegate(value, parsedUnit);

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
(x, y) => From(x.Bits + y.Bits, BaseUnit));
617616
}
@@ -644,7 +643,6 @@ public static bool TryParse([CanBeNull] string str, [CanBeNull] IFormatProvider
644643
return QuantityParser.Default.TryParse<Information, InformationUnit>(
645644
str,
646645
provider,
647-
UnitParser.Default.TryParse<InformationUnit>,
648646
From,
649647
(x, y) => From(x.Bits + y.Bits, BaseUnit), out result);
650648
}

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
(x, y) => From(x.Meters + y.Meters, BaseUnit));
561560
}
@@ -588,7 +587,6 @@ public static bool TryParse([CanBeNull] string str, [CanBeNull] IFormatProvider
588587
return QuantityParser.Default.TryParse<Length, LengthUnit>(
589588
str,
590589
provider,
591-
UnitParser.Default.TryParse<LengthUnit>,
592590
From,
593591
(x, y) => From(x.Meters + y.Meters, BaseUnit), out result);
594592
}

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
(x, y) => From(x.Decibels + y.Decibels, BaseUnit));
281280
}
@@ -308,7 +307,6 @@ public static bool TryParse([CanBeNull] string str, [CanBeNull] IFormatProvider
308307
return QuantityParser.Default.TryParse<Level, LevelUnit>(
309308
str,
310309
provider,
311-
UnitParser.Default.TryParse<LevelUnit>,
312310
From,
313311
(x, y) => From(x.Decibels + y.Decibels, BaseUnit), out result);
314312
}

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
(x, y) => From(x.$baseUnitPluralName + y.$baseUnitPluralName, BaseUnit));
566565
}
@@ -601,7 +600,6 @@ if ($wrc) {@"
601600
return QuantityParser.Default.TryParse<$quantityName, $unitEnumName>(
602601
str,
603602
provider,
604-
UnitParser.Default.TryParse<$unitEnumName>,
605603
From,
606604
(x, y) => From(x.$baseUnitPluralName + y.$baseUnitPluralName, BaseUnit), out result);
607605
}

0 commit comments

Comments
 (0)