public void MatchMethods(Translator translator) { if (translator != null) this.DoMatchMethods(translator); else this.DoResetMethods(); }
internal static Translator ParseSignature(string singnature, out Translator[] translators) { var separators = new char[] {'$'}; var lines = singnature.Split(separators, StringSplitOptions.RemoveEmptyEntries); if (lines.Length > ushort.MaxValue) throw new ArgumentOutOfRangeException(singnature, "Signature contains too much components"); var result = new Translator(lines[0]); translators = new Translator[lines.Length - 1]; for (var index = 1; index < lines.Length; ++index) { translators[index - 1] = new Translator((ushort)(index - 1), lines[index]); } return result; }
void DoMatchMethods(Translator translator) { var dict = new Dictionary<string, ushort>(); foreach (var element in translator.Methods) { dict[element] = (ushort)dict.Count; } var count = this.Methods.Length; this.methods = new ushort[count]; for (var index = 0; index < count; ++index) { ushort methodId; if (!dict.TryGetValue(this.Methods[index], out methodId)) { methodId = ushort.MaxValue; } this.methods[index] = methodId; } this.componentId = translator.componentId; }
public void MatchExceptions(Translator translator) { if (translator.Methods.Length > Methods.Length) throw new Exception(WrongExceptionsSpecification); var count = translator.Methods.Length; for (var index = 0; index < count; ++index) { if (Methods[index] != translator.Methods[index]) throw new Exception(WrongExceptionsSpecification); } }