aboutsummaryrefslogtreecommitdiff
path: root/internal/hash/def.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/hash/def.go')
-rw-r--r--internal/hash/def.go78
1 files changed, 78 insertions, 0 deletions
diff --git a/internal/hash/def.go b/internal/hash/def.go
new file mode 100644
index 0000000..f84edeb
--- /dev/null
+++ b/internal/hash/def.go
@@ -0,0 +1,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
+}