public Dictionary <string, Dictionary <long, long> > ParseInput(IEnumerable <string> input) { var result = new Dictionary <string, Dictionary <long, long> >(); var currentMask = ""; var currentMaskAddresses = new Dictionary <long, long>(); foreach (string line in input) { if (line.StartsWith("mask")) { if (!string.IsNullOrEmpty(currentMask)) { result.Add(currentMask, currentMaskAddresses); } currentMask = EncriptionParser.GetMemoryMask(line); currentMaskAddresses = new Dictionary <long, long>(); } else if (line.StartsWith("mem[")) { long index = EncriptionParser.GetMemoryIndex(line); long value = EncriptionParser.GetMemoryValue(line); currentMaskAddresses.Add(index, value); } } result.Add(currentMask, currentMaskAddresses); return(result); }
public Dictionary <long, long> ProcessBitMask(Dictionary <long, long> memory, string mask, Dictionary <long, long> values) { foreach (var value in values) { if (_version == 1) { string binary = EncriptionParser.ConvertDecimalToBitsString($"{value.Value}"); binary = MaskBits(binary, mask, _version); memory[value.Key] = long.Parse(EncriptionParser.ConvertBitsToDecimalString(binary)); } else { string binary = EncriptionParser.ConvertDecimalToBitsString($"{value.Key}"); binary = MaskBits(binary, mask, _version); foreach (string adress in MakeBitPermutations(binary)) { memory[long.Parse(EncriptionParser.ConvertBitsToDecimalString(adress))] = value.Value; } } } return(memory); }