mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 08:42:24 -06:00 
			
		
		
		
	* update go-structr and go-mutexes with memory usage improvements * bump to go-structr v0.8.4
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2023 Dolthub, Inc.
 | 
						|
//
 | 
						|
// Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
// you may not use this file except in compliance with the License.
 | 
						|
// You may obtain a copy of the License at
 | 
						|
//
 | 
						|
//     http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
//
 | 
						|
// Unless required by applicable law or agreed to in writing, software
 | 
						|
// distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
// See the License for the specific language governing permissions and
 | 
						|
// limitations under the License.
 | 
						|
 | 
						|
//go:build !amd64 || nosimd
 | 
						|
 | 
						|
package swiss
 | 
						|
 | 
						|
import (
 | 
						|
	"math/bits"
 | 
						|
	"unsafe"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	groupSize       = 8
 | 
						|
	maxAvgGroupLoad = 7
 | 
						|
 | 
						|
	loBits uint64 = 0x0101010101010101
 | 
						|
	hiBits uint64 = 0x8080808080808080
 | 
						|
)
 | 
						|
 | 
						|
type bitset uint64
 | 
						|
 | 
						|
func metaMatchH2(m *metadata, h h2) bitset {
 | 
						|
	// https://graphics.stanford.edu/~seander/bithacks.html##ValueInWord
 | 
						|
	return hasZeroByte(castUint64(m) ^ (loBits * uint64(h)))
 | 
						|
}
 | 
						|
 | 
						|
func metaMatchEmpty(m *metadata) bitset {
 | 
						|
	return hasZeroByte(castUint64(m) ^ hiBits)
 | 
						|
}
 | 
						|
 | 
						|
func nextMatch(b *bitset) uint32 {
 | 
						|
	s := uint32(bits.TrailingZeros64(uint64(*b)))
 | 
						|
	*b &= ^(1 << s) // clear bit |s|
 | 
						|
	return s >> 3   // div by 8
 | 
						|
}
 | 
						|
 | 
						|
func hasZeroByte(x uint64) bitset {
 | 
						|
	return bitset(((x - loBits) & ^(x)) & hiBits)
 | 
						|
}
 | 
						|
 | 
						|
func castUint64(m *metadata) uint64 {
 | 
						|
	return *(*uint64)((unsafe.Pointer)(m))
 | 
						|
}
 | 
						|
 | 
						|
//go:linkname fastrand runtime.fastrand
 | 
						|
func fastrand() uint32
 |