/// <summary> /// Sets the string data entry for the specified offset. /// </summary> /// <param name="offset">File offset.</param> /// <param name="lines">String data.</param> /// <param name="pseudoOpcode">Pseudo-opcode for this line.</param> /// <param name="formatter">Formatter dependency.</param> /// <param name="formatDescriptor">FormatDescriptor dependency.</param> /// <param name="pseudoOpNames">PseudoOpNames dependency.</param> public void SetStringEntry(int offset, List <string> lines, string pseudoOpcode, Formatter formatter, FormatDescriptor formatDescriptor, PseudoOp.PseudoOpNames pseudoOpNames) { Debug.Assert(lines != null); FormattedStringEntry fse = new FormattedStringEntry(lines, pseudoOpcode, formatter, formatDescriptor, pseudoOpNames); mStringEntries[offset] = fse; }
/// <summary> /// Checks the entry's dependencies. /// </summary> /// <remarks> /// The data analyzer regenerates stuff in Anattribs, so we can't expect to have /// the same FormatDescriptor object. /// </remarks> /// <returns>True if the dependencies match.</returns> public bool CheckDeps(Formatter formatter, FormatDescriptor formatDescriptor, PseudoOp.PseudoOpNames pseudoOpNames) { bool ok = (ReferenceEquals(mFormatter, formatter) && ReferenceEquals(mPseudoOpNames, pseudoOpNames) && mFormatDescriptor == formatDescriptor); //if (!ok) { // Debug.WriteLine("CheckDeps:" + // (ReferenceEquals(mFormatter, formatter) ? "" : " fmt") + // (ReferenceEquals(mPseudoOpNames, pseudoOpNames) ? "" : " pop") + // (mFormatDescriptor == formatDescriptor ? "" : " dfd")); //} return(ok); }
public FormattedStringEntry(List <string> lines, string popcode, Formatter formatter, FormatDescriptor formatDescriptor, PseudoOp.PseudoOpNames pseudoOpNames) { // Can't be sure the list won't change, so duplicate it. Lines = new List <string>(lines.Count); foreach (string str in lines) { Lines.Add(str); } PseudoOpcode = popcode; mFormatter = formatter; mFormatDescriptor = formatDescriptor; mPseudoOpNames = pseudoOpNames; }
/// <summary> /// Retrieves the formatted string data for the specified offset. /// </summary> /// <param name="offset">File offset.</param> /// <param name="formatter">Formatter dependency.</param> /// <param name="formatDescriptor">FormatDescriptor dependency.</param> /// <param name="pseudoOpNames">PseudoOpNames dependency.</param> /// <param name="PseudoOpcode">Pseudo-op for this string.</param> /// <returns>A reference to the string list. The caller must not modify the /// list.</returns> public List <string> GetStringEntry(int offset, Formatter formatter, FormatDescriptor formatDescriptor, PseudoOp.PseudoOpNames pseudoOpNames, out string PseudoOpcode) { PseudoOpcode = null; if (!mStringEntries.TryGetValue(offset, out FormattedStringEntry entry)) { return(null); } if (!entry.CheckDeps(formatter, formatDescriptor, pseudoOpNames)) { //Debug.WriteLine(" stale entry at +" + offset.ToString("x6")); return(null); } PseudoOpcode = entry.PseudoOpcode; return(entry.Lines); }