Skip to content

Commit 1e8ef0b

Browse files
authored
Avoid HasFlag in hot-path when targeting netfx (#8779)
1 parent 6c0811a commit 1e8ef0b

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

src/Elastic.Clients.Elasticsearch/_Shared/Next/DoubleWithFractionalPortionConverter.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,13 @@ public override double Read(ref Utf8JsonReader reader, Type typeToConvert, JsonS
3939
return reader.GetDouble();
4040
}
4141

42+
#if !NETFRAMEWORK
4243
if (options.NumberHandling.HasFlag(JsonNumberHandling.AllowNamedFloatingPointLiterals))
44+
#else
45+
// Optimize hot-path for performance since `HasFlag` causes boxing on .NET Framework.
46+
if (((int)options.NumberHandling & (int)JsonNumberHandling.AllowNamedFloatingPointLiterals) ==
47+
(int)JsonNumberHandling.AllowNamedFloatingPointLiterals)
48+
#endif
4349
{
4450
if (reader.ValueTextEquals(NaN))
4551
{
@@ -57,7 +63,13 @@ public override double Read(ref Utf8JsonReader reader, Type typeToConvert, JsonS
5763
}
5864
}
5965

66+
#if !NETFRAMEWORK
6067
if (!options.NumberHandling.HasFlag(JsonNumberHandling.AllowReadingFromString))
68+
#else
69+
// Optimize hot-path for performance since `HasFlag` causes boxing on .NET Framework.
70+
if (((int)options.NumberHandling & (int)JsonNumberHandling.AllowReadingFromString) !=
71+
(int)JsonNumberHandling.AllowReadingFromString)
72+
#endif
6173
{
6274
return reader.GetDouble();
6375
}
@@ -71,7 +83,13 @@ public override double Read(ref Utf8JsonReader reader, Type typeToConvert, JsonS
7183

7284
public override void Write(Utf8JsonWriter writer, double value, JsonSerializerOptions options)
7385
{
86+
#if !NETFRAMEWORK
7487
if (options.NumberHandling.HasFlag(JsonNumberHandling.AllowNamedFloatingPointLiterals))
88+
#else
89+
// Optimize hot-path for performance since `HasFlag` causes boxing on .NET Framework.
90+
if (((int)options.NumberHandling & (int)JsonNumberHandling.AllowNamedFloatingPointLiterals) ==
91+
(int)JsonNumberHandling.AllowNamedFloatingPointLiterals)
92+
#endif
7593
{
7694
if (double.IsNaN(value))
7795
{
@@ -92,7 +110,13 @@ public override void Write(Utf8JsonWriter writer, double value, JsonSerializerOp
92110
}
93111
}
94112

113+
#if !NETFRAMEWORK
95114
if (options.NumberHandling.HasFlag(JsonNumberHandling.WriteAsString))
115+
#else
116+
// Optimize hot-path for performance since `HasFlag` causes boxing on .NET Framework.
117+
if (((int)options.NumberHandling & (int)JsonNumberHandling.WriteAsString) ==
118+
(int)JsonNumberHandling.WriteAsString)
119+
#endif
96120
{
97121
throw new NotImplementedException("'JsonNumberHandling.WriteAsString' is currently not supported.");
98122
}

src/Elastic.Clients.Elasticsearch/_Shared/Next/SingleWithFractionalPortionConverter.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,13 @@ public override float Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSe
3939
return reader.GetSingle();
4040
}
4141

42+
#if !NETFRAMEWORK
4243
if (options.NumberHandling.HasFlag(JsonNumberHandling.AllowNamedFloatingPointLiterals))
44+
#else
45+
// Optimize hot-path for performance since `HasFlag` causes boxing on .NET Framework.
46+
if (((int)options.NumberHandling & (int)JsonNumberHandling.AllowNamedFloatingPointLiterals) ==
47+
(int)JsonNumberHandling.AllowNamedFloatingPointLiterals)
48+
#endif
4349
{
4450
if (reader.ValueTextEquals(NaN))
4551
{
@@ -57,7 +63,13 @@ public override float Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSe
5763
}
5864
}
5965

66+
#if !NETFRAMEWORK
6067
if (!options.NumberHandling.HasFlag(JsonNumberHandling.AllowReadingFromString))
68+
#else
69+
// Optimize hot-path for performance since `HasFlag` causes boxing on .NET Framework.
70+
if (((int)options.NumberHandling & (int)JsonNumberHandling.AllowReadingFromString) !=
71+
(int)JsonNumberHandling.AllowReadingFromString)
72+
#endif
6173
{
6274
return reader.GetSingle();
6375
}
@@ -71,7 +83,13 @@ public override float Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSe
7183

7284
public override void Write(Utf8JsonWriter writer, float value, JsonSerializerOptions options)
7385
{
86+
#if !NETFRAMEWORK
7487
if (options.NumberHandling.HasFlag(JsonNumberHandling.AllowNamedFloatingPointLiterals))
88+
#else
89+
// Optimize hot-path for performance since `HasFlag` causes boxing on .NET Framework.
90+
if (((int)options.NumberHandling & (int)JsonNumberHandling.AllowNamedFloatingPointLiterals) ==
91+
(int)JsonNumberHandling.AllowNamedFloatingPointLiterals)
92+
#endif
7593
{
7694
if (float.IsNaN(value))
7795
{
@@ -92,7 +110,13 @@ public override void Write(Utf8JsonWriter writer, float value, JsonSerializerOpt
92110
}
93111
}
94112

113+
#if !NETFRAMEWORK
95114
if (options.NumberHandling.HasFlag(JsonNumberHandling.WriteAsString))
115+
#else
116+
// Optimize hot-path for performance since `HasFlag` causes boxing on .NET Framework.
117+
if (((int)options.NumberHandling & (int)JsonNumberHandling.WriteAsString) ==
118+
(int)JsonNumberHandling.WriteAsString)
119+
#endif
96120
{
97121
throw new NotImplementedException("'JsonNumberHandling.WriteAsString' is currently not supported.");
98122
}

0 commit comments

Comments
 (0)