Skip to content

Commit 0354142

Browse files
committed
Make sure we generate valid code for failure cases when trimming is enabled
1 parent 26e8a19 commit 0354142

File tree

6 files changed

+18
-18
lines changed

6 files changed

+18
-18
lines changed

Src/FastData.Generator.CPlusPlus/Internal/Framework/CPlusPlusEarlyExitDef.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ protected override string GetMaskEarlyExit(MethodType methodType, ulong[] bitSet
1919
{
2020
{{RenderCases()}}
2121
default:
22-
{{RenderMethod(methodType)}}
22+
{{RenderExit(methodType)}}
2323
}
2424
""";
2525

@@ -44,22 +44,22 @@ string RenderCases()
4444
protected override string GetValueEarlyExits<T>(MethodType methodType, T min, T max) =>
4545
$"""
4646
if ({(min.Equals(max) ? $"key != {map.ToValueLabel(max)}" : $"key < {map.ToValueLabel(min)} || key > {map.ToValueLabel(max)}")})
47-
{RenderMethod(methodType)}
47+
{RenderExit(methodType)}
4848
""";
4949

5050
protected override string GetLengthEarlyExits(MethodType methodType, uint min, uint max, uint minByte, uint maxByte) =>
5151
$"""
5252
if ({(min.Equals(max) ? $"key.length() != {map.ToValueLabel(max)}" : $"const size_t len = key.length(); len < {map.ToValueLabel(min)} || len > {map.ToValueLabel(max)}")})
53-
{RenderMethod(methodType)}
53+
{RenderExit(methodType)}
5454
""";
5555

5656
private static string RenderWord(ulong word, MethodType methodType) =>
5757
$"""
5858
if (({word.ToStringInvariant()}ULL & (1ULL << ((key.length() - 1) & 63))) == 0)
59-
{RenderMethod(methodType)}
59+
{RenderExit(methodType)}
6060
""";
6161

62-
private static string RenderMethod(MethodType methodType) => methodType == MethodType.TryLookup
62+
internal static string RenderExit(MethodType methodType) => methodType == MethodType.TryLookup
6363
? """
6464
{
6565
value = nullptr;

Src/FastData.Generator.CPlusPlus/Internal/Framework/CPlusPlusOutputWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ protected override string GetMethodHeader(MethodType methodType)
2121
sb.Append($"""
2222
2323
if (!({GetTrimMatchCondition()}))
24-
return false;
24+
{CPlusPlusEarlyExitDef.RenderExit(methodType)}
2525
2626
const auto trimmedKey = key.substr({TrimPrefix.Length.ToStringInvariant()}, key.length() - {TotalTrimLength.ToStringInvariant()});
2727
""");

Src/FastData.Generator.CSharp/Internal/Framework/CSharpEarlyExitDef.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ protected override string GetMaskEarlyExit(MethodType methodType, ulong[] bitSet
1919
{
2020
{{RenderCases()}}
2121
default:
22-
{{RenderMethod(methodType)}}
22+
{{RenderExit(methodType)}}
2323
}
2424
""";
2525

@@ -44,22 +44,22 @@ string RenderCases()
4444
protected override string GetValueEarlyExits<T>(MethodType methodType, T min, T max) =>
4545
$"""
4646
if ({(min.Equals(max) ? $"key != {map.ToValueLabel(max)}" : $"key < {map.ToValueLabel(min)} || key > {map.ToValueLabel(max)}")})
47-
{RenderMethod(methodType)}
47+
{RenderExit(methodType)}
4848
""";
4949

5050
protected override string GetLengthEarlyExits(MethodType methodType, uint min, uint max, uint minByte, uint maxByte) =>
5151
$"""
5252
if ({(min.Equals(max) ? $"key.Length != {map.ToValueLabel(max)}" : $"key.Length < {map.ToValueLabel(min)} || key.Length > {map.ToValueLabel(max)}")})
53-
{RenderMethod(methodType)}
53+
{RenderExit(methodType)}
5454
""";
5555

5656
private static string RenderWord(ulong word, MethodType methodType) =>
5757
$"""
5858
if (({word.ToStringInvariant()}UL & (1UL << ((key.Length - 1) & 63))) == 0)
59-
{RenderMethod(methodType)}
59+
{RenderExit(methodType)}
6060
""";
6161

62-
private static string RenderMethod(MethodType methodType) => methodType == MethodType.TryLookup
62+
internal static string RenderExit(MethodType methodType) => methodType == MethodType.TryLookup
6363
? """
6464
{
6565
value = default;

Src/FastData.Generator.CSharp/Internal/Framework/CSharpOutputWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ protected override string GetMethodHeader(MethodType methodType)
5050
sb.Append($"""
5151
5252
if (!({GetTrimMatchCondition()}))
53-
return false;
53+
{CSharpEarlyExitDef.RenderExit(methodType)}
5454
5555
string trimmedKey = key.Substring({TrimPrefix.Length.ToStringInvariant()}, key.Length - {TotalTrimLength.ToStringInvariant()});
5656
""");

Src/FastData.Generator.Rust/Internal/Framework/RustEarlyExitDef.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ protected override string GetMaskEarlyExit(MethodType methodType, ulong[] bitSet
1818
match key.len() >> 6 {
1919
{{RenderCases()}}
2020
_ => {
21-
{{RenderMethod(methodType)}}
21+
{{RenderExit(methodType)}}
2222
}
2323
}
2424
""";
@@ -44,23 +44,23 @@ string RenderCases()
4444
protected override string GetValueEarlyExits<T>(MethodType methodType, T min, T max) =>
4545
$$"""
4646
if {{(min.Equals(max) ? $"key != {map.ToValueLabel(max)}" : $"key < {map.ToValueLabel(min)} || key > {map.ToValueLabel(max)}")}} {
47-
{{RenderMethod(methodType)}}
47+
{{RenderExit(methodType)}}
4848
}
4949
""";
5050

5151
protected override string GetLengthEarlyExits(MethodType methodType, uint min, uint max, uint minByte, uint maxByte) =>
5252
$$"""
5353
if {{(minByte.Equals(maxByte) ? $"key.len() != {map.ToValueLabel(maxByte)} as usize" : $"key.len() < {map.ToValueLabel(minByte)} as usize || key.len() > {map.ToValueLabel(maxByte)} as usize")}} {
54-
{{RenderMethod(methodType)}}
54+
{{RenderExit(methodType)}}
5555
}
5656
""";
5757

5858
private static string RenderWord(ulong word, MethodType methodType) =>
5959
$$"""
6060
if {{word.ToStringInvariant()}}u64 & (1u64 << ((key.len().wrapping_sub(1)) & 63)) == 0 {
61-
{{RenderMethod(methodType)}}
61+
{{RenderExit(methodType)}}
6262
}
6363
""";
6464

65-
private static string RenderMethod(MethodType methodType) => methodType == MethodType.TryLookup ? "return None;" : "return false;";
65+
internal static string RenderExit(MethodType methodType) => methodType == MethodType.TryLookup ? "return None;" : "return false;";
6666
}

Src/FastData.Generator.Rust/Internal/Framework/RustOutputWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ protected override string GetMethodHeader(MethodType methodType)
2121
sb.Append($$"""
2222
2323
if !({{GetTrimMatchCondition()}}) {
24-
return false;
24+
{{RustEarlyExitDef.RenderExit(methodType)}}
2525
}
2626
2727
let trimmedKey = &key[{{TrimPrefix.Length.ToStringInvariant()}}..key.len() - {{TrimSuffix.Length.ToStringInvariant()}}];

0 commit comments

Comments
 (0)