1
2
3
4
5 package abi
6
7 import (
8 "unsafe"
9 )
10
11
12
13 const (
14
15 SwissMapGroupSlotsBits = 3
16
17
18 SwissMapGroupSlots = 1 << SwissMapGroupSlotsBits
19
20
21
22 SwissMapMaxKeyBytes = 128
23 SwissMapMaxElemBytes = 128
24
25 ctrlEmpty = 0b10000000
26 bitsetLSB = 0x0101010101010101
27
28
29 SwissMapCtrlEmpty = bitsetLSB * uint64(ctrlEmpty)
30 )
31
32 type SwissMapType struct {
33 Type
34 Key *Type
35 Elem *Type
36 Group *Type
37
38 Hasher func(unsafe.Pointer, uintptr) uintptr
39 GroupSize uintptr
40 SlotSize uintptr
41 ElemOff uintptr
42 Flags uint32
43 }
44
45
46 const (
47 SwissMapNeedKeyUpdate = 1 << iota
48 SwissMapHashMightPanic
49 SwissMapIndirectKey
50 SwissMapIndirectElem
51 )
52
53 func (mt *SwissMapType) NeedKeyUpdate() bool {
54 return mt.Flags&SwissMapNeedKeyUpdate != 0
55 }
56 func (mt *SwissMapType) HashMightPanic() bool {
57 return mt.Flags&SwissMapHashMightPanic != 0
58 }
59 func (mt *SwissMapType) IndirectKey() bool {
60 return mt.Flags&SwissMapIndirectKey != 0
61 }
62 func (mt *SwissMapType) IndirectElem() bool {
63 return mt.Flags&SwissMapIndirectElem != 0
64 }
65
View as plain text