namespace ParadoxSaveParser.Lib; /// A literal key, matched byte for byte. internal sealed class ExactMatchExpression : ISearchExpression { public string Key { get; } // the key as it appears in the save, so matching needs no encoding at all public byte[] KeyBytes { get; private set; } public ISearchExpression? Next { get; } public ExactMatchExpression(string key, Encoding encoding, ISearchExpression? next) { Key = key; Next = next; KeyBytes = encoding.GetBytes(key); } public bool DoesMatch(MatchCandidate candidate, out ISearchExpression? nextSearchExpression) { // comparing bytes keeps the candidate's key from becoming a string if (candidate.Key.SequenceEqual(KeyBytes)) { nextSearchExpression = Next; return true; } nextSearchExpression = null; return false; } public void ReEncode(Encoding encoding) { KeyBytes = encoding.GetBytes(Key); Next?.ReEncode(encoding); } }