github.com/MetalBlockchain/metalgo@v1.11.9/vms/platformvm/state/masked_iterator.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package state 5 6 import "github.com/MetalBlockchain/metalgo/ids" 7 8 var _ StakerIterator = (*maskedIterator)(nil) 9 10 type maskedIterator struct { 11 parentIterator StakerIterator 12 maskedStakers map[ids.ID]*Staker 13 } 14 15 // NewMaskedIterator returns a new iterator that skips the stakers in 16 // [parentIterator] that are present in [maskedStakers]. 17 func NewMaskedIterator(parentIterator StakerIterator, maskedStakers map[ids.ID]*Staker) StakerIterator { 18 return &maskedIterator{ 19 parentIterator: parentIterator, 20 maskedStakers: maskedStakers, 21 } 22 } 23 24 func (i *maskedIterator) Next() bool { 25 for i.parentIterator.Next() { 26 staker := i.parentIterator.Value() 27 if _, ok := i.maskedStakers[staker.TxID]; !ok { 28 return true 29 } 30 } 31 return false 32 } 33 34 func (i *maskedIterator) Value() *Staker { 35 return i.parentIterator.Value() 36 } 37 38 func (i *maskedIterator) Release() { 39 i.parentIterator.Release() 40 }