aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Horizon/Sdk/Ngc/Detail/MatchState.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Horizon/Sdk/Ngc/Detail/MatchState.cs')
-rw-r--r--src/Ryujinx.Horizon/Sdk/Ngc/Detail/MatchState.cs49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/Ryujinx.Horizon/Sdk/Ngc/Detail/MatchState.cs b/src/Ryujinx.Horizon/Sdk/Ngc/Detail/MatchState.cs
new file mode 100644
index 00000000..04fc1850
--- /dev/null
+++ b/src/Ryujinx.Horizon/Sdk/Ngc/Detail/MatchState.cs
@@ -0,0 +1,49 @@
+using System;
+
+namespace Ryujinx.Horizon.Sdk.Ngc.Detail
+{
+ readonly ref struct MatchState
+ {
+ public readonly Span<byte> OriginalText;
+ public readonly Span<byte> ConvertedText;
+ public readonly ReadOnlySpan<sbyte> DeltaTable;
+ public readonly ref int MaskedCount;
+ public readonly MaskMode MaskMode;
+ public readonly Sbv NoSeparatorMap;
+ public readonly AhoCorasick DelimitedWordsTrie;
+
+ public MatchState(
+ Span<byte> originalText,
+ Span<byte> convertedText,
+ ReadOnlySpan<sbyte> deltaTable,
+ ref int maskedCount,
+ MaskMode maskMode,
+ Sbv noSeparatorMap = null,
+ AhoCorasick delimitedWordsTrie = null)
+ {
+ OriginalText = originalText;
+ ConvertedText = convertedText;
+ DeltaTable = deltaTable;
+ MaskedCount = ref maskedCount;
+ MaskMode = maskMode;
+ NoSeparatorMap = noSeparatorMap;
+ DelimitedWordsTrie = delimitedWordsTrie;
+ }
+
+ public readonly (int, int) GetOriginalRange(int convertedStartOffest, int convertedEndOffset)
+ {
+ int originalStartOffset = 0;
+ int originalEndOffset = 0;
+
+ for (int index = 0; index < convertedEndOffset; index++)
+ {
+ int byteLength = Math.Abs(DeltaTable[index]);
+
+ originalStartOffset += index < convertedStartOffest ? byteLength : 0;
+ originalEndOffset += byteLength;
+ }
+
+ return (originalStartOffset, originalEndOffset);
+ }
+ }
+}