// look for a key on given page public Tuple <bool, long, long> FindInFilePage(long page, long key) { FilePage filePage = MainReader.ReadPage(page); long tmp = 0; bool flag = false; for (int i = filePage.Entries.Count; i >= 0; i--) { if (filePage.Entries[i].Item1.Key == key) { return(new Tuple <bool, long, long>(true, filePage.Address, i)); } if (filePage.Entries[i].Item1.Key < key && filePage.Entries[i].Item2 != -1) { tmp = filePage.Entries[i].Item2; flag = true; break; } } if (flag) { while (tmp != -1) { Tuple <Record, long> rec = MainReader.ReadEntry(tmp); if (rec.Item1.Key == key) { return(new Tuple <bool, long, long>(true, MainReader.LastPage.Address, MainReader.LastRecordNumber)); } if (rec.Item1.Key < key && rec.Item2 != -1) { tmp = rec.Item2; } } } return(new Tuple <bool, long, long>(false, -1, -1)); }
private void FollowChain(long address, ref MainReader mr) { long tmp = address; string spacing = " "; while (tmp != -1) { Tuple <Record, long> i = mr.ReadEntry(tmp); Console.WriteLine(spacing + (i.Item1.Key == long.MaxValue ? "-" : i.Item1 + " | " + (i.Item2 == -1 ? "-" : "#" + i.Item2)) + (i.Item1.Deleted ? " [X]" : "")); spacing += " "; tmp = i.Item2; } }
public void PrintAllMainFile() { using (var mr = new MainReader(_filePath, MainPageSize, Mode.Read, false)) { Console.WriteLine("Entries per page: " + MainPageSize); long entry = 0L; Tuple <Record, long> i; bool flag = true; while ((i = mr.ReadEntry(entry)) != null) { if (mr.LastPage.Address >= MainReader.PageNumberFromAddress(OverflowAddress) && flag) { flag = false; Console.WriteLine("\n###OVERFLOW###\n"); } Console.WriteLine(EntryToString(i)); entry++; } } }
public void PrintMainFile() { var mr = new MainReader(_filePath, MainPageSize, Mode.Read, false); { Console.WriteLine("Entries per page: " + MainPageSize); long entry = 0L; long countRecs = 0; Tuple <Record, long> i; while ((i = mr.ReadEntry(entry)) != null) { if (mr.LastPage.Count <= 0) { break; } if (mr.LastPage.Address >= MainReader.PageNumberFromAddress(OverflowAddress)) { break; } if (countRecs >= MainPageSize) { countRecs = 1; Console.WriteLine(); } else { countRecs++; } Console.WriteLine(EntryToString(i)); if (i.Item2 != -1) { FollowChain(i.Item2, ref mr); } entry++; } } mr.Dispose(); }