Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove allocations on all base converters, improve TokenizerHelper #9364

Open
wants to merge 17 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Use ValueTokenizerHelper in generated structs/collections
  • Loading branch information
h3xds1nz committed Oct 7, 2024
commit 746e1420d67772cb760bcc6ca50ba11b96d5bcfe
Original file line number Diff line number Diff line change
Expand Up @@ -724,14 +724,14 @@ public static DoubleCollection Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);
DoubleCollection resource = new DoubleCollection();

double value;

while (th.NextToken())
while (tokenizer.NextToken())
{
value = double.Parse(th.GetCurrentTokenAsSpan(), formatProvider);
value = double.Parse(tokenizer.GetCurrentToken(), formatProvider);

resource.Add(value);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -804,16 +804,16 @@ public static GradientStopCollection Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);
GradientStopCollection resource = new GradientStopCollection();

GradientStop value;

while (th.NextToken())
while (tokenizer.NextToken())
{
value = new GradientStop(
Parsers.ParseColor(th.GetCurrentToken(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider));
Parsers.ParseColor(tokenizer.GetCurrentToken().ToString(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider));

resource.Add(value);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -724,14 +724,14 @@ public static Int32Collection Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);
Int32Collection resource = new Int32Collection();

int value;

while (th.NextToken())
while (tokenizer.NextToken())
{
value = Int32.Parse(th.GetCurrentTokenAsSpan(), formatProvider);
value = Int32.Parse(tokenizer.GetCurrentToken(), formatProvider);

resource.Add(value);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -724,16 +724,16 @@ public static PointCollection Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);
PointCollection resource = new PointCollection();

Point value;

while (th.NextToken())
while (tokenizer.NextToken())
{
value = new Point(
double.Parse(th.GetCurrentTokenAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider));
double.Parse(tokenizer.GetCurrentToken(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider));

resource.Add(value);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -724,16 +724,16 @@ public static VectorCollection Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);
VectorCollection resource = new VectorCollection();

Vector value;

while (th.NextToken())
while (tokenizer.NextToken())
{
value = new Vector(
double.Parse(th.GetCurrentTokenAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider));
double.Parse(tokenizer.GetCurrentToken(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider));

resource.Add(value);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -226,11 +226,11 @@ public static Matrix3D Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);

Matrix3D value;

ReadOnlySpan<char> firstToken = th.NextTokenRequiredAsSpan();
ReadOnlySpan<char> firstToken = tokenizer.NextTokenRequired();

// The token will already have had whitespace trimmed so we can do a
// simple string compare.
Expand All @@ -241,25 +241,25 @@ public static Matrix3D Parse(string source)
else
{
value = new Matrix3D(double.Parse(firstToken, formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider));
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider));
}

// There should be no more tokens in this string.
th.LastTokenRequired();
tokenizer.LastTokenRequired();

return value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,18 +166,18 @@ public static Point3D Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);

Point3D value;

ReadOnlySpan<char> firstToken = th.NextTokenRequiredAsSpan();
ReadOnlySpan<char> firstToken = tokenizer.NextTokenRequired();

value = new Point3D(double.Parse(firstToken, formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider));
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider));

// There should be no more tokens in this string.
th.LastTokenRequired();
tokenizer.LastTokenRequired();

return value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -720,17 +720,17 @@ public static Point3DCollection Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);
Point3DCollection resource = new Point3DCollection();

Point3D value;

while (th.NextToken())
while (tokenizer.NextToken())
{
value = new Point3D(
double.Parse(th.GetCurrentTokenAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider));
double.Parse(tokenizer.GetCurrentToken(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider));

resource.Add(value);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,19 +169,19 @@ public static Point4D Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);

Point4D value;

ReadOnlySpan<char> firstToken = th.NextTokenRequiredAsSpan();
ReadOnlySpan<char> firstToken = tokenizer.NextTokenRequired();

value = new Point4D(double.Parse(firstToken, formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider));
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider));

// There should be no more tokens in this string.
th.LastTokenRequired();
tokenizer.LastTokenRequired();

return value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,11 +190,11 @@ public static Quaternion Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);

Quaternion value;

ReadOnlySpan<char> firstToken = th.NextTokenRequiredAsSpan();
ReadOnlySpan<char> firstToken = tokenizer.NextTokenRequired();

// The token will already have had whitespace trimmed so we can do a
// simple string compare.
Expand All @@ -205,13 +205,13 @@ public static Quaternion Parse(string source)
else
{
value = new Quaternion(double.Parse(firstToken, formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider));
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider));
}

// There should be no more tokens in this string.
th.LastTokenRequired();
tokenizer.LastTokenRequired();

return value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -189,11 +189,11 @@ public static Rect3D Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);

Rect3D value;

ReadOnlySpan<char> firstToken = th.NextTokenRequiredAsSpan();
ReadOnlySpan<char> firstToken = tokenizer.NextTokenRequired();

// The token will already have had whitespace trimmed so we can do a
// simple string compare.
Expand All @@ -204,15 +204,15 @@ public static Rect3D Parse(string source)
else
{
value = new Rect3D(double.Parse(firstToken, formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider));
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider));
}

// There should be no more tokens in this string.
th.LastTokenRequired();
tokenizer.LastTokenRequired();

return value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,11 +180,11 @@ public static Size3D Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);

Size3D value;

ReadOnlySpan<char> firstToken = th.NextTokenRequiredAsSpan();
ReadOnlySpan<char> firstToken = tokenizer.NextTokenRequired();

// The token will already have had whitespace trimmed so we can do a
// simple string compare.
Expand All @@ -195,12 +195,12 @@ public static Size3D Parse(string source)
else
{
value = new Size3D(double.Parse(firstToken, formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider));
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider));
}

// There should be no more tokens in this string.
th.LastTokenRequired();
tokenizer.LastTokenRequired();

return value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,18 +166,18 @@ public static Vector3D Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);

Vector3D value;

ReadOnlySpan<char> firstToken = th.NextTokenRequiredAsSpan();
ReadOnlySpan<char> firstToken = tokenizer.NextTokenRequired();

value = new Vector3D(double.Parse(firstToken, formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider));
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider));

// There should be no more tokens in this string.
th.LastTokenRequired();
tokenizer.LastTokenRequired();

return value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -720,17 +720,17 @@ public static Vector3DCollection Parse(string source)
{
IFormatProvider formatProvider = System.Windows.Markup.TypeConverterHelper.InvariantEnglishUS;

TokenizerHelper th = new TokenizerHelper(source, formatProvider);
ValueTokenizerHelper tokenizer = new(source, formatProvider);
Vector3DCollection resource = new Vector3DCollection();

Vector3D value;

while (th.NextToken())
while (tokenizer.NextToken())
{
value = new Vector3D(
double.Parse(th.GetCurrentTokenAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider),
double.Parse(th.NextTokenRequiredAsSpan(), formatProvider));
double.Parse(tokenizer.GetCurrentToken(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider),
double.Parse(tokenizer.NextTokenRequired(), formatProvider));

resource.Add(value);
}
Expand Down
Loading