Skip to content

Commit b871de5

Browse files
committed
Change DataCenterExtensions.ToInt32() to take a radix parameter.
Closes #88.
1 parent 5db12ab commit b871de5

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

src/formats/Data/DataCenterExtensions.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ namespace Vezel.Novadrop.Data;
22

33
public static class DataCenterExtensions
44
{
5+
private static readonly CultureInfo _culture = CultureInfo.InvariantCulture;
6+
57
public static DataCenterNode Child(this DataCenterNode node)
68
{
79
Check.Null(node);
@@ -192,16 +194,20 @@ public static IEnumerable<DataCenterNode> DescendantsAt(this DataCenterNode node
192194
return node.DescendantsAt(path.ToArray());
193195
}
194196

195-
public static int ToInt32(this DataCenterValue value)
197+
public static int ToInt32(this DataCenterValue value, int radix = 10)
196198
{
199+
Check.Range(radix is 2 or 10 or 16, radix);
200+
197201
return value.TypeCode switch
198202
{
199203
DataCenterTypeCode.Int32 => value.UnsafeAsInt32,
200204
DataCenterTypeCode.Single => (int)value.UnsafeAsSingle,
201-
DataCenterTypeCode.String => value.UnsafeAsString switch
205+
DataCenterTypeCode.String => radix switch
202206
{
203-
var s when int.TryParse(s, NumberStyles.Integer, CultureInfo.InvariantCulture, out var i) => i,
204-
var s => int.Parse(s, NumberStyles.HexNumber, CultureInfo.InvariantCulture),
207+
2 => int.Parse(value.UnsafeAsString, NumberStyles.BinaryNumber, _culture),
208+
10 => int.Parse(value.UnsafeAsString, NumberStyles.Integer, _culture),
209+
16 => int.Parse(value.UnsafeAsString, NumberStyles.HexNumber, _culture),
210+
_ => throw new UnreachableException(),
205211
},
206212
DataCenterTypeCode.Boolean => value.UnsafeAsInt32, // Normalized internally; reinterpret as 0 or 1.
207213
_ => 0,
@@ -214,8 +220,7 @@ public static float ToSingle(this DataCenterValue value)
214220
{
215221
DataCenterTypeCode.Int32 => value.UnsafeAsInt32,
216222
DataCenterTypeCode.Single => value.UnsafeAsSingle,
217-
DataCenterTypeCode.String =>
218-
float.Parse(value.UnsafeAsString, NumberStyles.Float, CultureInfo.InvariantCulture),
223+
DataCenterTypeCode.String => float.Parse(value.UnsafeAsString, NumberStyles.Float, _culture),
219224
DataCenterTypeCode.Boolean => value.UnsafeAsInt32, // Normalized internally; reinterpret as 0 or 1.
220225
_ => 0.0f,
221226
};

0 commit comments

Comments
 (0)