src/scan/Cursor.bend
mylsm-lsm-store@0.6.0.1 · 39 lines · 5 definitions
1import Base
2import mylsm-lsm-store@0.6.0.1/src/ByteMemTable.bend as ByteMemTable
3
4
5type Cursor is Type:
6 CursorReady{entries: List<&1, ByteMemTable.Entry>}
7 CursorEnded{}
8 CursorClosed{}
9 CursorFailed{code: U32, message: String}
10
11
12type Step is Type:
13 CursorItem{entry: ByteMemTable.Entry, cursor: Cursor}
14 CursorEnd{cursor: Cursor}
15 CursorError{cursor: Cursor}
16
17
18def open(entries: List<&1, ByteMemTable.Entry>) -> Cursor:
19 CursorReady{entries}
20
21
22def next(cursor: Cursor) -> Step:
23 match cursor:
24 case CursorReady{entries}:
25 match entries:
26 case Nil{}: CursorEnd{CursorEnded{}}
27 case Con{entry, tail}: CursorItem{entry, CursorReady{tail}}
28 case CursorEnded{}: CursorEnd{CursorEnded{}}
29 case CursorClosed{}: CursorEnd{CursorClosed{}}
30 case CursorFailed{code, message}:
31 CursorError{CursorFailed{code, message}}
32
33
34def close(cursor: Cursor) -> Cursor:
35 match cursor:
36 case CursorReady{_}: CursorClosed{}
37 case CursorEnded{}: CursorEnded{}
38 case CursorClosed{}: CursorClosed{}
39 case CursorFailed{code, message}: CursorFailed{code, message}