aboutsummaryrefslogtreecommitdiff
path: root/internal/hash/hash_def.go
blob: f84edebca366b5e4a7c77ad5b27cc01124084fad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package hash

type Action int

// Operations
const (
	HashGet Action = iota
	HashPut
	HashPutNew
	HashDelete
	HashFirst
	HashNext
)

const (
	BufMod = 1 << iota
	BufDisk
	BufBucket
	BufPin
)

type BufHead struct {
	Prev  *BufHead // LRU links
	Next  *BufHead // LRU links
	Ovrlf *BufHead // Overflow page buffer header
	Addr  uint32   // Address of this page
	Page  []byte   // Actual page data
	Flags byte
}

type Segment *BufHead

// HTab is memroy resident data structure
type HTab struct {
	Hdr      HashHdr                         // Header
	NSegs    int                             // Number of allocated segments
	ExSegs   int                             // Number of extra allocated
	Hash     func(interface{}, int64) uint32 // Hash function
	Flags    int                             // Flag values
	FP       int                             // File pointer
	TmpBuf   []byte                          // Temprory Buffer for BIG data
	TmpKey   []byte                          // Temprory Buffer for BIG keys
	CPage    BufHead                         // Currrent page
	CBucket  int                             // Current bucket
	Err      int                             // Error Number -- for DBM compatibility
	NewFile  int                             // Indicates if fd is backing store or not
	SaveFile int                             // Indicates whether we need to flush file at exit
	Mapp     [nCached]uint32                 // Pointers to page maps
	NMaps    int                             // Initial number of bitmaps
	NBufs    int                             // Number of buffers left to allocate
	BufHead  BufHead                         // Header of buffer lru list
	Dir      Segment                         // Hash Bucket directory
}

const nCached = 32 // number of bit maps and spare points

// HashHdr holds hash table invormation
type HashHdr struct {
	Magic     int32           // Magic NO for hash tables
	Version   int32           // Version ID
	LOrder    uint32          // Byte Order
	BSize     int32           // Bucket/Page Size
	BShift    int32           // Bucket shift
	DSize     int32           // Directory Size
	SSize     int32           // Segment Size
	SShift    int32           // Segment shift
	OvflPoint int32           // Where overflow pages are being allocated
	LastFreed int32           // Last overflow page freed
	MaxBucket int32           // ID of Maximum bucket in use
	HighMask  int32           // Mask to modulo into entire table
	LowMask   int32           // Mask to modulo into lower half of table
	FFactor   int32           // Fill factor
	NKeys     int32           // Number of keys in hash table
	HdrPages  int32           // Size of table header
	HCharkey  int32           // value of hash(CHARKEY)
	Spares    [nCached]int32  // spare pages for overflow
	Bitmaps   [nCached]uint16 // address of overflow page bitmaps
}