private void ReadTablePage(UInt64 page) { var childPages = new List <UInt64>(); void AddPage(PageType pageType, UInt64 pageToAdd) { if (PageType.TableInterior == pageType) { childPages.Add(pageToAdd); } } using (var eventHandlerSaver = new EventHandlerSaver(this._parser)) { this._parser.CellStarted += (s, e) => AddPage(e.CellHeader.PageType, e.CellHeader.LeftChildPage); this._parser.PageFinished += (s, e) => AddPage(e.PageHeader.PageType, e.PageHeader.RightMostPointer); this._parser.PayloadRead += (s, e) => this.TableRecordRead?.Invoke(this, new TableRecordReadEventArgs(e.Fields)); this._parser.ParsePage(page); } foreach (var childPage in childPages) { this.ReadTablePage(childPage); } }
public void ReadMasterTable() { using (var eventHandlerSaver = new EventHandlerSaver(this, nameof(this.TableRecordRead))) { this.TableRecordRead += (s, e) => this.MasterTableRecordRead?.Invoke(this, new MasterTableRecordReadEventArgs(e.Fields)); this.ReadTable(1); } }
public void ReadTable(String tableName) { var rootPage = 0UL; using (var eventHandlerSaver = new EventHandlerSaver(this, nameof(this.MasterTableRecordRead))) { this.MasterTableRecordRead += (s, e) => { if (e.Record.Type.Equals("table") && e.Record.Name.Equals(tableName)) { rootPage = e.Record.RootPage; } }; this.ReadMasterTable(); } if (rootPage > 0) { this.ReadTable(rootPage); } }