void LineComplete(ParserElementBase aElement) { ParserLine line = (ParserLine)aElement; TUserContextType tableType = (TUserContextType)line.Tag; UserContextTable table = CrashDebugger.UserContextTableManager[tableType]; // Each line should have a known number of entries stored within it's field collection. int expectedCount = UserContextTable.EntryCount * 2; // 2 fields per table entry int actualCount = line.Count; if (expectedCount == actualCount) { for (int i = 0; i < expectedCount; i += 2) { ParserField fieldType = line[i + 0]; ParserField fieldValue = line[i + 1]; // if (fieldType.IsUint && fieldValue.IsUint) { UserContextTable.TArmRegisterIndex reg = (UserContextTable.TArmRegisterIndex)(i / 2); UserContextTableEntry entry = table[reg]; // UserContextTableEntry.TType type = (UserContextTableEntry.TType)fieldType.AsUint; byte value = (byte)fieldValue.AsUint; // entry.Type = type; entry.Offset = value; } } } else { throw new Exception("User Context Table Corruption"); } }
public UserContextTableManager() { Array vals = Enum.GetValues(typeof(TUserContextType)); foreach (object val in vals) { TUserContextType value = (TUserContextType)val; iTables.Add(new UserContextTable(value)); } }
public void Dump() { int i = 0; foreach (UserContextTable table in iTables) { TUserContextType type = (TUserContextType)i; string text = table.ToString(); System.Diagnostics.Debug.WriteLine(string.Format("Table[{0:d2}] = {1} {2}", i, text, type)); i++; } }
public UserContextTable(TUserContextType aType) { iType = aType; // List <UserContextTableEntry> entries = new List <UserContextTableEntry>(); int count = EntryCount; for (int i = 0; i < count; i++) { UserContextTableEntry entry = new UserContextTableEntry(); entries.Add(entry); } // iEntries = entries.ToArray(); }
public UserContextTable this[TUserContextType aType] { get { UserContextTable ret = null; // foreach (UserContextTable table in iTables) { if (table.Type == aType) { ret = table; break; } } // if (ret == null) { throw new ArgumentException(); } // return(ret); } }