MCPcopy
hub / github.com/etcd-io/bbolt / WriteInodeToPage

Function WriteInodeToPage

internal/common/inode.go:70–105  ·  view source on GitHub ↗
(inodes Inodes, p *Page)

Source from the content-addressed store, hash-verified

68}
69
70func WriteInodeToPage(inodes Inodes, p *Page) uint32 {
71 // Loop over each item and write it to the page.
72 // off tracks the offset into p of the start of the next data.
73 off := unsafe.Sizeof(*p) + p.PageElementSize()*uintptr(len(inodes))
74 isLeaf := p.IsLeafPage()
75 for i, item := range inodes {
76 Assert(len(item.Key()) > 0, "write: zero-length inode key")
77
78 // Create a slice to write into of needed size and advance
79 // byte pointer for next iteration.
80 sz := len(item.Key()) + len(item.Value())
81 b := UnsafeByteSlice(unsafe.Pointer(p), off, 0, sz)
82 off += uintptr(sz)
83
84 // Write the page element.
85 if isLeaf {
86 elem := p.LeafPageElement(uint16(i))
87 elem.SetPos(uint32(uintptr(unsafe.Pointer(&b[0])) - uintptr(unsafe.Pointer(elem))))
88 elem.SetFlags(item.Flags())
89 elem.SetKsize(uint32(len(item.Key())))
90 elem.SetVsize(uint32(len(item.Value())))
91 } else {
92 elem := p.BranchPageElement(uint16(i))
93 elem.SetPos(uint32(uintptr(unsafe.Pointer(&b[0])) - uintptr(unsafe.Pointer(elem))))
94 elem.SetKsize(uint32(len(item.Key())))
95 elem.SetPgid(item.Pgid())
96 Assert(elem.Pgid() != p.Id(), "write: circular dependency occurred")
97 }
98
99 // Write data for the element to the end of the page.
100 l := copy(b, item.Key())
101 copy(b[l:], item.Value())
102 }
103
104 return uint32(off)
105}
106
107func UsedSpaceInPage(inodes Inodes, p *Page) uint32 {
108 off := unsafe.Sizeof(*p) + p.PageElementSize()*uintptr(len(inodes))

Callers 2

writeMethod · 0.92
ClearPageElementsFunction · 0.92

Calls 15

AssertFunction · 0.85
UnsafeByteSliceFunction · 0.85
PageElementSizeMethod · 0.80
IsLeafPageMethod · 0.80
LeafPageElementMethod · 0.80
SetVsizeMethod · 0.80
BranchPageElementMethod · 0.80
IdMethod · 0.80
KeyMethod · 0.45
ValueMethod · 0.45
SetPosMethod · 0.45
SetFlagsMethod · 0.45

Tested by

no test coverage detected