// hashmapFreeCount returns count of free pages(hashmap version) func (f *freelist) hashmapFreeCount() int { … } // hashmapAllocate serves the same purpose as arrayAllocate, but use hashmap as backend func (f *freelist) hashmapAllocate(txid txid, n int) pgid { … } // hashmapReadIDs reads pgids as input an initial the freelist(hashmap version) func (f *freelist) hashmapReadIDs(pgids []pgid) { … } // hashmapGetFreePageIDs returns the sorted free page ids func (f *freelist) hashmapGetFreePageIDs() []pgid { … } // hashmapMergeSpans try to merge list of pages(represented by pgids) with existing spans func (f *freelist) hashmapMergeSpans(ids pgids) { … } // mergeWithExistingSpan merges pid to the existing free spans, try to merge it backward and forward func (f *freelist) mergeWithExistingSpan(pid pgid) { … } func (f *freelist) addSpan(start pgid, size uint64) { … } func (f *freelist) delSpan(start pgid, size uint64) { … } // initial from pgids using when use hashmap version // pgids must be sorted func (f *freelist) init(pgids []pgid) { … }