pre-allocate arrays

This commit is contained in:
Dan Laine 2020-06-22 16:50:31 -04:00
parent fc15e3cfe6
commit c9aa8eedc2
3 changed files with 22 additions and 11 deletions

View File

@ -57,15 +57,23 @@ func (ids *ShortSet) Remove(idList ...ShortID) {
// Clear empties this set // Clear empties this set
func (ids *ShortSet) Clear() { *ids = nil } func (ids *ShortSet) Clear() { *ids = nil }
// CappedList returns a list of length at most [size]. Size should be >= 0 // CappedList returns a list of length at most [size].
// Size should be >= 0. If size < 0, returns empty list.
func (ids ShortSet) CappedList(size int) []ShortID { func (ids ShortSet) CappedList(size int) []ShortID {
idList := make([]ShortID, size)[:0] if size < 0 {
return make([]ShortID, 0, 0)
}
if l := ids.Len(); l < size {
size = l
}
i := 0
idList := make([]ShortID, size)
for id := range ids { for id := range ids {
if size <= 0 { if i >= size {
break break
} }
size-- idList[i] = NewShortID(id)
idList = append(idList, NewShortID(id)) i++
} }
return idList return idList
} }

View File

@ -71,9 +71,10 @@ func (s *set) Set(vdrs []Validator) {
} }
func (s *set) set(vdrs []Validator) { func (s *set) set(vdrs []Validator) {
s.vdrMap = make(map[[20]byte]int, len(vdrs)) lenVdrs := len(vdrs)
s.vdrSlice = s.vdrSlice[:0] s.vdrMap = make(map[[20]byte]int, lenVdrs)
s.sampler.Weights = s.sampler.Weights[:0] s.vdrSlice = make([]Validator, 0, lenVdrs)
s.sampler.Weights = make([]uint64, 0, lenVdrs)
for _, vdr := range vdrs { for _, vdr := range vdrs {
s.add(vdr) s.add(vdr)

View File

@ -18,6 +18,7 @@ import (
"github.com/ava-labs/gecko/snow/consensus/snowman" "github.com/ava-labs/gecko/snow/consensus/snowman"
"github.com/ava-labs/gecko/snow/engine/common" "github.com/ava-labs/gecko/snow/engine/common"
"github.com/ava-labs/gecko/snow/validators" "github.com/ava-labs/gecko/snow/validators"
"github.com/ava-labs/gecko/utils/codec"
"github.com/ava-labs/gecko/utils/crypto" "github.com/ava-labs/gecko/utils/crypto"
"github.com/ava-labs/gecko/utils/formatting" "github.com/ava-labs/gecko/utils/formatting"
"github.com/ava-labs/gecko/utils/logging" "github.com/ava-labs/gecko/utils/logging"
@ -26,7 +27,6 @@ import (
"github.com/ava-labs/gecko/utils/units" "github.com/ava-labs/gecko/utils/units"
"github.com/ava-labs/gecko/utils/wrappers" "github.com/ava-labs/gecko/utils/wrappers"
"github.com/ava-labs/gecko/vms/components/ava" "github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/utils/codec"
"github.com/ava-labs/gecko/vms/components/core" "github.com/ava-labs/gecko/vms/components/core"
"github.com/ava-labs/gecko/vms/secp256k1fx" "github.com/ava-labs/gecko/vms/secp256k1fx"
) )
@ -808,9 +808,11 @@ func (vm *VM) getValidators(validatorEvents *EventHeap) []validators.Validator {
validator.Wght = weight validator.Wght = weight
} }
vdrList := make([]validators.Validator, len(vdrMap))[:0] vdrList := make([]validators.Validator, len(vdrMap), len(vdrMap))
i := 0
for _, validator := range vdrMap { for _, validator := range vdrMap {
vdrList = append(vdrList, validator) vdrList[i] = validator
i++
} }
return vdrList return vdrList
} }