1 package simpledb.log;
2
3 import static simpledb.file.Page.INT_SIZE;
4 import simpledb.file.*;
5 import java.util.Iterator;
6
7
8
9
10
11
12
13 class LogIterator implements Iterator<BasicLogRecord> {
14 private Block blk;
15 private Page pg = new Page();
16 private int currentrec;
17
18
19
20
21
22
23
24 LogIterator(Block blk) {
25 this.blk = blk;
26 pg.read(blk);
27 currentrec = pg.getInt(LogMgr.LAST_POS);
28 }
29
30
31
32
33
34
35 public boolean hasNext() {
36 return currentrec>0 || blk.number()>0;
37 }
38
39
40
41
42
43
44
45
46 public BasicLogRecord next() {
47 if (currentrec == 0)
48 moveToNextBlock();
49 currentrec = pg.getInt(currentrec);
50 return new BasicLogRecord(pg, currentrec+INT_SIZE);
51 }
52
53 public void remove() {
54 throw new UnsupportedOperationException();
55 }
56
57
58
59
60
61 private void moveToNextBlock() {
62 blk = new Block(blk.fileName(), blk.number()-1);
63 pg.read(blk);
64 currentrec = pg.getInt(LogMgr.LAST_POS);
65 }
66 }