aboutsummaryrefslogtreecommitdiff
path: root/internal/hash/page.go
blob: 1044f9576c7d438feef75aa541f8f9d92cef7f8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package hash

/*
 * routines dealing with a data page
 *
 * page format:
 *	┌───┬────────┬────────┬────────┐
 * p	│ n │ keyoff │ datoff │ keyoff │
 * 	├───┴────┬───┴───┬────┴──┬─────┤
 *	│ datoff │ free  │  ptr  │ ──> │
 *	├────────┴───────┴───────┴─────┤
 *	│	 F R E E A R E A       │
 *	├──────────────┬───────────────┤
 *	│  <──── ─ ─ ─ │ data	       │
 *	├────────┬─────┴────┬──────────┤
 *	│  key   │ data     │ key      │
 *	└────────┴──────────┴──────────┘
 *
 * Pointer to the free space is always:  p[p[0] + 2]
 * Amount of free space on the page is:  p[p[0] + 1]
 */